From 5f0ba31890249b4917e20fecef46144509b6fc10 Mon Sep 17 00:00:00 2001 From: Guoyu Wang <62914304+gwang-msft@users.noreply.github.com> Date: Fri, 28 Jan 2022 12:48:48 -0800 Subject: [PATCH 01/56] Remove coremltools submodule *security vulnerability* and copy the coreml model schema (#10424) * remove coremltools submodule * update cgmanifest * Copy proto files directly from coremltools --- .gitmodules | 3 - cgmanifests/generated/cgmanifest.json | 88 +- cmake/external/coremltools | 1 - cmake/onnxruntime_providers.cmake | 2 +- .../ArrayFeatureExtractor.proto | 19 + .../BayesianProbitRegressor.proto | 139 + .../mlmodel_format/CategoricalMapping.proto | 38 + .../coreml/mlmodel_format/CustomModel.proto | 30 + .../mlmodel_format/DataStructures.proto | 95 + .../mlmodel_format/DictVectorizer.proto | 36 + .../coreml/mlmodel_format/FeatureTypes.proto | 224 + .../mlmodel_format/FeatureVectorizer.proto | 26 + .../coreml/mlmodel_format/GLMClassifier.proto | 43 + .../coreml/mlmodel_format/GLMRegressor.proto | 28 + .../coreml/mlmodel_format/Gazetteer.proto | 43 + .../coreml/mlmodel_format/Identity.proto | 18 + .../coreml/mlmodel_format/Imputer.proto | 43 + .../ItemSimilarityRecommender.proto | 93 + .../coreml/mlmodel_format/LinkedModel.proto | 42 + .../coreml/mlmodel_format/Model.proto | 322 + .../mlmodel_format/NearestNeighbors.proto | 132 + .../coreml/mlmodel_format/NeuralNetwork.proto | 6531 +++++++++++++++++ .../NonMaximumSuppression.proto | 187 + .../coreml/mlmodel_format/Normalizer.proto | 38 + .../coreml/mlmodel_format/OneHotEncoder.proto | 41 + .../coreml/mlmodel_format/Parameters.proto | 52 + .../providers/coreml/mlmodel_format/README.md | 16 + .../providers/coreml/mlmodel_format/SVM.proto | 195 + .../coreml/mlmodel_format/Scaler.proto | 34 + .../SoundAnalysisPreprocessing.proto | 60 + .../mlmodel_format/TextClassifier.proto | 43 + .../coreml/mlmodel_format/TreeEnsemble.proto | 161 + .../mlmodel_format/VisionFeaturePrint.proto | 63 + .../coreml/mlmodel_format/WordEmbedding.proto | 35 + .../coreml/mlmodel_format/WordTagger.proto | 75 + 35 files changed, 8912 insertions(+), 84 deletions(-) delete mode 160000 cmake/external/coremltools create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/ArrayFeatureExtractor.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/BayesianProbitRegressor.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/CategoricalMapping.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/CustomModel.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/DataStructures.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/DictVectorizer.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/FeatureTypes.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/FeatureVectorizer.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/GLMClassifier.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/GLMRegressor.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/Gazetteer.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/Identity.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/Imputer.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/ItemSimilarityRecommender.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/LinkedModel.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/Model.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/NearestNeighbors.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/NeuralNetwork.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/NonMaximumSuppression.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/Normalizer.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/OneHotEncoder.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/Parameters.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/README.md create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/SVM.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/Scaler.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/SoundAnalysisPreprocessing.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/TextClassifier.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/TreeEnsemble.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/VisionFeaturePrint.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/WordEmbedding.proto create mode 100644 onnxruntime/core/providers/coreml/mlmodel_format/WordTagger.proto diff --git a/.gitmodules b/.gitmodules index 17a9a5bd6be18..1126c2fdbf366 100644 --- a/.gitmodules +++ b/.gitmodules @@ -56,9 +56,6 @@ [submodule "cmake/external/mp11"] path = cmake/external/mp11 url = https://github.com/boostorg/mp11.git -[submodule "cmake/external/coremltools"] - path = cmake/external/coremltools - url = https://github.com/apple/coremltools.git [submodule "cmake/external/dlpack"] path = cmake/external/dlpack url = https://github.com/dmlc/dlpack.git diff --git a/cgmanifests/generated/cgmanifest.json b/cgmanifests/generated/cgmanifest.json index 8acfa446b87f1..b10e0be0e67a7 100644 --- a/cgmanifests/generated/cgmanifest.json +++ b/cgmanifests/generated/cgmanifest.json @@ -110,16 +110,6 @@ "comments": "git submodule at cmake/external/SafeInt/safeint" } }, - { - "component": { - "type": "git", - "git": { - "commitHash": "523d5e03d86c26267ee6bdf17dd20f6ce6bdadd7", - "repositoryUrl": "https://github.com/apple/coremltools.git" - }, - "comments": "git submodule at cmake/external/coremltools" - } - }, { "component": { "type": "git", @@ -174,7 +164,7 @@ "component": { "type": "git", "git": { - "commitHash": "a3d65c80d32c3e584b7aab41d516a0043b2a5e84", + "commitHash": "3acac70a551c321574732e5bfd67930244bb7151", "repositoryUrl": "https://github.com/emscripten-core/emsdk.git" }, "comments": "git submodule at cmake/external/emsdk" @@ -215,7 +205,7 @@ "type": "git", "git": { "commitHash": "db78ac1d7716f56fc9f1b030b715f872f93964e4", - "repositoryUrl": "https://github.com/nlohmann/json" + "repositoryUrl": "https://github.com/nlohmann/json.git" }, "comments": "git submodule at cmake/external/json" } @@ -234,7 +224,7 @@ "component": { "type": "git", "git": { - "commitHash": "2d54553b7a78c7c35620b827e7e5ab2228ecb495", + "commitHash": "f412df7a2b64421e1f1d61fde6055a6ea288e8f5", "repositoryUrl": "https://github.com/microsoft/mimalloc.git" }, "comments": "git submodule at cmake/external/mimalloc" @@ -255,7 +245,7 @@ "type": "git", "git": { "commitHash": "436617053d0f39a1019a371c3a9aa599b3cb2cea", - "repositoryUrl": "https://github.com/google/nsync" + "repositoryUrl": "https://github.com/google/nsync.git" }, "comments": "git submodule at cmake/external/nsync" } @@ -265,7 +255,7 @@ "type": "git", "git": { "commitHash": "be76ca7148396176784ba8733133b9fb1186ea0d", - "repositoryUrl": "https://github.com/onnx/onnx" + "repositoryUrl": "https://github.com/onnx/onnx.git" }, "comments": "git submodule at cmake/external/onnx" } @@ -294,7 +284,7 @@ "component": { "type": "git", "git": { - "commitHash": "1f416bb462689f3ef9e3f1057a113d9c6aba6972", + "commitHash": "e9456d57605c883cdf985e634ab483e2c1500bb1", "repositoryUrl": "https://github.com/onnx/onnx-tensorrt.git" }, "comments": "git submodule at cmake/external/onnx-tensorrt" @@ -304,7 +294,7 @@ "component": { "type": "git", "git": { - "commitHash": "553df22c67bee5f0fe6599cff60f1afc6748c635", + "commitHash": "994c6181247d7b419b28889fc57d5817e2089419", "repositoryUrl": "https://github.com/onnx/onnx.git" }, "comments": "git submodule at cmake/external/onnx-tensorrt/third_party/onnx" @@ -324,22 +314,12 @@ "component": { "type": "git", "git": { - "commitHash": "09f082940113661256310e3f4811aa7261a9fa05", + "commitHash": "59a2ac2745d8a57ac94c6accced73620d59fb844", "repositoryUrl": "https://github.com/pybind/pybind11.git" }, "comments": "git submodule at cmake/external/onnx-tensorrt/third_party/onnx/third_party/pybind11" } }, - { - "component": { - "type": "git", - "git": { - "commitHash": "6a00cbc4a9b8e68b71caf7f774b3f9c753ae84d5", - "repositoryUrl": "https://github.com/wjakob/clang-cindex-python3" - }, - "comments": "git submodule at cmake/external/onnx-tensorrt/third_party/onnx/third_party/pybind11/tools/clang" - } - }, { "component": { "type": "git", @@ -410,62 +390,12 @@ "comments": "git submodule at cmake/external/tensorboard" } }, - { - "component": { - "type": "git", - "git": { - "commitHash": "9ec2b92d180dff8877e402018b97baa574031b8b", - "repositoryUrl": "https://github.com/microsoft/onnxruntime-tvm.git" - }, - "comments": "git submodule at cmake/external/tvm" - } - }, - { - "component": { - "type": "git", - "git": { - "commitHash": "b257a9221ee1e5180d994b3488ddcc259b0ac157", - "repositoryUrl": "https://github.com/dmlc/HalideIR" - }, - "comments": "git submodule at cmake/external/tvm/3rdparty/HalideIR" - } - }, - { - "component": { - "type": "git", - "git": { - "commitHash": "5c792cef3aee54ad8b7000111c9dc1797f327b59", - "repositoryUrl": "https://github.com/dmlc/dlpack" - }, - "comments": "git submodule at cmake/external/tvm/3rdparty/dlpack" - } - }, - { - "component": { - "type": "git", - "git": { - "commitHash": "d07fb7a443b5db8a89d65a15a024af6a425615a5", - "repositoryUrl": "https://github.com/dmlc/dmlc-core" - }, - "comments": "git submodule at cmake/external/tvm/3rdparty/dmlc-core" - } - }, - { - "component": { - "type": "git", - "git": { - "commitHash": "cabe04d6d6b05356fa8f9741704924788f0dd762", - "repositoryUrl": "https://github.com/agauniyal/rang" - }, - "comments": "git submodule at cmake/external/tvm/3rdparty/rang" - } - }, { "component": { "type": "git", "git": { "commitHash": "e8c599bca6c56c44b6730ad93f6abbc9ecd60fc1", - "repositoryUrl": "https://github.com/microsoft/wil" + "repositoryUrl": "https://github.com/microsoft/wil.git" }, "comments": "git submodule at cmake/external/wil" } diff --git a/cmake/external/coremltools b/cmake/external/coremltools deleted file mode 160000 index 523d5e03d86c2..0000000000000 --- a/cmake/external/coremltools +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 523d5e03d86c26267ee6bdf17dd20f6ce6bdadd7 diff --git a/cmake/onnxruntime_providers.cmake b/cmake/onnxruntime_providers.cmake index a05490d1bd132..eab1918de701d 100644 --- a/cmake/onnxruntime_providers.cmake +++ b/cmake/onnxruntime_providers.cmake @@ -784,7 +784,7 @@ if (onnxruntime_USE_COREML) # Compile CoreML proto definition to ${CMAKE_CURRENT_BINARY_DIR}/coreml if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "iOS") - set(COREML_PROTO_ROOT ${PROJECT_SOURCE_DIR}/external/coremltools/mlmodel/format) + set(COREML_PROTO_ROOT ${PROJECT_SOURCE_DIR}/../onnxruntime/core/providers/coreml/mlmodel_format) file(GLOB coreml_proto_srcs "${COREML_PROTO_ROOT}/*.proto" ) diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/ArrayFeatureExtractor.proto b/onnxruntime/core/providers/coreml/mlmodel_format/ArrayFeatureExtractor.proto new file mode 100644 index 0000000000000..2b83ccbe3574f --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/ArrayFeatureExtractor.proto @@ -0,0 +1,19 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification; + +/** + * An array feature extractor. + * + * Given an index, extracts the value at that index from its array input. + * Indexes are zero-based. + */ +message ArrayFeatureExtractor { + repeated uint64 extractIndex = 1; +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/BayesianProbitRegressor.proto b/onnxruntime/core/providers/coreml/mlmodel_format/BayesianProbitRegressor.proto new file mode 100644 index 0000000000000..9688d87ce48ba --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/BayesianProbitRegressor.proto @@ -0,0 +1,139 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification; + +/** +* A Bayesian probit regressor. +* +* The probit regression model is superficially similar to the more commonly known +* logistic regression, with sampling distribution of the model given by +* +* P(y=+1|x,w) = Φ(/β) +* +* where w are the set of weights, +* x are the set of features for the given event, +* β is a model hyper-parameter, and +* Φ is the link function, defined to be the CDF of the normal distribution. +* The weights w[i,j] are Gaussian distributed, with mean μ[i,j] and precision 1/(σ[i,j])^2 +* (where i indexes over features and j indexes over the values for the feature). +* The parameter β scales the steepness of the inverse link function. +* +* (see https://en.wikipedia.org/wiki/Probit_model and https://en.wikipedia.org/wiki/Logistic_regression +* for more details on probit model and logistic regression, respectively) +* +* Input: X +* x represents a set of features, each taking on a discrete value (note that continuous values +* would first need to be discretized). x can be represented as a vector where the index i is +* the feature id and x[i] is the feature value. Alternatively, x can be represented as a matrix +* with 2 columns where the first column indicates the feature id and the second column contains +* the feature values, i.e. x[i,0] is the feature id and x[i,1] is the feature value. +* +* additional input features: +* - "optimism": apply a mean shift to the probability, i.e. shift regression mean by o*stdev, +* where o is the "optimism" parameter (see additional output features) +* - "samplingScale": for sampling from posterior, multiply standard deviation by this factor +* - "samplingTruncation": for sampling from posterior, truncate sampling distribution at given multiple of std from mean +* +* Output: Y +* probability P(y|x,w) +* +* additional output features: +* - mean (regression output before applying link function) +* - variance (regression output variance before applying link function) +* - pessimistic probability: P(y|x,w) with a mean shift parameterized by "optimism" feature +* - sampled probability: p ~ P(y|x,w) with standard deviation scaling parametrized by "samplingScale" feature +* and distribution truncated at multiple of standard deviation, +* where multiple parameterized by "samplingTruncation" feature. +* +*/ + +message BayesianProbitRegressor { + + /* + * Parameterization of a Gaussian distribution + */ + message Gaussian { + double mean = 1; + double precision = 2; // inverse of the variance + } + + /* + * Weight for a specific feature value + * The weight is represented as a Gaussian distribution + * with a mean and precision (1/variance) to capture + * uncertainty in the weight + */ + message FeatureValueWeight { + uint32 featureValue = 1; + Gaussian featureWeight = 2; + } + + /* + * Feature with associated weights (for different values) + * Each feature has a set of weights for the (discrete) values + * it can take + */ + message FeatureWeight { + uint32 featureId = 1; + repeated FeatureValueWeight weights = 2; + } + + uint32 numberOfFeatures = 1; + + Gaussian bias = 2; // bias term + + /* + * Set of features with associated weights + */ + repeated FeatureWeight features = 3; // feature weights + + /* + * Set this name to be the same as input feature of type multi-array (1D) + * in the model description you want to use as the regression input + */ + string regressionInputFeatureName = 10; + + /* + * Set this name to be the same as optional input feature of type double + * in the model description you want to use as the optimism input + */ + string optimismInputFeatureName = 11; + + /* + * Set this name to be the same as optional input feature of type double + * in the model description you want to use as the samplingScale input + */ + string samplingScaleInputFeatureName = 12; + + /* + * Set this name to be the same as optional input feature of type double + * in the model description you want to use as the samplingBounds input + */ + string samplingTruncationInputFeatureName = 13; + + /* + * name of 'mean' output feature + */ + string meanOutputFeatureName = 20; + + /* + * name of 'variance' output feature + */ + string varianceOutputFeatureName = 21; + + /* + * name of 'pessimistic' output feature + */ + string pessimisticProbabilityOutputFeatureName = 22; + + /* + * name of 'sampled' output feature: samples from the scaled posterior probability distribuiton + */ + string sampledProbabilityOutputFeatureName = 23; +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/CategoricalMapping.proto b/onnxruntime/core/providers/coreml/mlmodel_format/CategoricalMapping.proto new file mode 100644 index 0000000000000..23112d074213a --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/CategoricalMapping.proto @@ -0,0 +1,38 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification; + +/** + * A categorical mapping. + * + * This allows conversion from integers to strings, or from strings to integers. + */ +message CategoricalMapping { + oneof MappingType { + // Conversion from strings to integers + StringToInt64Map stringToInt64Map = 1; + + // Conversion from integer to string + Int64ToStringMap int64ToStringMap = 2; + } + + /** + * The value returned if an input is not contained in the map above. + * If one of these is not set, then an error is raised on an unknown input. + */ + oneof ValueOnUnknown { + // Default output when converting from an integer to a string. + string strValue = 101; + + // Default output when converting from a string to an integer. + int64 int64Value = 102; + } +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/CustomModel.proto b/onnxruntime/core/providers/coreml/mlmodel_format/CustomModel.proto new file mode 100644 index 0000000000000..9a6d36e009ada --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/CustomModel.proto @@ -0,0 +1,30 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification; + +/** +* A parameterized model whose function is defined in code +*/ +message CustomModel { + + message CustomModelParamValue { + oneof value { + double doubleValue = 10; + string stringValue = 20; + int32 intValue = 30; + int64 longValue = 40; + bool boolValue = 50; + bytes bytesValue = 60; + } + } + + string className = 10; // The name of the class (conforming to MLCustomModel) corresponding to this model + map parameters = 30; + string description = 40; // An (optional) description provided by the model creator. This information is displayed when viewing the model, but does not affect the model's execution on device. +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/DataStructures.proto b/onnxruntime/core/providers/coreml/mlmodel_format/DataStructures.proto new file mode 100644 index 0000000000000..8b120c2d7d102 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/DataStructures.proto @@ -0,0 +1,95 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "FeatureTypes.proto"; + +package CoreML.Specification; + +/** + * A mapping from a string + * to a 64-bit integer. + */ +message StringToInt64Map { + map map = 1; +} + +/** + * A mapping from a 64-bit integer + * to a string. + */ +message Int64ToStringMap { + map map = 1; +} + +/** + * A mapping from a string + * to a double-precision floating point number. + */ +message StringToDoubleMap { + map map = 1; +} + +/** + * A mapping from a 64-bit integer + * to a double-precision floating point number. + */ +message Int64ToDoubleMap { + map map = 1; +} + +/** + * A vector of strings. + */ +message StringVector { + repeated string vector = 1; +} + +/** + * A vector of 64-bit integers. + */ +message Int64Vector { + repeated int64 vector = 1; +} + +/** + * A vector of floating point numbers. + */ +message FloatVector { + repeated float vector = 1; +} + +/** + * A vector of double-precision floating point numbers. + */ +message DoubleVector { + repeated double vector = 1; +} + +/** + * A range of int64 values + */ +message Int64Range { + int64 minValue = 1; + int64 maxValue = 2; +} + +/** + * A set of int64 values + */ +message Int64Set { + repeated int64 values = 1; +} + +/** + * A range of double values + */ +message DoubleRange { + double minValue = 1; + double maxValue = 2; +} + diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/DictVectorizer.proto b/onnxruntime/core/providers/coreml/mlmodel_format/DictVectorizer.proto new file mode 100644 index 0000000000000..3f94eeec1745c --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/DictVectorizer.proto @@ -0,0 +1,36 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification; + +/** + * Uses an index mapping to convert a dictionary to an array. + * + * The output array will be equal in length to the index mapping vector parameter. + * All keys in the input dictionary must be present in the index mapping vector. + * + * For each item in the input dictionary, insert its value in the output array. + * The position of the insertion is determined by the position of the item's key + * in the index mapping. Any keys not present in the input dictionary, will be + * zero in the output array. + * + * For example: if the ``stringToIndex`` parameter is set to ``["a", "c", "b", "z"]``, + * then an input of ``{"a": 4, "c": 8}`` will produce an output of ``[4, 8, 0, 0]``. + * + */ +message DictVectorizer { + oneof Map { + /// String keys to indexes + StringVector stringToIndex = 1; + + /// Int keys to indexes + Int64Vector int64ToIndex = 2; + } +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/FeatureTypes.proto b/onnxruntime/core/providers/coreml/mlmodel_format/FeatureTypes.proto new file mode 100644 index 0000000000000..8711ac7de3026 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/FeatureTypes.proto @@ -0,0 +1,224 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification; + +/** + * The 64-bit integer feature type. + */ +message Int64FeatureType {} + +/** + * The double-precision floating point number feature type. + */ +message DoubleFeatureType {} + +/** + * The string feature type. + */ +message StringFeatureType {} + + +message SizeRange { + uint64 lowerBound = 1; + int64 upperBound = 2; // negative value means unbound otherwise upperbound is included in range +} + +/** + * The image feature type. + */ +message ImageFeatureType { + // Assumes raw (decompressed) format + enum ColorSpace { + INVALID_COLOR_SPACE = 0; + GRAYSCALE = 10; // 8 bits per pixel + RGB = 20; // 32 bits per pixel: RGBA with A channel ignored + BGR = 30; // 32 bits per pixel: BGRA with A channel ignored + } + + message ImageSize { + uint64 width = 1; + uint64 height = 2; + } + + message EnumeratedImageSizes { + repeated ImageSize sizes = 1; + } + + message ImageSizeRange { + SizeRange widthRange = 1; + SizeRange heightRange = 2; + } + + // The required or default image size is width x height + // + // If specificationVersion <= 2 or SizeFlexibility is empty, + // width x height is the required fixed image size + // + // If SizeFlexibility is present, width x height indicate a "default" + // image size which must be consistent with the flexibilty specified + + int64 width = 1; + int64 height = 2; + + // For specification version >= 3 you can specify image size flexibility. + + oneof SizeFlexibility { + + // Use enumeratedSizes for a set of distinct fixed sizes + // e.g. portrait or landscape: [80 x 100, 100 x 8] + // + // If the width x height fields above are specified then they must be + // one of the sizes listed. + // + // If width and height are not specified above then the default width + // and height will be enumeratedSizes[0] + // + // Must be non-empty + + EnumeratedImageSizes enumeratedSizes = 21; + + // Use imageSizeRange to allow for ranges of values + // e.g. any image greater than 10 x 20: [10..= 3 you can specify image size flexibility. + + oneof ShapeFlexibility { + + // Use enumeratedShapes for a set of distinct fixed shapes + // + // If the shape field is specified then it must be + // one of the enumerated shapes. + /// + // If shape is not specifed, the "default" shape will be considered + // enumeratedShapes[0] + // + // Must be non-empty + + EnumeratedShapes enumeratedShapes = 21; + + // Use shapeRange to allow the size of each dimension vary within + // indpendently specified ranges + // + // If you specify shape above it must fall in the range + // specified in shapeRanges. It will be treated as the default shape. + // + // If you don't specify shape above then the default shape will + // have shape[d] = shapeRange.sizeRanges[d].lowerBound + + ShapeRange shapeRange = 31; + + } + + oneof defaultOptionalValue { + int32 intDefaultValue = 41; + float floatDefaultValue = 51; + double doubleDefaultValue = 61; + } + +} + +/** + * The dictionary feature type. + */ +message DictionaryFeatureType { + /** + * Key/value type tags, with the following restrictions: + * - ``keyType`` must be a hashable type + * - ``valueType`` is assumed to be a ``double`` + */ + oneof KeyType { + Int64FeatureType int64KeyType = 1; + StringFeatureType stringKeyType = 2; + } +} + +/** + * The Sequence feature type. + */ +message SequenceFeatureType { + + /** + * Currently only categorical int64 and String sequences are supported + */ + oneof Type { + Int64FeatureType int64Type = 1; + StringFeatureType stringType = 3; + } + + // Range of allowed size/length/count of sequence + SizeRange sizeRange = 101; +} + +/** + * A feature, which may be optional. + */ +message FeatureType { + oneof Type { + Int64FeatureType int64Type = 1; + DoubleFeatureType doubleType = 2; + StringFeatureType stringType = 3; + ImageFeatureType imageType = 4; + ArrayFeatureType multiArrayType = 5; + DictionaryFeatureType dictionaryType = 6; + SequenceFeatureType sequenceType = 7; + } + + bool isOptional = 1000; +} + diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/FeatureVectorizer.proto b/onnxruntime/core/providers/coreml/mlmodel_format/FeatureVectorizer.proto new file mode 100644 index 0000000000000..75eaf14b53669 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/FeatureVectorizer.proto @@ -0,0 +1,26 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification; + +/** + * A FeatureVectorizer puts one or more features into a single array. + * + * The ordering of features in the output array is determined by + * ``inputList``. + * + * ``inputDimensions`` is a zero based index. + */ +message FeatureVectorizer { + message InputColumn { + string inputColumn = 1; + uint64 inputDimensions = 2; + } + + repeated InputColumn inputList = 1; +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/GLMClassifier.proto b/onnxruntime/core/providers/coreml/mlmodel_format/GLMClassifier.proto new file mode 100644 index 0000000000000..47f6f4a3c7b8c --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/GLMClassifier.proto @@ -0,0 +1,43 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification; + +/** + * A generalized linear model classifier. + */ +message GLMClassifier { + message DoubleArray { + repeated double value = 1; + } + + enum PostEvaluationTransform { + Logit = 0; + Probit = 1; /// Only binary classification is supported for probit + } + + enum ClassEncoding { + ReferenceClass = 0; /// First class is the reference class + OneVsRest = 1; /// Also called One vs All + } + + repeated DoubleArray weights = 1; + repeated double offset = 2; + PostEvaluationTransform postEvaluationTransform = 3; + ClassEncoding classEncoding = 4; + + /** + * Required class label mapping. + */ + oneof ClassLabels { + StringVector stringClassLabels = 100; + Int64Vector int64ClassLabels = 101; + } +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/GLMRegressor.proto b/onnxruntime/core/providers/coreml/mlmodel_format/GLMRegressor.proto new file mode 100644 index 0000000000000..64093c4f156a8 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/GLMRegressor.proto @@ -0,0 +1,28 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification; + +/** + * A generalized linear model regressor. + */ +message GLMRegressor { + message DoubleArray { + repeated double value = 1; + } + + enum PostEvaluationTransform { + NoTransform = 0; + Logit = 1; + Probit = 2; + } + + repeated DoubleArray weights = 1; + repeated double offset = 2; + PostEvaluationTransform postEvaluationTransform = 3; +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/Gazetteer.proto b/onnxruntime/core/providers/coreml/mlmodel_format/Gazetteer.proto new file mode 100644 index 0000000000000..6abbffaf623b9 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/Gazetteer.proto @@ -0,0 +1,43 @@ +// Copyright (c) 2019, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification.CoreMLModels; + +/** +* A model which uses an efficient probabilistic representation +* for assigning labels to a set of strings. +*/ +message Gazetteer { + + /* + * Stores the revision number for the model, revision 2 is available on + * iOS, tvOS 13.0+, macOS 10.15+ + */ + uint32 revision = 1; + + /* + * Stores the language of the model, as specified in BCP-47 format, + * e.g. "en-US". See https://tools.ietf.org/html/bcp47 + */ + string language = 10; + + /* + * Natural Lanaguge framework's efficient representation of a gazetter. + */ + bytes modelParameterData = 100; + + /* + * Stores the set of output class labels + */ + oneof ClassLabels { + StringVector stringClassLabels = 200; + } + +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/Identity.proto b/onnxruntime/core/providers/coreml/mlmodel_format/Identity.proto new file mode 100644 index 0000000000000..123a15e59156d --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/Identity.proto @@ -0,0 +1,18 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification; + +/** + * An identity model. + * + * This model returns given inputs as outputs, unchanged. + * Intended to be used for testing purposes. + */ +message Identity { +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/Imputer.proto b/onnxruntime/core/providers/coreml/mlmodel_format/Imputer.proto new file mode 100644 index 0000000000000..3de280b2f162d --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/Imputer.proto @@ -0,0 +1,43 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification; + +/** + * A transformer that replaces missing values with a default value, + * such as a statistically-derived value. + * + * If ``ReplaceValue`` is set, then missing values of that type are + * replaced with the corresponding value. + * + * For example: if ``replaceDoubleValue`` is set to ``NaN`` + * and a single ``NaN`` double value is provided as input, + * then it is replaced by ``imputedDoubleValue``. However + * if the input is an array of doubles, then any instances + * of ``NaN`` in the array is replaced with the corresponding + * value in ``imputedDoubleArray``. + */ +message Imputer { + oneof ImputedValue { + double imputedDoubleValue = 1; + int64 imputedInt64Value = 2; + string imputedStringValue = 3; + DoubleVector imputedDoubleArray = 4; + Int64Vector imputedInt64Array = 5; + StringToDoubleMap imputedStringDictionary = 6; + Int64ToDoubleMap imputedInt64Dictionary = 7; + } + + oneof ReplaceValue { + double replaceDoubleValue = 11; + int64 replaceInt64Value = 12; + string replaceStringValue = 13; + } +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/ItemSimilarityRecommender.proto b/onnxruntime/core/providers/coreml/mlmodel_format/ItemSimilarityRecommender.proto new file mode 100644 index 0000000000000..a5a8c11092d36 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/ItemSimilarityRecommender.proto @@ -0,0 +1,93 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +/** + * Each tree is a collection of nodes, + * each of which is identified by a unique identifier. + * + * Each node is either a branch or a leaf node. + * A branch node evaluates a value according to a behavior; + * if true, the node identified by ``true_child_node_id`` is evaluated next, + * if false, the node identified by ``false_child_node_id`` is evaluated next. + * A leaf node adds the evaluation value to the base prediction value + * to get the final prediction. + * + * A tree must have exactly one root node, + * which has no parent node. + * A tree must not terminate on a branch node. + * All leaf nodes must be accessible + * by evaluating one or more branch nodes in sequence, + * starting from the root node. + */ + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification; + + +/** + * Item Similarity Recommender + * + * The Item Similarity recommender takes as input a list of items and scores, + * then uses that information and a table of item similarities to predict similarity + * scores for all items. By default, the items predicted are most similar to the given + * items but not part of that item set. + * + * The predicted score for a given item k is + * sum_(i in observed items) sim_(k,i) * (score_i - shift_k) + * + * Because only the most similar scores for each item i are stored, + * sim_(k,i) is often zero. + * + * For many models, the score adjustment parameter shift_j is zero -- it's occasionally used + * to counteract global biases for popular items. + * + * + * References: + */ +message ItemSimilarityRecommender { + + /** The items similar to a given base item. + */ + message ConnectedItem { + uint64 itemId = 1; + double similarityScore = 2; + } + + /** The formula for the score of a given model as given above, with shift_k + * parameter given by itemScoreAdjustment, and the similar item list filling in + * all the known sim(k,i) scores for i given by itemID and k given by the itemID parameter in + * the similarItemList. + */ + message SimilarItems { + uint64 itemId = 1; + repeated ConnectedItem similarItemList = 2; + double itemScoreAdjustment = 3; + } + + repeated SimilarItems itemItemSimilarities = 1; + + /** One or none of these are given. If none are given, then the items must number 0, 1, ..., num_items - 1. + * If either is given, the length must be exactly num_items. + */ + StringVector itemStringIds = 2; + Int64Vector itemInt64Ids = 3; + + /** Input parameter names specifying different possible inputs to the recommender. + */ + string itemInputFeatureName = 10; /* Required */ + string numRecommendationsInputFeatureName = 11; /* Optional; defaults to all items if not given.*/ + string itemRestrictionInputFeatureName = 12; /* Optional. */ + string itemExclusionInputFeatureName = 13; /* Optional; defaults to input item list if not given. */ + + /** The predicted outputs. At least one of these must be specified. + */ + string recommendedItemListOutputFeatureName = 20; + string recommendedItemScoreOutputFeatureName = 21; + +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/LinkedModel.proto b/onnxruntime/core/providers/coreml/mlmodel_format/LinkedModel.proto new file mode 100644 index 0000000000000..b113000e80a8d --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/LinkedModel.proto @@ -0,0 +1,42 @@ +// Copyright (c) 2019, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; +import public "Parameters.proto"; + +package CoreML.Specification; + +/** + * A model which wraps another (compiled) model external to this one + */ +message LinkedModel { + + oneof LinkType { + // A model located via a file system path + LinkedModelFile linkedModelFile = 1; + } +} + +// Model is referenced by a model file name and search path +message LinkedModelFile { + + // Model file name: e.g. "MyFetureExtractor.mlmodelc" + StringParameter linkedModelFileName = 1; + + // Search path to find the linked model file + // Multiple paths can be searched using the unix-style path separator ":" + // Each path can be relative (to this model) or absolute + // + // An empty string is the same as teh relative search path "." + // which searches in the same location as this model file + // + // There are some special paths which start with $ + // - $BUNDLE_MAIN - Indicates to look in the main bundle + // - $BUNDLE_IDENTIFIER(identifier) - Looks in Bunde with given identifer + StringParameter linkedModelSearchPath = 2; +} + + diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/Model.proto b/onnxruntime/core/providers/coreml/mlmodel_format/Model.proto new file mode 100644 index 0000000000000..737233f2e3fe7 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/Model.proto @@ -0,0 +1,322 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +/** + * A Core ML model consists of a specification version + * and a model description, + * and can be any one of the following types: + * + * Neural Networks + * - `NeuralNetwork` + * + * Regressors + * - ``GLMRegressor`` + * - ``SupportVectorRegressor`` + * - ``TreeEnsembleRegressor`` + * - ``NeuralNetworkRegressor`` + * - ``BayesianProbitRegressor`` + * + * Classifiers + * - `NeuralNetworkClassifier` + * - `TreeEnsembleClassifier` + * - `GLMClassifier` + * - `SupportVectorClassifier` + * - `KNearestNeighborsClassifier` + * + * Other models + * - `CustomModel` + * - `TextClassifier` + * - `WordTagger` + * - `Gazetteer` + * - `WordEmbedding` + * - `VisionFeaturePrint` + * - `LinkedModel` + * - `SoundAnalysisPreprocessing` + * - `ItemSimilarityRecommender` + * + * Feature Engineering + * - `Imputer` + * - `Scaler` + * - `Normalizer` + * - `OneHotEncoder` + * - `CategoricalMapping` + * - `FeatureVectorizer` + * - `DictVectorizer` + * - `ArrayFeatureExtractor` + * - `NonMaximumSuppression` + * + * Pipelines + * - `PipelineClassifier` + * - `PipelineRegressor` + * - `Pipeline` + * + * Simple Mathematical Functions + * - `Identity` + */ + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "VisionFeaturePrint.proto"; +import public "TextClassifier.proto"; +import public "WordTagger.proto"; +import public "Gazetteer.proto"; +import public "WordEmbedding.proto"; +import public "ArrayFeatureExtractor.proto"; +import public "BayesianProbitRegressor.proto"; +import public "CategoricalMapping.proto"; +import public "CustomModel.proto"; +import public "DictVectorizer.proto"; +import public "FeatureTypes.proto"; +import public "FeatureVectorizer.proto"; +import public "GLMRegressor.proto"; +import public "GLMClassifier.proto"; +import public "NearestNeighbors.proto"; +import public "Identity.proto"; +import public "Imputer.proto"; +import public "NeuralNetwork.proto"; +import public "Normalizer.proto"; +import public "OneHotEncoder.proto"; +import public "Scaler.proto"; +import public "NonMaximumSuppression.proto"; +import public "SVM.proto"; +import public "TreeEnsemble.proto"; +import public "Parameters.proto"; +import public "ItemSimilarityRecommender.proto"; +import public "SoundAnalysisPreprocessing.proto"; +import public "LinkedModel.proto"; + +package CoreML.Specification; + +/** + * A pipeline consisting of one or more models. + */ +message Pipeline { + repeated Model models = 1; + + // Optional names given for each model + // If not supplied it defaults to ["model0",..., "model"(models.size()-1)] + // These names can be used to disambiguate the scope / domain of a parameter + repeated string names = 2; +} + +/** + * A classifier pipeline. + */ +message PipelineClassifier { + Pipeline pipeline = 1; +} + +/** + * A regressor pipeline. + */ +message PipelineRegressor { + Pipeline pipeline = 1; +} + +/** + * A feature description, + * consisting of a name, short description, and type. + */ +message FeatureDescription { + string name = 1; + string shortDescription = 2; + FeatureType type = 3; +} + +/** + * Model metadata, + * consisting of a short description, a version string, + * an author, a license, and any other user defined + * key/value meta data. + */ +message Metadata { + string shortDescription = 1; + string versionString = 2; + string author = 3; + string license = 4; + map userDefined = 100; +} + +/** + * A description of a model, + * consisting of descriptions of its input and output features. + * Both regressor and classifier models require the name of the + * primary predicted output feature (``predictedFeatureName``). + * Classifier models can specify the output feature containing + * probabilities for the predicted classes + * (``predictedProbabilitiesName``). + */ +message ModelDescription { + repeated FeatureDescription input = 1; + repeated FeatureDescription output = 10; + + // [Required for regressor and classifier models]: the name + // to give to an output feature containing the prediction. + string predictedFeatureName = 11; + + // [Optional for classifier models]: the name to give to an + // output feature containing a dictionary mapping class + // labels to their predicted probabilities. If not specified, + // the dictionary will not be returned by the model. + string predictedProbabilitiesName = 12; + + repeated FeatureDescription trainingInput = 50; + + Metadata metadata = 100; +} + +message SerializedModel { + // Identifier whose content describes the model type of the serialized protocol buffer message. + string identifier = 1; + + // Must be a valid serialized protocol buffer of the above specified type. + bytes model = 2; +} + +/** + * A Core ML model, + * consisting of a specification version, + * a model description, and a model type. + * + * Core ML model compatibility is indicated by + * a monotonically increasing specification version number, + * which is incremented anytime a backward-incompatible change is made + * (this is functionally equivalent to the MAJOR version number + * described by `Semantic Versioning 2.0.0 `_). + * + * Specification Versions : OS Availability (Core ML Version) + * + * 1 : iOS 11, macOS 10.13, tvOS 11, watchOS 4 (Core ML 1) + * - Feedforward & Recurrent Neural Networks + * - General Linear Models + * - Tree Ensembles + * - Support Vector Machines + * - Pipelines + * - Feature Engineering + * + * 2 : iOS 11.2, macOS 10.13.2, tvOS 11.2, watchOS 4.2 (Core ML 1.2) + * - Custom Layers for Neural Networks + * - Float 16 support for Neural Network layers + * + * 3 : iOS 12, macOS 10.14, tvOS 12, watchOS 5 (Core ML 2) + * - Flexible shapes and image sizes + * - Categorical sequences + * - Core ML Vision Feature Print, Text Classifier, Word Tagger + * - Non Max Suppression + * - Crop and Resize Bilinear NN layers + * - Custom Models + * + * 4 : iOS 13, macOS 10.15, tvOS 13, watchOS 6 (Core ML 3) + * - Updatable models + * - Exact shape / general rank mapping for neural networks + * - Large expansion of supported neural network layers + * - Generalized operations + * - Control flow + * - Dynamic layers + * - See NeuralNetwork.proto + * - Nearest Neighbor Classifier + * - Sound Analysis Prepreocessing + * - Recommender + * - Linked Model + * - NLP Gazeteer + * - NLP WordEmbedding + * + * 5 : iOS 14, macOS 11, tvOS 14, watchOS 7 (Core ML 4) + * - Model Deployment + * - Model Encryption + * - Unified converter API with PyTorch and Tensorflow 2 Support in coremltools 4 + * - MIL builder for neural networks and composite ops in coremltools 4 + * - New layers in neural network: + * - CumSum + * - OneHot + * - ClampedReLu + * - ArgSort + * - SliceBySize + * - Convolution3D + * - Pool3D + * - Bilinear Upsample with align corners and fractional factors + * - PixelShuffle + * - MatMul with int8 weights and int8 activations + * - Concat interleave + * - See NeuralNetwork.proto + * - Enhanced Xcode model view with interactive previews + * - Enhanced Xcode Playground support for Core ML models + * + */ +message Model { + int32 specificationVersion = 1; + ModelDescription description = 2; + + /* + * Following model types support on-device update: + * + * - NeuralNetworkClassifier + * - NeuralNetworkRegressor + * - NeuralNetwork + * - KNearestNeighborsClassifier + */ + bool isUpdatable = 10; + + // start at 200 here + // model specific parameters: + oneof Type { + // pipeline starts at 200 + PipelineClassifier pipelineClassifier = 200; + PipelineRegressor pipelineRegressor = 201; + Pipeline pipeline = 202; + + // regressors start at 300 + GLMRegressor glmRegressor = 300; + SupportVectorRegressor supportVectorRegressor = 301; + TreeEnsembleRegressor treeEnsembleRegressor = 302; + NeuralNetworkRegressor neuralNetworkRegressor = 303; + BayesianProbitRegressor bayesianProbitRegressor = 304; + + // classifiers start at 400 + GLMClassifier glmClassifier = 400; + SupportVectorClassifier supportVectorClassifier = 401; + TreeEnsembleClassifier treeEnsembleClassifier = 402; + NeuralNetworkClassifier neuralNetworkClassifier = 403; + KNearestNeighborsClassifier kNearestNeighborsClassifier = 404; + + // generic models start at 500 + NeuralNetwork neuralNetwork = 500; + ItemSimilarityRecommender itemSimilarityRecommender = 501; + + // Custom and linked models + CustomModel customModel = 555; + LinkedModel linkedModel = 556; + + // feature engineering starts at 600 + OneHotEncoder oneHotEncoder = 600; + Imputer imputer = 601; + FeatureVectorizer featureVectorizer = 602; + DictVectorizer dictVectorizer = 603; + Scaler scaler = 604; + CategoricalMapping categoricalMapping = 606; + Normalizer normalizer = 607; + ArrayFeatureExtractor arrayFeatureExtractor = 609; + NonMaximumSuppression nonMaximumSuppression = 610; + + + // simple mathematical functions used for testing start at 900 + Identity identity = 900; + + // reserved until 1000 + + // CoreML provided models + CoreMLModels.TextClassifier textClassifier = 2000; + CoreMLModels.WordTagger wordTagger = 2001; + CoreMLModels.VisionFeaturePrint visionFeaturePrint = 2002; + CoreMLModels.SoundAnalysisPreprocessing soundAnalysisPreprocessing = 2003; + CoreMLModels.Gazetteer gazetteer = 2004; + CoreMLModels.WordEmbedding wordEmbedding = 2005; + + // Reserved private messages start at 3000 + // These messages are subject to change with no notice or support. + SerializedModel serializedModel = 3000; + } +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/NearestNeighbors.proto b/onnxruntime/core/providers/coreml/mlmodel_format/NearestNeighbors.proto new file mode 100644 index 0000000000000..82acd8490374d --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/NearestNeighbors.proto @@ -0,0 +1,132 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification; + +import public "DataStructures.proto"; +import public "Parameters.proto"; + +/** + * A k-Nearest-Neighbor classifier + */ +message KNearestNeighborsClassifier { + + /** + * The "core" nearest neighbor model attributes. + */ + NearestNeighborsIndex nearestNeighborsIndex = 1; + + /** + * Number of neighbors to use for classification. + */ + Int64Parameter numberOfNeighbors = 3; + + /** + * Type of labels supported by the model. Currently supports String or Int64 + * labels. + */ + oneof ClassLabels { + StringVector stringClassLabels = 100; + Int64Vector int64ClassLabels = 101; + } + + /** + * Default value of class label (useful when prediction is called on an empty kNN classifier) + */ + oneof DefaultClassLabel { + string defaultStringLabel = 110; + int64 defaultInt64Label = 111; + } + + /** + * Weighting scheme to be used when computing the majority label of a + * new data point. + */ + oneof WeightingScheme { + UniformWeighting uniformWeighting = 200; + InverseDistanceWeighting inverseDistanceWeighting = 210; + } +} + +/** + * The "core" attributes of a Nearest Neighbors model. + */ +message NearestNeighborsIndex { + + /** + * Number of dimensions of the input data. + */ + int32 numberOfDimensions = 1; + + /** + * Vector of floating point data that makes up the model. Each data point must have 'numberOfDimensions' + * dimensions. + */ + repeated FloatVector floatSamples = 2; + + /** + * Backing data structure for the Nearest Neighbors Index. Currently supports + * a linear index or a kd-tree index. + */ + oneof IndexType { + LinearIndex linearIndex = 100; + SingleKdTreeIndex singleKdTreeIndex = 110; + } + + /** + * Distance function to be used to find neighbors. Currently only Squared Euclidean + * Distance is supported. + */ + oneof DistanceFunction { + SquaredEuclideanDistance squaredEuclideanDistance = 200; + } + +} + +/** + * Specifies a uniform weighting scheme (i.e. each neighbor receives equal + * voting power). + */ +message UniformWeighting { +} + + +/** + * Specifies a inverse-distance weighting scheme (i.e. closest neighbors receives higher + * voting power). A nearest neighbor with highest sum of (1 / distance) is picked. + */ +message InverseDistanceWeighting { +} + + +/** + * Specifies a flat index of data points to be searched by brute force. + */ +message LinearIndex { +} + + +/** + * Specifies a kd-tree backend for the nearest neighbors model. + */ +message SingleKdTreeIndex { + + /** + * Number of data points contained within a leaf node of the kd-tree. + */ + int32 leafSize = 1; + +} + + +/** + * Specifies the Squared Euclidean Distance function. + */ +message SquaredEuclideanDistance { +} + diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/NeuralNetwork.proto b/onnxruntime/core/providers/coreml/mlmodel_format/NeuralNetwork.proto new file mode 100644 index 0000000000000..44a77c6e7f5f1 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/NeuralNetwork.proto @@ -0,0 +1,6531 @@ +// Copyright (c) 2017-2019, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +/** + * A neural network is defined through a collection of layers + * and represents a directed acyclic graph (DAG). + * Each layer has a name, a layer type, + * a list of input names, a list of output names, + * and a collection of parameters specific to the layer type. + * + * The graph structure and connectivity of the neural network + * is inferred from the input and output names. + * A neural network starts with the layer + * whose input name is equal to the value specified in + * ``Model.description.input.name``, + * and ends with the layer + * whose output name is equal to the value specified in + * ``Model.description.output.name``. + * Layers must have unique input and output names, + * and a layer may not have input or output names that + * refer to layers that are not yet defined. + * + * For Core ML specification version <=3, + * all inputs are mapped to static rank 5 tensors, with axis notations + * [Sequence, Batch, Channel, Height, Width]. + * + * From specification version 4 onwards (iOS >= 13, macOS >= 10.15), more options are available + * (see enums ``NeuralNetworkMultiArrayShapeMapping``, ``NeuralNetworkImageShapeMapping``) + * to map inputs to generic N-Dimensional (or N rank) tensors, where N >= 1. + * + * Each layer type may have specific constraints on the ranks of its inputs and outputs. + * + * Some of the layers (such as softmax, reduce, etc) have parameters that have been described in + * terms of notational axis "Channel", "Height", "Width" or "Sequence". They can be re-interpreted easily in + * the general ND setting by using the following rule: + * "width" is same as axis = -1 (i.e. the last axis from the end) + * "height" is same as axis = -2 (i.e. the second last axis from the end) + * "channel" is same as axis = -3 (i.e. the third last axis from the end) + * "sequence" is same as axis = -5 (i.e. the fifth last axis from the end) + * + * Several layers are available in 3 different variations, with the names ending + * in identifiers: ``like``, ``static`` and ``dynamic``. For instance, ``FillLike``, + * ``FillStatic`` and ``FillDynamic``. The ``static`` variation generally will have + * a property corresponding to the shape of the output. For instance, if the + * output of the ``FillStatic`` layer is desired to be of shape (10, 4), the + * property ``targetShape`` will have to be set to [10, 4]. In the ``dynamic`` case, + * the shape is an input, hence it can be changed at runtime. For instance, for + * a ``FillDynamic`` layer, the input would have to be an array containing the + * values 10 and 4, if the desired output is of shape (10, 4). Whereas in the + * ``like`` case, the additional input's shape is used as the output shape, ignoring + * its values. For instance, for a ``FillLike`` layer, for an input with shape + * (10, 4), the output generated will also be of shape (10, 4), values of the + * input will be ignored. + */ + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; +import public "Parameters.proto"; + +package CoreML.Specification; + + +enum NeuralNetworkMultiArrayShapeMapping { + + /* + * Describes how the MultiArray shape for the inputs, + * provided in Features Types proto via model description, + * is mapped to construct tensors that are fed into the Neural Network layers. + */ + + /* + * Default legacy value. Only supported for Core ML Specification version <= 3. + * + * The default legacy shape mapping resolves all input shapes to a rank 5 equivalent + * with axis notation of [Seq, Batch, Channel, Height, Width]. + * + * When this enum value is selected, + * the repeated shape field in the message "ArrayFeatureType" in feature types proto, + * must be either length 1 or length 3. + * + * The following rule is used to map the values in the shape field to the actual tensor shape: + * rank 1 shape is mapped to shape [1,1,C,1,1] + * rank 3 shape is mapped to shape [1,1,C,H,W] + * At runtime, the first two dimensions (Seq or Batch) can be presented as well, with non-1 values. + * + * It is invalid to use this enum value if any of the layers added + * Specification version 4 (iOS >= 13, macOS >= 10.15) onwards are used in the network. + * Validator will raise an error in that case. + */ + RANK5_ARRAY_MAPPING = 0; + + /* + * The exact shape and rank (i.e. number of dimensions in the shape) of the input, + * as specified in the message "ArrayFeatureType", is passed through to the layers. + * Supported only for Specification version >= 4 (iOS >= 13, macOS >= 10.15). + */ + EXACT_ARRAY_MAPPING = 1; + +} + +enum NeuralNetworkImageShapeMapping { + + /* + * Describes how the shape of the input tensors is constructed from image inputs. + */ + + /* + * In this case, image input is mapped to a rank 5 tensor. + * For Color images, input tensor is shaped as [1,1,3,H,W]. + * For Gray images, input tensor is shaped as [1,1,1,H,W]. + */ + RANK5_IMAGE_MAPPING = 0; + + /* + * For Color images, input tensor is shaped as [1,3,H,W]. + * For Gray images, input tensor is shaped as [1,1,H,W]. + * Supported only for Specification version >= 4 (iOS >= 13, macOS >= 10.15). + */ + RANK4_IMAGE_MAPPING = 1; + +} + +/** + A neural network. + */ +message NeuralNetwork { + + repeated NeuralNetworkLayer layers = 1; + repeated NeuralNetworkPreprocessing preprocessing = 2; + + // use this enum value to determine the input tensor shapes to the neural network, for multiarray inputs + NeuralNetworkMultiArrayShapeMapping arrayInputShapeMapping = 5; + + // use this enum value to determine the input tensor shapes to the neural network, for image inputs + NeuralNetworkImageShapeMapping imageInputShapeMapping = 6; + + + NetworkUpdateParameters updateParams = 10; + +} + +/// Preprocessing +/// ------------- + +/** + * A neural network preprocessor that + * performs a scalar multiplication of an image + * followed by addition of scalar biases to the channels. + * + * Input: X + * An image in BGR or RGB format with shape ``[3, H, W]`` + * or in grayscale format with shape ``[1, H, W]``. + * Output: Y + * An image with format and shape corresponding to the input. + * + * If the input image is in BGR format: + * + * .. code:: + * + * Y[0, :, :] = channelScale * X[0, :, :] + blueBias + * Y[1, :, :] = channelScale * X[1, :, :] + greenBias + * Y[2, :, :] = channelScale * X[2, :, :] + redBias + * + * If the input image is in RGB format: + * + * .. code:: + * + * Y[0, :, :] = channelScale * X[0, :, :] + redBias + * Y[1, :, :] = channelScale * X[1, :, :] + greenBias + * Y[2, :, :] = channelScale * X[2, :, :] + blueBias + * + * If the input image is in grayscale format: + * + * .. code:: + * + * Y[0, :, :] = channelScale * X[0, :, :] + grayBias + */ +message NeuralNetworkImageScaler { + + float channelScale = 10; ///Scalar to be multiplied. + float blueBias = 20; ///Scalar blue bias to be added. + float greenBias = 21; ///Scalar green bias to be added. + float redBias = 22; ///Scalar red bias to be added. + float grayBias = 30; ///Scalar bias to be added for grayscale images. + +} + +/** + * A neural network preprocessor that + * subtracts the provided mean image from the input image. + * The mean image is subtracted from the input named + * ``NeuralNetworkPreprocessing.featureName``. + */ +message NeuralNetworkMeanImage { + + /** + * Mean image stored as a flattened array of floats, + * representing shape [Channel,Height,Width]. + */ + repeated float meanImage = 1; + +} + +/// Preprocessing parameters for image inputs. +message NeuralNetworkPreprocessing { + + string featureName = 1; /// must be equal to the input name to which the preprocessing is applied + oneof preprocessor { + NeuralNetworkImageScaler scaler = 10; + NeuralNetworkMeanImage meanImage = 11; + } + +} + +/// Activation Functions +/// -------------------- + +/** + * A rectified linear unit (ReLU) activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \text{max}(0, x) + */ +message ActivationReLU { + +} + +/** + * A leaky rectified linear unit (ReLU) activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \begin{cases} + * x & \text{if } x \geq 0 \\ + * \alpha x & \text{if } x < 0 + * \end{cases} + */ +message ActivationLeakyReLU { + + float alpha = 1; //negative slope value for leakyReLU + +} + +/** + * A hyperbolic tangent activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \dfrac{1 - e^{-2x}}{1 + e^{-2x}} + */ +message ActivationTanh { + +} + +/** + * A scaled hyperbolic tangent activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \alpha \tanh(\beta x) + */ +message ActivationScaledTanh { + + float alpha = 1; + float beta = 2; + +} + +/** + * A sigmoid activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \dfrac{1}{1 + e^{-x}} + */ +message ActivationSigmoid { + +} + +/** + * A linear activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \alpha x + \beta + */ +message ActivationLinear { + + float alpha = 1; + float beta = 2; + +} + +/** + * A hard sigmoid activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \text{min}(\text{max}(\alpha x + \beta, 0), 1) + */ +message ActivationSigmoidHard { + + float alpha = 1; + float beta = 2; + +} + +/** + * A parameterized rectified linear unit (PReLU) activation function. + * Input must be at least rank 3. Axis = -3 is denoted by "C", or channels. + * "alpha" parameter can be a vector of length C. + * + * This function has the following formula: + * + * .. math:: + * f(x_i) = \begin{cases} + * x_i & \text{if } x_i \geq 0 \\ + * \alpha_i x_i & \text{if } x_i < 0 + * \end{cases} \;,\;i=1,...,C + */ +message ActivationPReLU { + + // parameter of length C or 1. + // If length is 1, same value is used for all channels + WeightParams alpha = 1; + +} + +/** + * An exponential linear unit (ELU) activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \begin{cases} + * x & \text{if } x \geq 0 \\ + * \alpha (e^x - 1) & \text{if } x < 0 + * \end{cases} + */ +message ActivationELU { + + float alpha = 1; + +} + +/** + * A thresholded rectified linear unit (ReLU) activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \begin{cases} + * x & \text{if } x \geq \alpha \\ + * 0 & \text{if } x < \alpha + * \end{cases} + */ +message ActivationThresholdedReLU { + + float alpha = 1; + +} + +/** + * A softsign activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \dfrac{x}{1 + |x|} + */ +message ActivationSoftsign { + +} + +/** + * A softplus activation function. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \text{log}(1 + e^x) + */ +message ActivationSoftplus { + +} + +/** + * A parametric softplus activation function. + * Input must be at least rank 3. axis = -3 is denoted by "C", or channels. + * "alpha"/"beta" parameter can be a vector of length C. + * + * This function has the following formula: + * + * .. math:: + * f(x_i) = \alpha_i \text{log}(1 + e^{\beta_i x_i}) \;,\;i=1,...,C + */ +message ActivationParametricSoftplus { + + // If length is 1, same value is used for all channels + WeightParams alpha = 1; //parameter of length C or 1 + WeightParams beta = 2; //parameter of length C or 1 + +} + +message ActivationParams { + + oneof NonlinearityType { + ActivationLinear linear = 5; + + ActivationReLU ReLU = 10; + ActivationLeakyReLU leakyReLU = 15; + ActivationThresholdedReLU thresholdedReLU = 20; + ActivationPReLU PReLU = 25; + + ActivationTanh tanh = 30; + ActivationScaledTanh scaledTanh = 31; + + ActivationSigmoid sigmoid = 40; + ActivationSigmoidHard sigmoidHard = 41; + + ActivationELU ELU = 50; + + ActivationSoftsign softsign = 60; + ActivationSoftplus softplus = 70; + ActivationParametricSoftplus parametricSoftplus = 71; + } + +} + +/** + * Representation of the intermediate tensors + */ +message Tensor { + + // Number of dimensions in the tensor shape + uint32 rank = 1; + // actual value of the tensor shape. + // must be of length "rank". Can contain -1s for unknown dimensions. + repeated int64 dimValue = 2; + +} + +/** + * A single neural network layer. + */ +message NeuralNetworkLayer { + + string name = 1; //descriptive name of the layer + repeated string input = 2; + repeated string output = 3; + + repeated Tensor inputTensor = 4; // must be the same length as the "input" field + repeated Tensor outputTensor = 5; // must be the same length as the "output" field + + // Must be set to true to mark the layer as updatable. + // If true, the weightParams in the layer's properties must also be set to updatable + // If false, the value of the isUpdatable parameter within the layer's weights are ignored + bool isUpdatable = 10; + + oneof layer { + + // Start at 100 here + ConvolutionLayerParams convolution = 100; + + PoolingLayerParams pooling = 120; + + ActivationParams activation = 130; + + InnerProductLayerParams innerProduct = 140; + EmbeddingLayerParams embedding = 150; + + // Normalization-related Layers + BatchnormLayerParams batchnorm = 160; + MeanVarianceNormalizeLayerParams mvn = 165; + L2NormalizeLayerParams l2normalize = 170; + SoftmaxLayerParams softmax = 175; + LRNLayerParams lrn = 180; + + CropLayerParams crop = 190; + PaddingLayerParams padding = 200; + UpsampleLayerParams upsample = 210; + + ResizeBilinearLayerParams resizeBilinear = 211; + CropResizeLayerParams cropResize = 212; + + UnaryFunctionLayerParams unary = 220; + + // Element-wise Operations + AddLayerParams add = 230; + MultiplyLayerParams multiply = 231; + + AverageLayerParams average = 240; + ScaleLayerParams scale = 245; + + BiasLayerParams bias = 250; + MaxLayerParams max = 260; + MinLayerParams min = 261; + + DotProductLayerParams dot = 270; + ReduceLayerParams reduce = 280; + LoadConstantLayerParams loadConstant = 290; + + // Data Reorganization + ReshapeLayerParams reshape = 300; + FlattenLayerParams flatten = 301; + PermuteLayerParams permute = 310; + ConcatLayerParams concat = 320; + SplitLayerParams split = 330; + SequenceRepeatLayerParams sequenceRepeat = 340; + + ReorganizeDataLayerParams reorganizeData = 345; + SliceLayerParams slice = 350; + + // Recurrent Layers + SimpleRecurrentLayerParams simpleRecurrent = 400; + GRULayerParams gru = 410; + UniDirectionalLSTMLayerParams uniDirectionalLSTM = 420; + BiDirectionalLSTMLayerParams biDirectionalLSTM = 430; + + // Custom (user-implemented) Layer + CustomLayerParams custom = 500; + + // Following layers are available only after Core ML Specification + // version >= 4 (iOS >= 13, macOS >= 10.15) + + // Control Flow related Layers + CopyLayerParams copy = 600; + BranchLayerParams branch = 605; + + LoopLayerParams loop = 615; + LoopBreakLayerParams loopBreak = 620; + LoopContinueLayerParams loopContinue = 625; + + RangeStaticLayerParams rangeStatic = 635; + RangeDynamicLayerParams rangeDynamic = 640; + + // Element-wise Unary Layers + ClipLayerParams clip = 660; + CeilLayerParams ceil = 665; + FloorLayerParams floor = 670; + + SignLayerParams sign = 680; + RoundLayerParams round = 685; + + Exp2LayerParams exp2 = 700; + + SinLayerParams sin = 710; + CosLayerParams cos = 715; + TanLayerParams tan = 720; + + AsinLayerParams asin = 730; + AcosLayerParams acos = 735; + AtanLayerParams atan = 740; + + SinhLayerParams sinh = 750; + CoshLayerParams cosh = 755; + TanhLayerParams tanh = 760; + + AsinhLayerParams asinh = 770; + AcoshLayerParams acosh = 775; + AtanhLayerParams atanh = 780; + + ErfLayerParams erf = 790; + GeluLayerParams gelu = 795; + + // Element-wise Binary with Broadcasting Support + EqualLayerParams equal = 815; + NotEqualLayerParams notEqual = 820; + LessThanLayerParams lessThan = 825; + LessEqualLayerParams lessEqual = 827; + GreaterThanLayerParams greaterThan = 830; + GreaterEqualLayerParams greaterEqual = 832; + + LogicalOrLayerParams logicalOr = 840; + LogicalXorLayerParams logicalXor = 845; + LogicalNotLayerParams logicalNot = 850; + LogicalAndLayerParams logicalAnd = 855; + + ModBroadcastableLayerParams modBroadcastable = 865; + MinBroadcastableLayerParams minBroadcastable = 870; + MaxBroadcastableLayerParams maxBroadcastable = 875; + AddBroadcastableLayerParams addBroadcastable = 880; + PowBroadcastableLayerParams powBroadcastable = 885; + DivideBroadcastableLayerParams divideBroadcastable = 890; + FloorDivBroadcastableLayerParams floorDivBroadcastable = 895; + MultiplyBroadcastableLayerParams multiplyBroadcastable = 900; + SubtractBroadcastableLayerParams subtractBroadcastable = 905; + + // Tensor Manipulations + TileLayerParams tile = 920; + StackLayerParams stack = 925; + GatherLayerParams gather = 930; + ScatterLayerParams scatter = 935; + GatherNDLayerParams gatherND = 940; + ScatterNDLayerParams scatterND = 945; + SoftmaxNDLayerParams softmaxND = 950; + GatherAlongAxisLayerParams gatherAlongAxis = 952; + ScatterAlongAxisLayerParams scatterAlongAxis = 954; + + ReverseLayerParams reverse = 960; + ReverseSeqLayerParams reverseSeq = 965; + + SplitNDLayerParams splitND = 975; + ConcatNDLayerParams concatND = 980; + TransposeLayerParams transpose = 985; + + SliceStaticLayerParams sliceStatic = 995; + SliceDynamicLayerParams sliceDynamic = 1000; + SlidingWindowsLayerParams slidingWindows = 1005; + + TopKLayerParams topK = 1015; + ArgMinLayerParams argMin = 1020; + ArgMaxLayerParams argMax = 1025; + + EmbeddingNDLayerParams embeddingND = 1040; + BatchedMatMulLayerParams batchedMatmul = 1045; + + // Tensor Allocation / Reshape-related Operations + GetShapeLayerParams getShape = 1065; + LoadConstantNDLayerParams loadConstantND = 1070; + + FillLikeLayerParams fillLike = 1080; + FillStaticLayerParams fillStatic = 1085; + FillDynamicLayerParams fillDynamic = 1090; + + BroadcastToLikeLayerParams broadcastToLike = 1100; + BroadcastToStaticLayerParams broadcastToStatic = 1105; + BroadcastToDynamicLayerParams broadcastToDynamic = 1110; + + SqueezeLayerParams squeeze = 1120; + ExpandDimsLayerParams expandDims = 1125; + FlattenTo2DLayerParams flattenTo2D = 1130; + ReshapeLikeLayerParams reshapeLike = 1135; + ReshapeStaticLayerParams reshapeStatic = 1140; + ReshapeDynamicLayerParams reshapeDynamic = 1145; + RankPreservingReshapeLayerParams rankPreservingReshape = 1150; + + ConstantPaddingLayerParams constantPad = 1155; + + // Random Distributions + RandomNormalLikeLayerParams randomNormalLike = 1170; + RandomNormalStaticLayerParams randomNormalStatic = 1175; + RandomNormalDynamicLayerParams randomNormalDynamic = 1180; + + RandomUniformLikeLayerParams randomUniformLike = 1190; + RandomUniformStaticLayerParams randomUniformStatic = 1195; + RandomUniformDynamicLayerParams randomUniformDynamic = 1200; + + RandomBernoulliLikeLayerParams randomBernoulliLike = 1210; + RandomBernoulliStaticLayerParams randomBernoulliStatic = 1215; + RandomBernoulliDynamicLayerParams randomBernoulliDynamic = 1220; + + CategoricalDistributionLayerParams categoricalDistribution = 1230; + + // Reduction-related Layers: + ReduceL1LayerParams reduceL1 = 1250; + ReduceL2LayerParams reduceL2 = 1255; + ReduceMaxLayerParams reduceMax = 1260; + ReduceMinLayerParams reduceMin = 1265; + ReduceSumLayerParams reduceSum = 1270; + ReduceProdLayerParams reduceProd = 1275; + ReduceMeanLayerParams reduceMean = 1280; + ReduceLogSumLayerParams reduceLogSum = 1285; + ReduceSumSquareLayerParams reduceSumSquare = 1290; + ReduceLogSumExpLayerParams reduceLogSumExp = 1295; + + // Masking / Selection Layers + WhereNonZeroLayerParams whereNonZero = 1313; + MatrixBandPartLayerParams matrixBandPart = 1315; + LowerTriangularLayerParams lowerTriangular = 1320; + UpperTriangularLayerParams upperTriangular = 1325; + WhereBroadcastableLayerParams whereBroadcastable = 1330; + + // Normalization Layers + LayerNormalizationLayerParams layerNormalization = 1350; + + NonMaximumSuppressionLayerParams NonMaximumSuppression = 1400; + + // Following layers are available only after Core ML Specification + // version >= 5 (iOS >= 14, macOS >= 11.0) + OneHotLayerParams oneHot = 1450; + CumSumLayerParams cumSum = 1455; + ClampedReLULayerParams clampedReLU = 1460; + ArgSortLayerParams argSort = 1461; + Pooling3DLayerParams pooling3d = 1465; + GlobalPooling3DLayerParams globalPooling3d = 1466; + SliceBySizeLayerParams sliceBySize = 1470; + Convolution3DLayerParams convolution3d = 1471; + + } + +} + +/** + * Branching Layer + * + * A layer that provides the functionality of branching or an If-Else block. + * + * Must have 1 input. There are no outputs as the execution is transferred to either the + * if or the else branch based on the value of the input. + * + * Input is the condition predicate. Must be a scalar (length 1 tensor). + * + */ +message BranchLayerParams { + + /** + * execute this graph if the absolute value of the input Tensor is greater than 1e-6 + * This must be present. + */ + NeuralNetwork ifBranch = 1; + /** + * execute this graph if the absolute value of the input Tensor is less than 1e-6 + * This is optional. + */ + NeuralNetwork elseBranch = 2; + +} + +/** + * Loop Layer + * + * A layer that provides the functionality of a "for" loop or a "while" loop. + * + * There are either no inputs or 1 input. When an input is present, it corresponds to the maximum loop count, + * in that case the value of the "maxLoopIterations" field is ignored. Input must be a scalar. + * (For description below, maxLoopIterations is assumed to be the value of the input, when its present) + * + * No outputs are produced. Blobs produced by the condition or the body network are visible in the scope of the overall network. + * + * "conditionNetwork" must produce a tensor with the name specified in the "conditionVar" field. + * + * There are 3 possible cases for determining the termination condition: + * + * Case 1: + * + * If there is no "conditionNetwork", in this case the layer corresponds to a pure for loop, which is run "maxLoopIterations" number of times. + * Equivalent pseudo-code: + * + * for loopIterator = 0 : maxLoopIterations + * bodyNetwork() + * + * + * Case 2: + * + * "conditionNetwork" is present, and "maxLoopIterations" is 0 and there is no input, + * in this case the layer corresponds to a while loop. Equivalent pseudo-code: + * + * conditionVar = conditionNetwork() + * while conditionVar: + * bodyNetwork() + * conditionVar = conditionNetwork() + * + * + * Case 3: + * + * "conditionNetwork" is provided, and "maxLoopIterations" is positive or there is an input, + * in this case the layer corresponds to a while loop with a joint condition. Equivalent pseudo-code: + * + * loopIterator = 0 + * conditionVar = conditionNetwork() + * while (conditionVar and loopIterator < maxLoopIterations): + * bodyNetwork() + * loopIterator = loopIterator + 1 + * conditionVar = conditionNetwork() + * + */ +message LoopLayerParams { + + /** + * maximum number of iterations. Ignored if input is present. + */ + uint64 maxLoopIterations = 1; + /** + * This field provides the name of the tensor which is produced by the conditionNetwork + * and whose value is checked to start/continue/terminate the loop. Value close to 0.0f is treated as False. + * This field is optional. + * Must be a non empty string if and only if "conditionNetwork" is present. + */ + string conditionVar = 2; + /** + * Must generate a tensor with the name provided in the "conditionVar" field. + * This field is optional. + * Must be present if and only if "conditionVar" field is a non empty string. + */ + NeuralNetwork conditionNetwork = 3; + /** + * Body of the loop. + * This field must be present. + */ + NeuralNetwork bodyNetwork = 4; + +} + +/** + * Loop break Layer + * + * Terminate the loop that has this layer. + * If present, it should always reside in the "bodyNetwork" of the loop layer + * + * No inputs/outputs + * + */ +message LoopBreakLayerParams { + +} + +/** + * Loop Continue Layer + * + * Stop the current loop iteration and continue on the next iteration. + * If present, it should always reside in the "bodyNetwork" of the loop layer + * + * No inputs/outputs + * + */ +message LoopContinueLayerParams { + +} + +/** + * Copy Layer + * + * A layer that copies its input tensor to the output tensor. + * Must have 1 input and 1 output, with distinct names. + * This is the only layer that is allowed to re-generate an output that is already present in the neural network prior to this layer, + * in which case it will overwrite the output tensor. + * + */ +message CopyLayerParams { + +} + +/** + * GreaterThan Layer + * + * Either 1 or 2 inputs. + * Produces 1 output. + * Perform elementwise greater than operation. + * + * Output is 1.0f if the condition is true otherwise 0.0f. + * + * .. code:: + * + * y = x1 > x2 + * or + * y = x1 > alpha, if only one input is provided + * + * Broadcasting is supported. + * + */ +message GreaterThanLayerParams { + + /** + * Compare to the scalar value provided here if there is 1 input + */ + float alpha = 2; + +} + +/** + * GreaterEqual Layer + * + * Either 1 or 2 inputs. + * Produces 1 output. + * Perform elementwise greater equal operation. + * + * Output is 1.0f if the condition is true otherwise 0.0f. + * + * .. code:: + * + * y = x1 >= x2 + * or + * y = x1 >= alpha, if only one input is provided + * + * Broadcasting is supported. + * + */ +message GreaterEqualLayerParams { + + /** + * Compare to the scalar value provided here if there is 1 input + */ + float alpha = 2; + +} + +/** + * LessThan Layer + * + * Either 1 or 2 inputs. + * Produces 1 output. + * Perform elementwise less than operation. + * + * Output is 1.0f if the condition is true otherwise 0.0f. + * + * .. code:: + * + * y = x1 < x2 + * or + * y = x1 < alpha, if only one input is provided + * + * Broadcasting is supported. + * + */ +message LessThanLayerParams { + + /** + * Compare to the scalar value provided here if there is 1 input + */ + float alpha = 2; + +} + +/** + * LessEqual Layer + * + * Either 1 or 2 inputs. + * Produces 1 output. + * Perform elementwise less equal operation. + * + * Output is 1.0f if the condition is true otherwise 0.0f. + * + * .. code:: + * + * y = x1 <= x2 + * or + * y = x1 <= alpha, if only one input is provided + * + * Broadcasting is supported. + * + */ +message LessEqualLayerParams { + + /** + * Compare to the scalar value provided here if there is 1 input + */ + float alpha = 2; + +} + +/** + * Equal Layer + * + * Either 1 or 2 inputs. + * Produces 1 output. + * Perform elementwise equal operation. + * + * Output is 1.0f if the condition is true otherwise 0.0f. + * + * .. code:: + * + * y = x1 == x2 + * or + * y = x1 == alpha, if only one input is provided + * + * Broadcasting is supported. + * + */ +message EqualLayerParams { + + /** + * Compare to the scalar value provided here if there is 1 input + */ + float alpha = 1; + +} + +/** + * NotEqual Layer + * + * Either 1 or 2 inputs. + * Produces 1 output. + * Perform elementwise not equal operation. + * + * Output is 1.0f if the condition is true otherwise 0.0f. + * + * .. code:: + * + * y = x1 != x2 + * or + * y = x1 != alpha, if only one input is provided + * + * Broadcasting is supported. + * + */ +message NotEqualLayerParams { + + /** + * Compare to the scalar value provided here if there is 1 input + */ + float alpha = 1; + +} + +/** + * LogicalAnd Layer + * + * Must have 2 inputs, produces 1 output. + * Perform elementwise logical AND operation. + * + * Input is considered False if equal to 0.0f otherwise True. + * Output is 1.0f if the condition is true otherwise 0.0f. + * + * .. code:: + * + * y = AND(x1, x2) + * + * Broadcasting is supported. + * + */ +message LogicalAndLayerParams { + +} + +/** + * LogicalOr Layer + * + * Must have 2 inputs, produces 1 output. + * Perform elementwise logical OR operation. + * + * Input is considered False if equal to 0.0f otherwise True. + * Output is 1.0f if the condition is true otherwise 0.0f. + * + * .. code:: + * + * y = OR(x1, x2) + * + * Broadcasting is supported. + * + */ +message LogicalOrLayerParams { + +} + +/** + * LogicalXor Layer + * + * Must have 2 inputs, produces 1 output. + * Perform elementwise logical XOR operation. + * + * Input is considered False if equal to 0.0f otherwise True. + * Output is 1.0f if the condition is true otherwise 0.0f. + * + * .. code:: + * + * y = XOR(x1, x2) + * + * Broadcasting is supported. + * + */ +message LogicalXorLayerParams { + +} + +/** + * LogicalNot Layer + * + * Must have 1 input, produces 1 output. + * Perform elementwise logical NOT operation. + * + * Input is considered False if equal to 0.0f otherwise True. + * Output is 1.0f if the condition is true otherwise 0.0f. + * + * .. code:: + * + * y = NOT(x) + * + * + */ +message LogicalNotLayerParams { + +} + +/// Border Amounts +/// -------------- + +/** + * Specifies the amount of spatial border to be either padded or cropped. + * + * For padding: + * + * .. code:: + * + * H_out = borderAmounts[0].startEdgeSize + H_in + borderAmounts[0].endEdgeSize + * W_out = borderAmounts[1].startEdgeSize + W_in + borderAmounts[1].endEdgeSize + * + * topPaddingAmount == Height startEdgeSize + * bottomPaddingAmount == Height endEdgeSize + * leftPaddingAmount == Width startEdgeSize + * rightPaddingAmount == Width endEdgeSize + * + * For cropping: + * + * .. code:: + * + * H_out = (-borderAmounts[0].startEdgeSize) + H_in + (-borderAmounts[0].endEdgeSize) + * W_out = (-borderAmounts[1].startEdgeSize) + W_in + (-borderAmounts[1].endEdgeSize) + * + * topCropAmount == Height startEdgeSize + * bottomCropAmount == Height endEdgeSize + * leftCropAmount == Width startEdgeSize + * rightCropAmount == Width endEdgeSize + */ +message BorderAmounts { + + message EdgeSizes { + /** + * The amount to be padded or cropped from the beginning. + */ + uint64 startEdgeSize = 1; + + /** + * The amount to be padded or cropped from the end. + */ + uint64 endEdgeSize = 2; + } + + /** + * The border amounts. + * This must be length 2 in the order ``[H, W]``. + */ + repeated EdgeSizes borderAmounts = 10; + +} + +/** + * Specifies the type of padding to be used with Convolution/Deconvolution and Pooling layers. + * After padding, input spatial shape: ``[H_in, W_in]``, gets modified to the + * output spatial shape ``[H_out, W_out]``. + * + * .. code:: + * + * topPaddingAmount == Height startEdgeSize == borderAmounts[0].startEdgeSize + * bottomPaddingAmount == Height endEdgeSize == borderAmounts[0].endEdgeSize + * leftPaddingAmount == Width startEdgeSize == borderAmounts[1].startEdgeSize + * rightPaddingAmount == Width endEdgeSize == borderAmounts[1].endEdgeSize + * + * With Convolution or Pooling: + * + * .. code:: + * + * H_out = int_division_round_down((H_in + topPaddingAmount + bottomPaddingAmount - KernelSize[0]),stride[0]) + 1 + * + * which is same as: + * + * .. code:: + * + * H_out = int_division_round_up((H_in + topPaddingAmount + bottomPaddingAmount - KernelSize[0] + 1),stride[0]) + * + * With Deconvolution: + * + * .. code:: + * + * H_out = (H_in-1) * stride[0] + kernelSize[0] - (topPaddingAmount + bottomPaddingAmount) + * + * + * The equivalent expressions hold true for ``W_out`` as well. + * + * + * By default, the values of ``paddingAmounts`` are set to ``0``, + * which results in a "true" valid padding. + * If non-zero values are provided for ``paddingAmounts``, + * "valid" convolution/pooling is performed within the spatially expanded input. + * + */ +message ValidPadding { + + BorderAmounts paddingAmounts = 1; + +} + +/** + * Specifies the type of padding to be used with Convolution/Deconvolution and pooling layers. + * After padding, input spatial shape: ``[H_in, W_in]``, gets modified to the + * output spatial shape ``[H_out, W_out]``. + * With Convolution or pooling: + * + * .. code:: + * + * H_out = int_division_round_up(H_in,stride[0]) + * W_out = int_division_round_up(W_in,stride[1]) + * + * This is achieved by using the following padding amounts: + * + * .. code:: + * + * totalPaddingHeight = max(0,(H_out-1) * stride[0] + KernelSize[0] - Hin) + * totalPaddingWidth = max(0,(W_out-1) * stride[1] + KernelSize[1] - Win) + * + * There are two modes of asymmetry: + * ``BOTTOM_RIGHT_HEAVY``, and ``TOP_LEFT_HEAVY``. + * + * If the mode is ``BOTTOM_RIGHT_HEAVY``: + * + * .. code:: + * + * topPaddingAmount = floor(totalPaddingHeight / 2) + * bottomPaddingAmount = totalPaddingHeight - topPaddingAmount + * leftPaddingAmount = floor(totalPaddingWidth / 2) + * rightPaddingAmount = totalPaddingWidth - leftPaddingAmount + * + * If the mode is ``TOP_LEFT_HEAVY``: + * + * .. code:: + * + * bottomPaddingAmount = floor(totalPaddingHeight / 2) + * topPaddingAmount = totalPaddingHeight - bottomPaddingAmount + * rightPaddingAmount = floor(totalPaddingWidth / 2) + * leftPaddingAmount = totalPaddingWidth - rightPaddingAmount + * + * + * With Deconvolution: + * + * .. code:: + * + * H_out = H_in * stride[0] + * W_out = W_in * stride[1] + */ +message SamePadding { + + enum SamePaddingMode { + + BOTTOM_RIGHT_HEAVY = 0; + TOP_LEFT_HEAVY = 1; + + } + SamePaddingMode asymmetryMode = 1; + +} + +/** + * Specifies how grid points are sampled from an interval. + * Without the loss of generality, assume the interval to be [0, X-1] from which N points are to be sampled. + * Here X may correspond to an input image's height or width. + * All the methods can be expressed in terms of numpy's linspace function, along with the constraint that grid points have to lie in the interval [0, X-1]. + * Note: numpy.linspace(start = start, end = end, num = N, endpoint = True) corresponds to sampling + * N points uniformly from the interval [start, end], endpoints included. + * The methods vary in how the ``start`` and ``end`` values are computed. + */ +message SamplingMode { + + enum Method { + + /** + * start = 0, end = X-1 + * grid points = numpy.linspace(start, end) + */ + STRICT_ALIGN_ENDPOINTS_MODE = 0; + + /** + * if N == 1: start = end = (X-1)/2 + * otherwise, start = 0, end = X-1 + * grid points = numpy.linspace(start, end) + */ + ALIGN_ENDPOINTS_MODE = 1; + + /** + * start = 0, end = X - X/N + * grid points = min(X-1, numpy.linspace(start, end)) + * This is same as the mode used in the upsample layer in this specification, when used with bilinear interpolation. In that case N/X = upsample ratio. + */ + UPSAMPLE_MODE = 2; + + /** + * spacing = max(1, X-1)/N + * start = 0.5 * spacing + * end = start + (N-1) * spacing + * grid points = min(X-1, numpy.linspace(start, end)) + */ + ROI_ALIGN_MODE = 3; + + } + + Method samplingMethod = 1; + +} + +/** + * Specifies the convention used to specify four bounding box coordinates for an image of size (Height, Width). + * The (0,0) coordinate corresponds to the top-left corner of the image. + */ +message BoxCoordinatesMode { + + enum Coordinates { + + /** + * [h_start, w_start, h_end, w_end] + */ + CORNERS_HEIGHT_FIRST = 0; + + /** + * [w_start, h_start, w_end, h_end] + */ + CORNERS_WIDTH_FIRST = 1; + + /** + * [h_center, w_center, box_height, box_width] + */ + CENTER_SIZE_HEIGHT_FIRST = 2; + + /** + * [w_center, h_center, box_width, box_height] + */ + CENTER_SIZE_WIDTH_FIRST = 3; + + } + + Coordinates boxMode = 1; + +} + +/** + * Weights for layer parameters. + * Weights are stored as repeated floating point numbers + * using row-major ordering + * and can represent 1-, 2-, 3-, or 4-dimensional data. + */ +message WeightParams { + + /** + * Values specified in single / float / FP32 precision. + */ + repeated float floatValue = 1; + + /** + * Values in 16-bit half precision floating point. + */ + bytes float16Value = 2; + + /** + * Raw value specification for quantized lower precisions. + * + * This field is interpreted as uintN, where N is the number of bits in quantization. + * E.g. if n=8, the field is interpreted as an array of UINT8. + * Use this field for quantized parameters unless specifically noted to use + * int8RawValue. + */ + bytes rawValue = 30; + + /** + * Field to be used if int8DynamicQuantize is set in the parent layer. + * Cannot be set if rawValue is also set. + * The values in this field are interpreted as INT8. + * + * If this field is set, following conditions must hold true: + * * QuantizationType == LinearQuantizationParams, such that + * * size of the "scale" field is 1 and "bias" field is empty in "LinearQuantizationParams" + */ + bytes int8RawValue = 31; + + /** + * Quantization related parameters. + */ + QuantizationParams quantization = 40; + + bool isUpdatable = 50; + +} + +/** + * Quantization parameters. + */ +message QuantizationParams { + + uint64 numberOfBits = 1; + oneof QuantizationType { + LinearQuantizationParams linearQuantization = 101; + LookUpTableQuantizationParams lookupTableQuantization = 102; + } + +} + +message LinearQuantizationParams { + + /** + * Stores scale and bias values corresponding to the quantized weights. + * Must be an array of 1 element, or an array of C elements, where C + * is number of output channels. For recurrent layers it is equal to + * the output vector size. + * + * Relationship between quantized weights, unquantized weights, scale and bias: + * + * W_unquantized = W_quantized * scale + bias + * + */ + repeated float scale = 1; + repeated float bias = 2; + +} + +message LookUpTableQuantizationParams { + + /* Stores look-up table quantization values. Must be an array of + (2^numberOfBits) Elements. + */ + repeated float floatValue = 1; + +} + +/// Layers +/// ------ + +/** + * A layer that performs spatial convolution or deconvolution. + * + * .. code:: + * + * y = ConvolutionLayer(x) + * + * Requires 1 or 2 inputs and produces 1 output. + * + * Input + * First Input: + * A blob with rank greater than or equal to 4. + * Rank 4 blob represents [Batch, channels, height, width]. + * For ranks greater than 4, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * + * From Core ML specification version 4 onwards (iOS >= 13, macOS >= 10.15). + * convolution layer can have 2 inputs, in which case the second input is + * the blob representing the weights. This is allowed when "isDeconvolution" = False. + * The weight blob should have shape + * ``[outputChannels, kernelChannels, kernelHeight, kernelWidth]``, + * where kernelChannels == inputChannels / nGroups. + * + * Output + * Rank is same as the input. e.g.: for rank 4 input, output shape is [B, C_out, H_out, W_out] + * + * + * If ``dilationFactor`` is not 1, effective kernel size is + * modified as follows: + * + * .. code:: + * + * KernelSize[0] <-- (kernelSize[0]-1) * dilationFactor[0] + 1 + * KernelSize[1] <-- (kernelSize[1]-1) * dilationFactor[1] + 1 + * + * Type of padding can be ``valid`` or ``same``. Output spatial dimensions depend on the + * the type of padding. For details, refer to the descriptions of the messages "ValidPadding" + * and "SamePadding". Padded values are all zeros. + * + * For Deconvolution, ``ConvolutionPaddingType`` (``valid`` or ``same``) is ignored when ``outputShape`` is set. + * + * + */ +message ConvolutionLayerParams { + + /** + * The number of kernels. + * Same as ``C_out`` used in the layer description. + */ + uint64 outputChannels = 1; + + /** + * Channel dimension of the kernels. + * Must be equal to ``inputChannels / nGroups``, if isDeconvolution == False + * Must be equal to ``inputChannels``, if isDeconvolution == True + */ + uint64 kernelChannels = 2; + + /** + * Group convolution, i.e. weight reuse along channel axis. + * Input and kernels are divided into g groups + * and convolution / deconvolution is applied within the groups independently. + * If not set or 0, it is set to the default value 1. + */ + uint64 nGroups = 10; + + /** + * Must be length 2 in the order ``[H, W]``. + * If not set, default value ``[3, 3]`` is used. + */ + repeated uint64 kernelSize = 20; + + /** + * Must be length 2 in the order ``[H, W]``. + * If not set, default value ``[1, 1]`` is used. + */ + repeated uint64 stride = 30; + + /** + * Must be length 2 in order ``[H, W]``. + * If not set, default value ``[1, 1]`` is used. + * It is ignored if ``isDeconvolution == true``. + */ + repeated uint64 dilationFactor = 40; + + /** + * The type of padding. + */ + oneof ConvolutionPaddingType { + ValidPadding valid = 50; + SamePadding same = 51; + } + + /** + * Flag to specify whether it is a deconvolution layer. + */ + bool isDeconvolution = 60; + + /** + * Flag to specify whether a bias is to be added or not. + */ + bool hasBias = 70; + + /** + * Weights associated with this layer. + * If convolution (``isDeconvolution == false``), weights have the shape + * ``[outputChannels, kernelChannels, kernelHeight, kernelWidth]``, where kernelChannels == inputChannels / nGroups + * If deconvolution (``isDeconvolution == true``) weights have the shape + * ``[kernelChannels, outputChannels / nGroups, kernelHeight, kernelWidth]``, where kernelChannels == inputChannels + */ + WeightParams weights = 90; + WeightParams bias = 91; /// Must be of size [outputChannels]. + + /** + * The output shape, which has length 2 ``[H_out, W_out]``. + * This is used only for deconvolution (``isDeconvolution == true``). + * If not set, the deconvolution output shape is calculated + * based on ``ConvolutionPaddingType``. + */ + repeated uint64 outputShape = 100; + +} + +/** + * A layer that performs a 3-dimensional convolution. + * + * .. code:: + * + * y = Convolution3DLayer(x) + * + * Input + * A blob of rank 5. + * The input blob's shape should be ``[batch, channels, depth, height, width]``. + * + * Fields + * The bias field, if set, should have shape of ``[channelsOut]``. + * + * Output + * A blob of rank 5. + * The output blob's shape is ``[batch, channelsOut, depthOut, heightOut, widthOut]``. + * + * Type of padding can be ``custom``, ``valid``, or ``same``. Padded values are all zeros. + * Output spatial dimensions depend on the the type of padding. For details, refer to the + * descriptions of the ``PaddingType`` field of this ``Convolution3DLayerParams`` message. + * + * Example + * For example, given an input of size ``[1, 3, 3, 8, 8]``, a stride of 2 in each dimension, + * a kernel of 3 in each dimension, 2 output channels, and ``same`` padding, this layer will + * compute the total padding applied in the depth, height, and width dimensions to be 2, 1, and 1, + * respectively. The depth padding is even and will be applied equally to both sides of the depth + * dimension. Since the height and width padding values are odd, they'll be applied to the + * bottom/right of the height/width dimensions. Thus, the padding applied to the input will be + * ``[1, 1, 0, 1, 0, 1]`` (front, back, top, bottom, left, right). Finally, the output produced + * will have size ``[1, 2, 2, 4, 4]``. + * + */ +message Convolution3DLayerParams { + + /** + * The number of channels in the output (channelsOut). Must be a positive integer. + */ + int32 outputChannels = 1; + + /** + * The number of channels in the input (channels). Must be a positive integer. + */ + int32 inputChannels = 2; + + /** + * Group convolution, i.e., weight reuse along the channel axis. + * It must evenly divide both the number of input and output channels and be at most the number + * of input channels (a depthwise convolution). + * Input and kernels are divided into g groups and convolution is applied within the groups + * independently. + */ + int32 nGroups = 10; + + /* Depth of the convolution kernel. Must be a positive integer. + */ + int32 kernelDepth = 20; + + /* Height of the convolution kernel. Must be a positive integer. + */ + int32 kernelHeight = 21; + + /* Width of the convolution kernel. Must be a positive integer. + */ + int32 kernelWidth = 22; + + /* Stride along the depth direction. Must be a positive integer. + */ + int32 strideDepth = 31; + + /* Stride along the height direction. Must be a positive integer. + */ + int32 strideHeight = 32; + + /* Stride along the width direction. Must be a positive integer. + */ + int32 strideWidth = 33; + + /* Dilation along the depth direction. Must be a positive integer. + */ + int32 dilationDepth = 40; + + /* Dilation along the height direction. Must be a positive integer. + */ + int32 dilationHeight = 41; + + /* Dilation along the width direction. Must be a positive integer. + */ + int32 dilationWidth = 42; + + /** + * Flag to specify whether a bias is to be added or not. + * If false, then no bias is added. + */ + bool hasBias = 50; + + /** + * Weights associated with this layer. + * Weights have the shape + * if deconvolution == False + * ``[outputChannels, kernelChannels, kernelDepth, kernelHeight, kernelWidth]``, where + * kernelChannels == inputChannels / nGroups + * else if deconvolution == True + * ``[outputChannels / nGroups, kernelChannels, kernelDepth, kernelHeight, kernelWidth]``, where + */ + WeightParams weights = 60; + + /** + * Must be of size ``[outputChannels]``. + */ + WeightParams bias = 61; + + + /** + * The type of padding. + * All padding types pad the input shape with zeros. + * CUSTOM padding will add the custom padding values specified below to their respective + * dimensions, e.g., `customPaddingFront` number of zeros will be added to one side of the + * input's depth dimension and `customPaddingBack` number of zeros will be added to the other + * side of the input's depth dimension. + * VALID padding adds no padding to any dimension. In this case, the last convolution along + * each dimension will be dropped if the input dimension and the kernel size, stride, and + * dilation do not match. + * SAME padding adds enough padding to each dimension such that the output of the convolution + * has size ``Ceiling(inputShape / stride)``. Padding is added evenly to both sides of each + * dimension unless the total padding to add is odd, in which case it is added to the + * back/bottom/right side of the respective dimension. For example, if the total padding needed + * in the depth dimension is 3, 1 zero will be added to the front side of the depth dimension + * and 2 zeros will be added to the back side. + */ + enum PaddingType { + CUSTOM = 0; + VALID = 1; + SAME = 2; + } + PaddingType paddingType = 70; + + /* Padding before the input in the depth direction. Must be zero or a positive integer. + * Used when the `PaddingType` is `CustomPadding`, otherwise ignored by other padding types. + */ + int32 customPaddingFront = 80; + + /* Padding after the input in the depth direction. Must be zero or a positive integer. + * Used when the `PaddingType` is `CustomPadding`, otherwise ignored by other padding types. + */ + int32 customPaddingBack = 81; + + /* Padding before the input in the height direction. Must be zero or a positive integer. + * Used when the `PaddingType` is `CustomPadding`, otherwise ignored by other padding types. + */ + int32 customPaddingTop = 82; + + /* Padding after the input in the height direction. Must be zero or a positive integer. + * Used when the `PaddingType` is `CustomPadding`, otherwise ignored by other padding types. + */ + int32 customPaddingBottom = 83; + + /* Padding before the input in the width direction. Must be zero or a positive integer. + * Used when the `PaddingType` is `CustomPadding`, otherwise ignored by other padding types. + */ + int32 customPaddingLeft = 84; + + /* Padding after the input in the width direction. Must be zero or a positive integer. + * Used when the `PaddingType` is `CustomPadding`, otherwise ignored by other padding types. + */ + int32 customPaddingRight = 85; + + /* Flag to specify if this is Convolution Transpose or not. + */ + bool isDeconvolution = 86; + + /* + * The output shape, which has length 3 ``[D_out, H_out, W_out]``. + * This is used only for deconvolution (``isDeconvolution == true``). + * If not set, the deconvolution output shape is calculated + * based on ``PaddingType``. + */ + repeated uint64 outputShape = 87; + +} + +/** + * A layer that performs a matrix-vector or matrix-matrix product. + * This is equivalent to a fully-connected, or dense layer. + * The weight parameters correspond to a matrix of dimensions (inputChannels, outputChannels) i.e. (C_in, C_out) + * + * .. code:: + * + * y = InnerProductLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * Input can have rank 1 to rank 5. This is how it is reshaped in to the matrix (for rank > 1): + * rank 1 (x1) : in this case, the layer corresponds to a matrix-vector product. x1 must be equal to C_in + * rank 2 (x1, x2): x2 must be equal to C_in + * rank 3 (x1, x2, x3) --> (x1 * x2, x3). x3 must be equal to C_in + * rank 4 (x1, x2, x3, x4) ---> (x1, x2 * x3 * x4). x2 * x3 * x4 must be equal to C_in + * rank 5 (x1, x2, x3, x4, x5) ---> (x1 * x2, x3 * x4 * x5). x3 * x4 * x5 must be equal to C_in + * + * Output + * Output rank is same as the input rank + * rank 1: (C_out) + * rank 2: (x1, C_out) + * rank 3: (x1, x2, C_out) + * rank 4: (x1, C_out, 1, 1) + * rank 5: (x1, x2, C_out, 1, 1) + * + */ +message InnerProductLayerParams { + + uint64 inputChannels = 1; /// Input size: C_in. + uint64 outputChannels = 2; /// Output size: C_out. + + bool hasBias = 10; /// Whether a bias is added or not. + + WeightParams weights = 20; /// Weight matrix [C_out, C_in]. + WeightParams bias = 21; /// Bias vector [C_out]. + + /** + * If set, this layer, at runtime, quantizes the floating point input blob to int8 before applying an + * inner product using INT8 weight matrix parameters, as provided in weights->int8RawValue. The + * result is then dequantized. + * Requires: + * * hasBias == false + * * QuantizationType == LinearQuantizationParams, such that + * * size of the "scale" field is 1 and "bias" field is empty in "LinearQuantizationParams" + * * numberOfBits == 8 + * * weights->rawValue_size to be empty + */ + bool int8DynamicQuantize = 22; + +} + +/** + * A layer that performs a matrix lookup and optionally adds a bias. + * The weights matrix is stored with dimensions [outputChannels, inputDim]. + * + * .. code:: + * + * y = EmbeddingLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * Input values must be in the range ``[0, inputDim - 1]``. + * + * Input must have rank equal to 4 or 5, such that the last 3 dimensions are all 1. + * rank 4: shape (x1, 1, 1, 1). x1 is effectively the batch/sequence length. + * rank 5: shape (x1, x2 , 1, 1, 1). x1 * x2 is effectively the combined batch/sequence length. + * + * Output + * Output rank is same as the input rank. Please see input description above. + * rank 4: shape (x1, outputChannels, 1, 1) + * rank 5: shape (x1, x2, outputChannels, 1, 1) + * + */ +message EmbeddingLayerParams { + + uint64 inputDim = 1; /// Size of the input dictionary. + uint64 outputChannels = 2; /// Size of the output vectors. + + bool hasBias = 10; /// Whether a bias is added or not. + + WeightParams weights = 20; /// 2-D weights of dimensions [outputChannels, inputDim]. + WeightParams bias = 21; /// Bias of size [outputChannels]. + +} + +/** + * A layer that performs a matrix lookup and optionally adds a bias. + * The weights matrix is stored with dimensions [embeddingSize, vocabSize]. + * + * .. code:: + * + * y = EmbeddingNDLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * Input values must be in the range ``[0, vocabSize - 1]``. + * Input must have rank at least 2. The last dimension must always be 1. + * rank 2: shape (x1, 1). x1 is the batch/sequence length. + * rank 3: shape (x1, x2, 1). x1 * x2 is effectively the combined batch/sequence length. + * rank 4: shape (x1, x2, x3, 1). x1 * x2 * x2 is effectively the combined batch/sequence length. + * rank 5: shape (x1, x2 , x3, x4, 1). x1 * x2 * x3 * x4 is effectively the combined batch/sequence length. + * + * Output + * Output rank is same as the input rank. Please see input description above. + * rank 2: shape (x1, embeddingSize) + * rank 3: shape (x1, x2, embeddingSize) + * rank 4: shape (x1, x2, x3, embeddingSize) + * rank 5: shape (x1, x2, x3, x4, embeddingSize) + * + */ +message EmbeddingNDLayerParams { + + uint64 vocabSize = 1; /// Size of the input dictionary. + uint64 embeddingSize = 2; /// Size of the output vectors. + bool hasBias = 3; /// Whether a bias is added or not. + WeightParams weights = 20; /// 2-D weights of dimensions [embeddingSize, vocabSize]. + WeightParams bias = 21; /// Bias of size [embeddingSize]. + +} + +/** + * A layer that performs batch normalization, + * which is performed along axis = -3, + * and repeated along the other axes, if present. + * + * .. code:: + * + * y = BatchnormLayer(x) + * + * Requires 1 input and produces 1 output. + * + * This operation is described by the following formula: + * + * .. math:: + * y_i = \gamma_i \dfrac{ (x_i - \mu_i)}{\sqrt{\sigma_i^2 + \epsilon}} + \beta_i \;,\;i=1,....,C + * + * Input + * A blob with rank greater than equal to 3. + * Example: Rank 4 blob represents [Batch, channels, height, width] + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * + * Output + * A blob with the same shape as the input. + */ +message BatchnormLayerParams { + + uint64 channels = 1; /// Size of the channel dimension in the input. + + /** + * If ``computeMeanVar == true``, + * the mean and variance are calculated from either + * the single input instance, if ``instanceNormalization == true``, + * or the whole batch, if ``instanceNormalization = false``. + * and the values provided in parameters "mean" and "variance" are ignored. + */ + bool computeMeanVar = 5; + bool instanceNormalization = 6; + + /** + * A small constant to avoid division by 0 while normalizing by variance. + * Defaults to ``1e-5`` if not set or set to ``0``. + */ + float epsilon = 10; + + WeightParams gamma = 15; /// Parameter of length [channels] + WeightParams beta = 16; /// Parameter of length [channels] + WeightParams mean = 17; /// Parameter of length [channels] + WeightParams variance = 18; /// Parameter of length [channels] + +} + +/** + * A spatial pooling layer. + * + * .. code:: + * + * y = PoolingLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank greater than equal to 4. + * Rank 4 blob represents [Batch, channels, height, width] + * For ranks greater than 4, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * + * Output + * Rank is same as the input. e.g.: for rank 4 input, output shape is [B, C, H_out, W_out] + * + * Padding options are similar to ``ConvolutionLayerParams`` + * with the additional option of ``ValidCompletePadding`` (``includeLastPixel``), + * which ensures that the last application of the kernel + * always includes the last pixel of the input image, if there is padding. + * + * .. code:: + * + * H_out = ceil(float(H_in + 2 * paddingAmounts[0] - kernelSize[0])/float(Stride[0])) + 1 + * if (paddingAmounts[0] > 0 or paddingAmounts[1] > 0) + * if ((H_out - 1) * Stride >= H_in + paddingAmounts[0]) { + * H_out = H_out - 1 + * } + * } + * + * The equivalent expressions hold true for ``W_out`` as well. + * Only symmetric padding is supported with this option. + */ +message PoolingLayerParams { + + enum PoolingType { + + MAX = 0; + AVERAGE = 1; + L2 = 2; + + } + PoolingType type = 1; /// Type of pooling operation. + + /** + * Must be length 2 in the order ``[H, W]``. + * If not set, default value ``[3, 3]`` is used. + */ + repeated uint64 kernelSize = 10; + + /** + * Must be length 2 in the order ``[H, W]``. + * If not set, default value ``[1, 1]`` is used. + */ + repeated uint64 stride = 20; + + message ValidCompletePadding { + + /** + * Must be length 2 in order ``[H, W]``. + * If not set, value ``[0, 0]`` is used. + */ + repeated uint64 paddingAmounts = 10; + + } + + oneof PoolingPaddingType { + ValidPadding valid = 30; + SamePadding same = 31; + ValidCompletePadding includeLastPixel = 32; + } + + /** + * If true, padded values are excluded from the count (denominator) + * when computing average pooling. + */ + bool avgPoolExcludePadding = 50; + + /** + * If true, global pooling is performed. + * Kernel size is inferred from the input data spatial dimensions. + */ + bool globalPooling = 60; + +} + +/* + * A layer to pool three spatial dimensions + * + * Input + * A blob with rank equal to 5, representing [Batch, channels, depth, height, width]. + * + * Output + * Rank is same as the input: A blob with rank equal to 5, representing [Batch, channels, depth, height, width]. + * + * Requires 1 input and produces 1 output. + * + * For example, given an input of shape (1,1,2,3,3): + * +----+----+----+ + * / | 10 | 11 | 12 | + * / +----+----+----+ + * / | 13 | 14 | 15 | + * / +----+----+----+ + * / | 16 | 17 | 18 | + * / +----+----+----+ + * +----+----+----+ / + * | 1 | 2 | 3 | / + * +----+----+----+ / + * | 4 | 5 | 6 | / + * +----+----+----+ / + * | 7 | 8 | 9 | / + * +----+----+----+ + * + * And applying MAX pooling using: + * Kernel: 2x2x2 + * Stride: 1x1x1 + * Valid Padding + * We expect to get an output with shape: (1,1,1,2,2) and value: + * +----+----+ + * | 14 | 15 | + * +----+----+ + * | 17 | 18 | + * +----+----+ + */ +message Pooling3DLayerParams { + + enum PoolingType3D { + MAX = 0; + AVERAGE = 1; + } + + // Whether to use Max or Average + PoolingType3D type = 1; + + // Depth of the pooling region. + int32 kernelDepth = 2; + + // Height of the pooling region. + int32 kernelHeight = 3; + + // Width of the pooling region. + int32 kernelWidth = 4; + + // Stride along the depth direction + int32 strideDepth = 5; + + // Stride along the height direction + int32 strideHeight = 6; + + // Stride along the width direction + int32 strideWidth = 7; + + /** + * The type of padding. + * All padding types pad the input shape with zeros. + * CUSTOM padding will add the custom padding values specified below to their respective + * dimensions, e.g., `customPaddingFront` number of zeros will be added to one side of the + * input's depth dimension and `customPaddingBack` number of zeros will be added to the other + * side of the input's depth dimension. + * VALID padding adds no padding to any dimension. In this case, the last pool along + * each dimension will be dropped if the input dimension and the kernel size, and stride do not match. + * SAME padding adds enough padding to each dimension such that the output + * has the same spatial dimensions as the input. Padding is added evenly to both + * sides of each dimension unless the total padding to add is odd, in which case the extra padding + * is added to the back/bottom/right side of the respective dimension. For example, if the the + * total horizontal padding is 3, then there will be 1 padding on the left, and 2 padding on the right. + */ + enum Pooling3DPaddingType { + CUSTOM = 0; + VALID = 1; + SAME = 2; + } + Pooling3DPaddingType paddingType = 15; + + // Padding before the input in the depth direction. + int32 customPaddingFront = 8; + + // Padding after the input in the depth direction. + int32 customPaddingBack = 9; + + // Padding before the input in the height direction. + int32 customPaddingTop = 10; + + // Padding after the input in the height direction. + int32 customPaddingBottom = 11; + + // Padding before the input in the width direction. + int32 customPaddingLeft = 12; + + // Padding after the input in the width direction. + int32 customPaddingRight = 13; + + // If true, exclude zeros from padding in Average pooling. Meaningless in Max Pooling. + bool countExcludePadding = 14; +} + +/* + * A layer to pool three spatial dimensions down to one value. + * This behaves like a special case of Pooling3DLayerParams in which + * the Kernel is the size of the input and there is no padding. + * + * Input + * A blob with rank equal to 5, representing [Batch, channels, depth, height, width]. + * + * Output + * Rank is same as the input: A blob with rank equal to 5, representing [Batch, channels, depth, height, width]. + * Depth, height, and width of the output will always be 1. + * + * Requires 1 input and produces 1 output. + * + * For example, given an input of shape (1,1,2,3,3): + * +----+----+----+ + * / | 10 | 11 | 12 | + * / +----+----+----+ + * / | 13 | 14 | 15 | + * / +----+----+----+ + * / | 16 | 17 | 18 | + * / +----+----+----+ + * +----+----+----+ / + * | 1 | 2 | 3 | / + * +----+----+----+ / + * | 4 | 5 | 6 | / + * +----+----+----+ / + * | 7 | 8 | 9 | / + * +----+----+----+ + * + * And applying MAX global 3d pooling, we expect to get an output with shape: (1,1,1,1,1) and value: + * +----+ + * | 18 | + * +----+ + */ +message GlobalPooling3DLayerParams { + + enum GlobalPoolingType3D { + MAX = 0; + AVERAGE = 1; + } + + // Whether to use Max or Average + GlobalPoolingType3D type = 1; +} + +/** + * A layer that performs padding along spatial dimensions. + * + * .. code:: + * + * y = PaddingLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank at least 2. + * e.g.: blob with shape ``[H_in, W_in]``. + * For ranks greater than 2, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch + * i.e. Padding is applied on last two dimensions. + * + * Output + * Same rank as the input. + * e.g.: blob with shape ``[H_out, W_out]``. + * + * Output dimensions are calculated as follows: + * + * .. code:: + * + * H_out = H_in + topPaddingAmount + bottomPaddingAmount + * W_out = W_in + leftPaddingAmount + rightPaddingAmount + * + * topPaddingAmount == Height startEdgeSize == borderAmounts[0].startEdgeSize + * bottomPaddingAmount == Height endEdgeSize == borderAmounts[0].endEdgeSize + * leftPaddingAmount == Width startEdgeSize == borderAmounts[1].startEdgeSize + * rightPaddingAmount == Width endEdgeSize == borderAmounts[1].endEdgeSize + * + * There are three types of padding: + * + * - ``PaddingConstant``, which fills a constant value at the border. + * - ``PaddingReflection``, which reflects the values at the border. + * - ``PaddingReplication``, which replicates the values at the border. + * + * Given the following input: + * + * .. code:: + * + * [1, 3, 4] : 1 2 3 4 + * 5 6 7 8 + * 9 10 11 12 + * + * Here is the output of applying the padding + * ``(top=2, left=2, bottom=0, right=0)`` + * with each of the supported types: + * + * - ``PaddingConstant`` (``value = 0``): + * .. code:: + * + * [1, 5, 6] : 0 0 0 0 0 0 + * 0 0 0 0 0 0 + * 0 0 1 2 3 4 + * 0 0 5 6 7 8 + * 0 0 9 10 11 12 + * + * - ``PaddingReflection``: + * .. code:: + * + * [1, 5, 6] : 11 10 9 10 11 12 + * 7 6 5 6 7 8 + * 3 2 1 2 3 4 + * 7 6 5 6 7 8 + * 11 10 9 10 11 12 + * + * - ``PaddingReplication``: + * .. code:: + * + * [1, 5, 6] : 1 1 1 2 3 4 + * 1 1 1 2 3 4 + * 1 1 1 2 3 4 + * 5 5 5 6 7 8 + * 9 9 9 10 11 12 + */ +message PaddingLayerParams { + + /** + * Fill a constant value in the padded region. + */ + message PaddingConstant { + float value = 1; + } + + /** + * Reflect the values at the border for padding. + */ + message PaddingReflection { + } + + /** + * Replicate the values at the border for padding. + */ + message PaddingReplication { + } + + oneof PaddingType { + PaddingConstant constant = 1; + PaddingReflection reflection = 2; + PaddingReplication replication = 3; + } + + BorderAmounts paddingAmounts = 10; /// Amounts to be padded to the input. + +} + +/** + * A layer that concatenates along the axis = -3 or -5. + * For general concatenation along any axis, see ConcatNDLayer. + * + * .. code:: + * + * y = ConcatLayer(x1,x2,....) + * + * Requires more than 1 input and produces 1 output. + * + * Input + * All input blobs must have same rank. + * If "sequenceConcat" = False, rank must be greater than equal to 3. In this case concatenation is along axis = -3 + * If "sequenceConcat" = True, rank must be greater than equal to 5. In this case concatenation is along axis = -5 + * + * Output + * Same rank as the input. + * + */ +message ConcatLayerParams { + + /** + * If true, concatenate along the axis = -5 instead of axis = -3. + */ + bool sequenceConcat = 100; + +} + +/** + * A layer that performs local response normalization (LRN). + * + * .. code:: + * + * y = LRNLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank greater than equal to 3. + * Example: Rank 4 blob represents [Batch, channels, height, width] + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * Output + * A blob with the same shape as the input. + * + * This layer is described by the following formula: + * + * .. math:: + * x_i \leftarrow \dfrac{x_i}{\left ( k + \dfrac{\alpha}{C} \sum_j x_j^2 \right )^\beta} + * + * where the summation is done over a ``(localSize, 1, 1)`` neighborhood --- + * that is, over a window "across" channels in 1x1 spatial neighborhoods. + */ +message LRNLayerParams { + + float alpha = 1; + float beta = 2; + uint64 localSize = 3; /// Number of channels in the normalization window. + float k = 4; /// Defaults to 1 if not set or 0. Must be strictly positive. + +} + +/** + * Softmax Normalization Layer + * + * A layer that performs softmax normalization. + * Normalization is applied along axis = -3 or N-3 (where N is the rank of the input) + * For softmax layer that can operate on any axis, see SoftmaxNDLayer. + * + * + * .. code:: + * + * y = SoftmaxLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * Must be a blob with rank >= 3. + * Output + * A blob with the same shape as the input. + * + * This layer is described by the following formula: + * + * .. math:: + * x_i \leftarrow \dfrac{e^{x_i}}{\sum_i{e^{x_i}}} + */ +message SoftmaxLayerParams { + +} + +/** + * A layer that uniformly splits across axis = -3 to produce a specified number of outputs. + * For general split operation along any axis, see SplitNDLayer. + * + * .. code:: + * + * (y1,y2,...yN) = SplitLayer(x), where N = nOutputs + * + * Requires 1 input and produces multiple outputs. + * + * Input + * A blob with rank at least 3. + * e.g.: blob with shape ``[C, H, W]`` + * Output + * ``nOutputs`` blobs each with same rank as the input. + * e.g.: For input that is of shape ``[C, H, W]``, output shapes will be ``[C/nOutputs, H, W]`` + */ +message SplitLayerParams { + + uint64 nOutputs = 1; /// The number of outputs. + +} + +/** + * A layer that performs elementwise addition. + * This layer has limited broadcasting support. For general broadcasting see AddBroadcastableLayer. + * + * .. code:: + * + * y = AddLayer(x1,x2,...) + * + * Requires 1 or more than 1 input and produces 1 output. + * + * Input + * In general, there are no rank constraints. + * However, only certain set of shapes are broadcastable. For example: + * [B, 1, 1, 1], [B, C, 1, 1], [B, 1, H, W], [B, C, H, W] + * Output + * A blob with shape equal to the input blob. + * + * If only one input is provided, scalar addition is performed: + * + * .. math:: + * y = x + \alpha + * + */ +message AddLayerParams { + + /** + * Scalar to be added to the input. + * Only used if there is a single input. + */ + float alpha = 1; + +} + +/** + * A layer that performs elementwise multiplication. + * This layer has limited broadcasting support. For general broadcasting see MultiplyBroadcastableLayer. + * + * .. code:: + * + * y = MultiplyLayer(x1,x2,...) + * + * Requires 1 or more than 1 input and produces 1 output. + * + * Input + * In general, there are no rank constraints. + * However, only certain set of shapes are broadcastable. For example: + * [B, 1, 1, 1], [B, C, 1, 1], [B, 1, H, W], [B, C, H, W] + * Output + * A blob with shape equal to the first input blob. + * + * If only one input is provided, scalar multiplication is performed: + * + * .. math:: + * y = \alpha x + * + */ +message MultiplyLayerParams { + + /** + * Scalar to be multiplied with the input. + * Only used if there is a single input. + */ + float alpha = 1; + +} + +/** + * A layer that applies a unary function. + * + * .. code:: + * + * y = UnaryFunctionLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with no rank constraints. + * Output + * A blob with the same shape as the input. + * + * The input is first modified by shifting and scaling: + * + * .. math:: + * x \leftarrow \text{scale} \cdot x + \text{shift} + */ +message UnaryFunctionLayerParams { + + /** + * A unary operator. + * + * The following functions are supported: + * + * ``SQRT`` + * .. math:: f(x) = \sqrt{x} + * + * ``RSQRT`` + * .. math:: f(x) = \dfrac{1}{\sqrt{x + \epsilon}} + * + * ``INVERSE`` + * .. math:: f(x) = \dfrac{1}{x + \epsilon} + * + * ``POWER`` + * .. math:: f(x) = x^\alpha + * + * ``EXP`` + * .. math:: f(x) = e^x + * + * ``LOG`` + * .. math:: f(x) = \log x + * + * ``ABS`` + * .. math:: f(x) = |x| + * + * ``THRESHOLD`` + * .. math:: f(x) = \text{max}(\alpha, x) + */ + enum Operation { + SQRT = 0; + RSQRT = 1; + INVERSE = 2; + POWER = 3; + EXP = 4; + LOG = 5; + ABS = 6; + THRESHOLD = 7; + } + Operation type = 1; /// The type of unary function. + + /** + * A constant used in ``POWER`` and ``THRESHOLD`` functions. + */ + float alpha = 2; + + /** + * A small constant to avoid division by 0 while normalizing variance. + * Defaults to ``1e-6`` if not set or set to ``0``. + */ + float epsilon = 3; + + /** + * Input is shifted by this amount + * before the unary function is applied. + * Defaults to ``0.0`` if not set. + */ + float shift = 4; + + /** + * Input is scaled by this amount + * before the unary function is applied. + * Defaults to ``1.0`` if not set or set to ``0``. + */ + float scale = 5; + +} + +/** + * A layer that scales up spatial dimensions. + * It supports two modes: nearest neighbour (default) and bilinear. + * + * .. code:: + * + * y = UpsampleLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank at least 3. + * e.g.: blob with shape ``[C, H, W]``. + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * + * Output + * Same rank as the input. + * e.g.: blob with shape ``[C, scalingFactor[0] * H, scalingFactor[1] * W]`` + */ +message UpsampleLayerParams { + + /** + * Scaling Factor. Mutually exclusive with fractionalScalingFactor. + * Must be length 2 in order ``[H, W]``. + * If not set, default value ``[1, 1]`` is used. + */ + repeated uint64 scalingFactor = 1; + + /** + * Fractional scaling factor. Mutually exclusive with scalingFactor. + * Must be length 2 in order ``[H, W]``. + * If not set, default value ``[1.0, 1.0]`` is used. + */ + repeated float fractionalScalingFactor = 7; + + /* + * Overall mode for interpolating new elements when upsampling. + * NN - Nearest Neighbors - simply pick the nearest true value for interpolated values. + * BILINEAR - Use bilinear interpolation. See LinearUpsamplingMode for behavior. + */ + enum InterpolationMode { + + NN = 0; /// Nearest Neighbour + BILINEAR = 1; /// Bilinear + + } + + InterpolationMode mode = 5; + + /** + * LinearUpsampleMode specifies the behavior for linear upsampling. Only valid when Interpolation Mode is BILINEAR. + * If input grid is [0, Xin-1] (corresponding to an input size of Xin), and if the output size is Xout, + * then the grid points are sampled in the following manner: + * DEFAULT: + * spacing = (Xin-Xin/Xout) / (Xout-1) + * grid_point[i] = min(Xin-1, max(0, i * spacing)), for i = 0,1,2,….,Xout-1 + * ALIGN_CORNERS_TRUE: + * spacing = (Xin-1) / (Xout-1) + * grid_point[i] = min(Xin-1, max(0, i * spacing)), for i = 0,1,2,….,Xout-1 + * ALIGN_CORNERS_FALSE: + * spacing = Xin / Xout + * grid_point[i] = min(Xin-1, max(0, i * spacing + 0.5 * spacing - 0.5)), for i = 0,1,2,….,Xout-1 + */ + enum LinearUpsampleMode { + + DEFAULT = 0; + ALIGN_CORNERS_TRUE = 1; + ALIGN_CORNERS_FALSE = 2; + + } + + LinearUpsampleMode linearUpsampleMode = 6; + +} + +/** +* A layer that resizes the input to a pre-specified spatial size using bilinear interpolation. +* +* .. code:: +* +* y = ResizeBilinearLayer(x) +* +* Requires 1 input and produces 1 output. +* +* Input +* A blob with rank at least 3. +* e.g.: blob with shape ``[C, H_in, W_in]``. +* For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. +* +* Output +* Same rank as the input. +* e.g.: blob with shape ``[C, H_out, W_out]``. +* +*/ +message ResizeBilinearLayerParams { + + /** + * Target Spatial Size. + * Must be length 2 in order ``[Height, Width]``, i.e. ``[H_out, W_out]``. + * If not set, default value ``[1, 1]`` is used. + */ + repeated uint64 targetSize = 1; + + /** + * Mode used to compute the grid on which the spatial output values are evaluated. + * Same mode is applied to both the height and width axes. + */ + SamplingMode mode = 2; + +} + +/** +* A layer that extracts cropped spatial patches or RoIs (regions of interest) from the input and resizes them to a pre-specified size using +* bilinear interpolation. +* Note that RoI Align layer can be implemented with this layer followed by a pooling layer. +* +* .. code:: +* +* y = CropResizeLayer(x) +* +* Requires 2 inputs and produces 1 output. +* +* Input +* There are two inputs. +* First input represents an image feature map. +* Second input represents the bounding box coordinates for N patches or RoIs (region of interest). +* +* First input is rank 5: [1, Batch, C, H_in, W_in]. +* Second input is rank 5. Its shape can be either [N, 1, 4, 1, 1] or [N, 1, 5, 1, 1]. +* +* N: number of patches/RoIs to be extracted +* +* If RoI shape = ``[N, 1, 4, 1, 1]`` +* The axis=-3 corresponds to the four coordinates specifying the bounding box. +* All the N RoIs are extracted from all the batches of the input. +* +* If RoI shape = ``[N, 1, 5, 1, 1]`` +* The first element of the axis=-3 specifies the input batch id from which to extract the RoI and +* must be in the interval ``[0, Batch - 1]``. That is, n-th RoI is extracted from the RoI[n,0,0,0,0]-th +* input batch id. The last four elements of the axis=-3 specify the bounding box coordinates. +* +* Output +* A blob with rank 5. +* - Shape is [N, Batch, C, H_out, W_out] if input RoI shape is [N, 1, 4, 1, 1] +* - Shape is [N, 1, C, H_out, W_out] if input RoI shape is [N, 1, 5, 1, 1] +* +*/ +message CropResizeLayerParams { + + /** + * Target Spatial Size. + * Must be length 2 in order ``[Height, Width]``, i.e. ``[H_out, W_out]``. + * If not set, default value ``[1, 1]`` is used. + */ + repeated uint64 targetSize = 1; + + /** + * If true the bounding box coordinates must be in the interval [0, 1]. + * They are scaled by (H_in - 1), (W_in - 1), i.e. based on the input spatial dimensions. + * If false the bounding box coordinates must be in the interval + * [0, H_in -1] and [0, W_in - 1], respectively for height and width dimensions. + */ + bool normalizedCoordinates = 2; + + /** + * Mode used to compute the grid on which the spatial output values are evaluated. + * Same mode is applied to both the height and width axes. + */ + SamplingMode mode = 3; + + /** + * Representation used to express the bounding box coordinates. + * It determines how the values of the second input are interpreted. + */ + BoxCoordinatesMode boxIndicesMode = 4; + + /** + * Additional spatial scale that multiplies the bounding box coordinates. + * Generally used while implementing the RoI Align layer, + * which uses unnormalized RoI coordinates along with a spatial scale less than or equal to 1. + */ + float spatialScale = 5; + +} + +/** + * A layer that performs elementwise addition of a bias, + * which is broadcasted to match the input shape. + * + * .. code:: + * + * y = BiasLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank at least 3. + * e.g.: blob with shape ``[C, H, W]``. + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * Output + * A blob with the same shape as the input. + */ +message BiasLayerParams { + + /** + * The shape of the bias. + * Must be one of the following: + * ``[1]``, ``[C]``, ``[1, H, W]`` or ``[C, H, W]``. + */ + repeated uint64 shape = 1; + + /** + * The bias values. + * The size must be equal to the product of the ``shape`` dimensions. + */ + WeightParams bias = 2; + +} + +/** + * A layer that performs elmentwise multiplication by a scale factor + * and optionally adds a bias; + * both the scale and bias are broadcasted to match the input shape. + * + * .. code:: + * + * y = ScaleLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank at least 3. + * e.g.: blob with shape ``[C, H, W]``. + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * Output + * A blob with the same shape as the input. + */ +message ScaleLayerParams { + + /** + * The shape of the scale. + * Must be one of the following: + * ``[1]``, ``[C]``, ``[1, H, W]`` or ``[C, H, W]``. + */ + repeated uint64 shapeScale = 1; + + /** + * The scale values. + * The size must be equal to the product of the ``shape`` dimensions. + */ + WeightParams scale = 2; /// Scale values. Size must be equal to the product of dimensions specified in shapeScale. + + bool hasBias = 3; /// If true, a bias is added after scaling. + + /** + * The shape of the bias. + * Must be one of the following: + * ``[1]``, ``[C]``, ``[1, H, W]`` or ``[C, H, W]``. + */ + repeated uint64 shapeBias = 4; + + /** + * The bias values. + * The size must be equal to the product of the ``shape`` dimensions. + */ + WeightParams bias = 5; + +} + +/** + * A layer that loads data as a parameter and provides it as an output. + * The output is rank 5. For general rank, see LoadConstantNDLayer. + * + * .. code:: + * + * y = LoadConstantLayer() + * + * Requires no input and produces 1 output. + * + * Output: + * A blob with rank 5 and shape ``[1, 1, C, H, W]`` + */ +message LoadConstantLayerParams { + + /** + * The shape of the constant to be loaded, + * which must be``[C, H, W]``, that is length 3. + */ + repeated uint64 shape = 1; + + /** + * The data values, + * of size ``C * H * W``. + */ + WeightParams data = 2; + +} + +/** + * A layer that performs L2 normalization, i.e. divides by the + * the square root of the sum of squares of all elements of input. + * + * .. code:: + * + * y = L2NormalizeLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank greater than equal to 3. + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * Output + * A blob with the same shape as the input. + * + * This layer is described by the following formula: + * + * .. math:: + * x_i \leftarrow \dfrac{x_i}{\sqrt{\sum{x_i^2} + \epsilon}} + */ +message L2NormalizeLayerParams { + + /** + * A small constant to avoid division by 0 while normalizing variance. + * Defaults to ``1e-6`` if not set or set to ``0``. + */ + float epsilon = 1; + +} + +/// Data Reorganization Layers +/// -------------------------- + +/** + * A layer that flattens the input. + * + * .. code:: + * + * y = FlattenLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank greater than equal to 3. + * e.g.: Rank 4 blob represents [Batch, C, H, W] + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * Output + * Same rank as the input, such that last two dimensions are both 1. + * e.g.: For rank 4 input, output shape is ``[Batch, C * H * W, 1, 1]`` + * + * There are two X orders: ``CHANNEL_FIRST`` and ``CHANNEL_LAST``. + * ``CHANNEL_FIRST`` does not require data to be rearranged, + * because row major ordering is used by internal storage. + * ``CHANNEL_LAST`` requires data to be rearranged. + */ +message FlattenLayerParams { + + enum FlattenOrder { + + CHANNEL_FIRST = 0; + CHANNEL_LAST = 1; + + } + FlattenOrder mode = 1; + +} + +/** + * A layer that recasts the input into a new shape. + * + * .. code:: + * + * y = ReshapeLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank 5. + * e.g.: ``[1, 1, C, H, W]`` or ``[Seq, 1, C, H, W]``. + * Output + * A blob with rank 5. + * e.g.: ``[1, 1, C_out, H_out, W_out]`` or ``[Seq_out, 1, C_out, H_out, W_out]``. + * + * There are two reshape orders: ``CHANNEL_FIRST`` and ``CHANNEL_LAST``. + * ``CHANNEL_FIRST`` is equivalent to + * flattening the input to ``[Seq, 1, C * H * W, 1, 1]`` in channel first order + * and then reshaping it to the target shape; + * no data rearrangement is required. + * ``CHANNEL_LAST`` is equivalent to + * flattening the input to ``[Seq, 1, H * W * C, 1, 1]`` in channel last order, + * reshaping it to ``[Seq_out, 1, H_out, W_out, C_out]`` (it is now in "H_out-major"" order), + * and then permuting it to ``[C_out, H_out, W_out]``; + * both the flattening and permuting requires the data to be rearranged. + */ +message ReshapeLayerParams { + + /** + * The shape of the output. + * Must be of length 3 or 4. + * If set to 3, ``targetShape`` is interpreted as + * ``[1, 1, C_out, H_out, W_out]``, and sequence length of the input is preserved. + * If set to 4, ``targetShape`` is interpreted as + * ``[Seq_out, 1, C_out, H_out, W_out]``, + * where ``Seq_out`` is the new sequence length. + */ + repeated int64 targetShape = 1; + + enum ReshapeOrder { + + CHANNEL_FIRST = 0; + CHANNEL_LAST = 1; + + } + ReshapeOrder mode = 2; + +} + +/** + * A layer that rearranges the dimensions and data of an input. + * For generic transpose/permute operation see TransposeLayer. + * + * .. code:: + * + * y = PermuteLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * Must be a rank 5 blob. + * e.g.: shape ``[Seq, B, C, H, W]``. + * Output + * Rank 5 blob. Transposed version of the input, such that dimensions at axis=1 or axis=-4 is unchanged. + * + * + * Examples: + * + * Assume input shape is [Seq, B, C, H, W] + * + * - If ``axis`` is set to ``[0, 3, 1, 2]``, + * then the output has shape ``[Seq, B, W, C, H]`` + * + * - If ``axis`` is set to ``[3, 1, 2, 0]``, + * then the output has shape ``[W, B, C, H, Seq]`` + * + * - If ``axis`` is set to ``[0, 3, 2, 1]``, + * then the output has shape ``[Seq, B, W, H, C]`` + * + * - If ``axis`` is not set, or is set to ``[0, 1, 2, 3]``, + * the output is the same as the input. + */ +message PermuteLayerParams { + + /** + * The order in which to permute the dimensions. + * Must have length 4 and a permutation of ``[0, 1, 2, 3]``. + */ + repeated uint64 axis = 1; + +} + +/** + * A layer that reorganizes data in the input in specific ways. + * + * .. code:: + * + * y = ReorganizeDataLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank at least 3. + * e.g.: blob with shape ``[C, H, W]``. + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * Output + * Same rank as the input. + * e.g.: blob with shape ``[C_out, H_out, W_out]``. + * + * mode == SPACE_TO_DEPTH + * ``[C_out, H_out, W_out]`` : ``[C * blockSize * blockSize, H/blockSize, W/blockSize]``. + * blockSize must divide H and W. + * Data is moved from the spatial dimensions to the channel dimension. Input is spatially divided into + * non-overlapping blocks of size blockSize X blockSize and data from each block is moved into the + * channel dimension. + * + * mode == DEPTH_TO_SPACE + * ``[C_out, H_out, W_out]`` : ``[C/(blockSize * blockSize), H * blockSize, W * blockSize]``. + * Square of blockSize must divide C. + * Reverse of SPACE_TO_DEPTH. Data is moved from the channel dimension to the spatial dimensions. + * + * mode == PIXEL_SHUFFLE + * ``[C_out, H_out, W_out]`` : ``[C/(blockSize * blockSize), H * blockSize, W * blockSize]``. + * Square of blockSize must divide C. + * Similar to DEPTH_TO_SPACE, but using the pixel-shuffle semantics for channel order in the output space. + * In both modes, elements along the channel dimension are collapsed into + * blocks in the spatial dimensions. The difference is in the arrangement of + * the input-channels' data in the output space. See below example for more + * detail. + * (Only available in Core ML Specification >= 5 (iOS >= 14, macOS >= 11.0) + * + * + * Examples: + * + * Assume input is the following [C = 8, H = 1, W = 2] tensor: + * + * .. code:: + * + * [[[1 2]] [[3 4]] [[5 6]] [[7 8]] [[9 10]] [[11 12]] [[13 14]] [[15 16]]] + * + * If block_size == 2 and mode == DEPTH_TO_SPACE, output will be the following + * [C = 2, H = 2, W = 4] tensor: + * + * .. code:: + * + * [[[ 1 5 2 6] + * [ 9 13 10 14]] + * + * [[ 3 7 4 8] + * [11 15 12 16]]] + * + * For mode == SPACE_TO_DEPTH, the behavior is the same as mode == + * DEPTH_TO_SPACE, but with the input and output swapped. + * + * If block_size == 2 and mode == PIXEL_SHUFFLE, output will be the following + * [C = 2, H = 2, W = 4] tensor: + * + * .. code:: + * + * [[[ 1 3 2 4] + * [ 5 7 6 8]] + * + * [[ 9 11 10 12] + * [13 15 14 16]]] + * + */ +message ReorganizeDataLayerParams { + + enum ReorganizationType { + + SPACE_TO_DEPTH = 0; + DEPTH_TO_SPACE = 1; + PIXEL_SHUFFLE = 2; + + } + ReorganizationType mode = 1; + uint64 blockSize = 2; /// must be greater than 1 + +} + +/** + * A layer that slices the input data along axis = -1 or -2 or -3. + * For general slice along any axis, please see SliceStaticLayer/SliceDynamicLayer. + * + * .. code:: + * + * y = SliceLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob that can, in general, have any rank. However, depending on the value of "axis" , + * there may be additional rank constraints. + * Output + * A blob with the same rank as the input. + * + * Sliced section is taken from the interval ``[startIndex, endIndex)``, i.e. + * startIndex is inclusive while endIndex is exclusive. + * stride must be positive and represents the step size for slicing. + * Negative indexing is supported for startIndex and endIndex. + * -1 denotes N-1, -2 denotes N-2 and so on, where N is the length of the dimension to be sliced. + * + */ +message SliceLayerParams { + + int64 startIndex = 1; /// start of the sliced section. Inclusive. + int64 endIndex = 2; /// end of sliced section. Exclusive. + uint64 stride = 3; /// The step size. Must be positive. + + enum SliceAxis { + + CHANNEL_AXIS = 0; + HEIGHT_AXIS = 1; + WIDTH_AXIS = 2; + + } + // The following mapping is used for interpreting this parameter: + // CHANNEL_AXIS => axis = -3, input must have rank at least 3. + // HEIGHT_AXIS => axis = -2, input must have rank at least 2. + // WIDTH_AXIS => axis = -1 + SliceAxis axis = 4; + +} + +/** + * A layer that reduces the input using a specified operation. + * + * .. code:: + * + * y = ReduceLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob that can, in general, have any rank. However, depending on the value of "axis" , + * there may be additional rank constraints. + * Output + * A blob with the same rank as the input, which has 1s on the dimensions specified in the parameter "axis" + * + * Values supported for axis are [-1], [-2], [-3], [-2,-1], [-3,-2,-1] + * and the equivalent positive values (depending on the rank of the input) + * For mode == 'ArgMax', axis must be [-1] or [-2] or [-3]. + */ +message ReduceLayerParams { + + /* + * The following reduction operations are supported + * and are applied on the specified axis of the input array: + * + * ``SUM`` + * Sum of all elements + * + * .. math:: \sum{x_i} + * + * ``AVG`` + * Sum of all elements divided by the number of elements + * + * .. math:: \dfrac{\sum^n{x_i}}{n} + * + * ``PROD`` + * Product of all elements + * + * .. math:: \prod{x_i} + * + * ``LOGSUM`` + * Sum of the natural logarithm of all elements + * + * .. math:: \sum{\ln{(x_i + \epsilon)}} + * + * ``SUMSQUARE`` + * Sum of squares of all elements + * + * .. math:: \sum{x^2} + * + * ``L1`` + * L1 normalization of all elements + * + * .. math:: ||x||_1 = \sum{|x_i|} + * + * ``L2`` + * L2 normalization of all elements + * + * .. math:: ||x||_2 = \sqrt{\sum{x_i^2}} + * + * ``MAX`` + * Maximum of all elements + * + * .. math:: \text{max}(x_i) + * + * ``MIN`` + * Minumum of all elements + * + * .. math:: \text{min}(x_i) + * + * ``ARGMAX`` + * Argument of the maximum of all elements + * + * .. math:: \text{argmax}(x_i) + * + */ + enum ReduceOperation { + + SUM = 0; + AVG = 1; + PROD = 2; + LOGSUM = 3; + SUMSQUARE = 4; + L1 = 5; + L2 = 6; + MAX = 7; + MIN = 8; + ARGMAX = 9; /// only supported with axis = C, H or W. + + } + ReduceOperation mode = 1; /// Specifies function used to reduce. + + /** + * Used if mode is ``LOGSUM``. + * Defaults to ``1e-6`` if not set or is set to ``0``. + */ + float epsilon = 2; + + enum ReduceAxis { + + CHW = 0; + HW = 1; + C = 2; + H = 3; + W = 4; + + } + + // The following mapping is used for interpreting this parameter: + // CHW = axis [-3, -2, -1], input must have rank at least 3. + // HW = axis [-2, -1], input must have rank at least 2. + // C = axis [-3] + // H = axis [-2] + // W = axis [-1] + ReduceAxis axis = 3; + +} + +/** + * A layer that crops the spatial dimensions of an input. + * If two inputs are provided, the shape of the second input is used as the reference shape. + * + * .. code:: + * + * y = CropLayer(x1) or y = CropLayer(x1,x2) + * + * Requires 1 or 2 inputs and produces 1 output. + * + * Input + * 1 or 2 tensors, each with rank at least 3, both inputs must have equal rank. + * Example: + * - 1 input case: A blob with shape ``[C, H_in, W_in]``. + * - 2 input case: 1st blob with shape ``[C, H_in, W_in]``, 2nd blob with shape ``[C, H_out, W_out]``. + * + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * + * Output + * Same rank as the inputs. + * e.g.: A blob with shape ``[C, H_out, W_out]``. + * + * If one input is used, output is computed as follows: + * + * .. code:: + * + * y = x1[:, topCropAmount:H_in - bottomCropAmount, leftCropAmount:W_in - rightCropAmount] + * + * topCropAmount == Height startEdgeSize == borderAmounts[0].startEdgeSize + * bottomCropAmount == Height endEdgeSize == borderAmounts[0].endEdgeSize + * leftCropAmount == Width startEdgeSize == borderAmounts[1].startEdgeSize + * rightCropAmount == Width endEdgeSize == borderAmounts[1].endEdgeSize + * + * H_out = H_in - topCropAmount - bottomCropAmount + * W_out = W_in - leftCropAmount - rightCropAmount + * + * If two inputs are used, output is computed as follows: + * + * .. code:: + * + * y = x1[:, offset[0]:offset[0] + H_out, offset[1]:offset[1] + W_out] + */ +message CropLayerParams { + + /** + * The amounts to be cropped from the input. + * Used only if a single input is provided. + */ + BorderAmounts cropAmounts = 1; + + /** + * The offset amounts. + * Used only if two inputs are provided. + * Must be of length 2, in order ``[H, W]``. + */ + repeated uint64 offset = 5; + +} + +/** + * A layer that computes the elementwise average of the inputs. + * This layer has limited broadcasting support. For general broadcasting see AddBroadcastableLayer. + * + * .. code:: + * + * y = AverageLayer(x1,x2,...) + * + * Requires multiple inputs and produces 1 output. + * + * Input + * In general, there are no rank constraints. + * However, only certain set of shapes are broadcastable. For example: + * [B, 1, 1, 1], [B, C, 1, 1], [B, 1, H, W], [B, C, H, W] + * Output + * A blob with the same shape as each input. + */ +message AverageLayerParams { + +} + +/** + * A layer that computes the elementwise maximum over the inputs. + * + * .. code:: + * + * y = MaxLayer(x1,x2,...) + * + * Requires multiple inputs and produces 1 output. + * + * Input + * In general, there are no rank constraints. + * However, only certain set of shapes are broadcastable. For example: + * [B, C, 1, 1], [B, C, H, W] + * Output + * A blob with the same shape as each input. + */ +message MaxLayerParams { + +} + +/** + * A layer that computes the elementwise minimum over the inputs. + * + * .. code:: + * + * y = MinLayer(x1,x2,...) + * + * Requires multiple inputs and produces 1 output. + * + * Input + * In general, there are no rank constraints. + * However, only certain set of shapes are broadcastable. For example: + * [B, C, 1, 1], [B, C, H, W] + * Output + * A blob with the same shape as each input. + */ +message MinLayerParams { + +} + +/** + * A layer that computes the dot product of two vectors. + * + * .. code:: + * + * y = DotProductLayer(x1,x2) + * + * Requires 2 inputs and produces 1 output. + * + * Input + * Two blobs with rank at least 3, such that the last two dimensions must be 1. + * e.g.: blobs with shape ``[B, C, 1, 1]``. + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * + * Output + * Same rank as the input. + * e.g. for rank 4 inputs, output shape: [B, 1, 1, 1] + */ +message DotProductLayerParams { + + /** + * If true, inputs are normalized first, + * thereby computing the cosine similarity. + */ + bool cosineSimilarity = 1; + +} + +/** + * A layer that performs mean variance normalization, along axis = -3. + * + * .. code:: + * + * y = MeanVarianceNormalizeLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank greater than equal to 3. + * Example: Rank 4 blob represents [Batch, channels, height, width] + * For ranks greater than 3, the leading dimensions, starting from 0 to -4 (inclusive), are all treated as batch. + * + * Output + * A blob with the same shape as the input. + * + * If ``acrossChannels == true`` + * normalization is performed on flattened input, i.e. the input is reshaped to (Batch,C), where "Batch" contains + * all dimensions from 0 to -4 (inclusive), and C contains dimensions -1, -2, -3. + * + * If ``acrossChannels == false`` + * normalization is performed within a channel, + * across spatial dimensions (i.e. last two dimensions). + */ +message MeanVarianceNormalizeLayerParams { + + /** + * If true, mean and variance are computed across channels. + */ + bool acrossChannels = 1; + + /** + * If false, only mean is subtracted. + */ + bool normalizeVariance = 2; + + /** + * A small constant to avoid division by 0 while normalizing variance. + * Defaults to ``1e-6`` if not set or set to ``0``. + */ + float epsilon = 3; + +} + +/** + * A layer that repeats a sequence or the dimension sitting at axis = -5 + * + * .. code:: + * + * y = SequenceRepeatLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A blob with rank at least 5. + * e.g: shape ``[Seq, B, C, H, W]`` + * Output + * A blob with the same rank as the input. + * e.g.: for input shape ``[Seq, B, C, H, W]``, output shape is ``[nRepetitions * Seq, B, C, H, W]``. + */ +message SequenceRepeatLayerParams { + + /** + * Number of repetitions. + * Defaults to ``1`` if not set or set to ``0``. + */ + uint64 nRepetitions = 1; + +} + +/// Recurrent Layers +/// ---------------- + +/* + * The following activations are supported with recurrent layers: + * - Linear + * - Sigmoid + * - Tanh + * - ReLU + * - Scaled Hyperbolic Tangent: alpha * tanh(beta * x), currently only supported for alpha = 1.7159, beta = 2/3 + * - Hard Sigmoid: min(max(alpha * x + beta, 0), 1), currently only supported for alpha = 0.2, beta = 0.5 + */ + +/** + * A simple recurrent layer. + * + * .. code:: + * + * y_t = SimpleRecurrentLayer(x_t, y_{t-1}) + * + * Input + * A blob of rank 5, with shape `[Seq, Batch, inputVectorSize, 1, 1]``. + * This represents a sequence of vectors of size ``inputVectorSize``. + * Output + * Same rank as the input. + * Represents a vector of size ``outputVectorSize``. It is either the final output or a sequence of outputs at all time steps. + * + * - Output Shape: ``[1, Batch, outputVectorSize, 1, 1]`` , if ``sequenceOutput == false`` + * - Output Shape: ``[Seq, Batch, outputVectorSize, 1, 1]`` , if ``sequenceOutput == true`` + * + * This layer is described by the following equation: + * + * .. math:: + * \boldsymbol{y_t} = f(\mathrm{clip}(W \boldsymbol{x_t} + \ + * R \boldsymbol{y_{t-1}} + b)) + * + * - ``W`` is a 2-dimensional weight matrix + * (``[outputVectorSize, inputVectorSize]``, row-major) + * - ``R`` is a 2-dimensional recursion matrix + * (``[outputVectorSize, outputVectorSize]``, row-major) + * - ``b`` is a 1-dimensional bias vector (``[outputVectorSize]``) + * - ``f()`` is an activation + * - ``clip()`` is a function that constrains values between ``[-50.0, 50.0]`` + */ +message SimpleRecurrentLayerParams { + + uint64 inputVectorSize = 1; /// The size of the input vectors. + uint64 outputVectorSize = 2; /// The size of the output vectors. + + /** + * Activations supported are Linear, Sigmoid, Tanh, ReLU, Scaled Tanh (alpha = 1.71, beta = 2/3), Hard sigmoid (alpha = 0.2, beta = 0.5) + */ + ActivationParams activation = 10; /// The activation function. + + /** + If false output is just the result after final state update. + If true, output is a sequence, containing outputs at all time steps. + */ + bool sequenceOutput = 15; + + bool hasBiasVector = 20; /// If false, no bias is added. + + WeightParams weightMatrix = 30; /// Weight matrix W. + WeightParams recursionMatrix = 31; /// Recursion Weight matrix R. + WeightParams biasVector = 32; /// Bias vector b. + + bool reverseInput = 100; + // If true, then the node processes the input sequence from right to left + +} + +/** + * Gated-Recurrent Unit (GRU) Layer + * + * .. code:: + * + * y_t = GRULayer(x_t, y_{t-1}) + * + * Input + * A blob of rank 5, with shape `[Seq, Batch, inputVectorSize, 1, 1]``. + * This represents a sequence of vectors of size ``inputVectorSize``. + * Output + * Same rank as the input. + * Represents a vector of size ``outputVectorSize``. It is either the final output or a sequence of outputs at all time steps. + * + * - Output Shape: ``[1, Batch, outputVectorSize, 1, 1]`` , if ``sequenceOutput == false`` + * - Output Shape: ``[Seq, Batch, outputVectorSize, 1, 1]`` , if ``sequenceOutput == true`` + * + * This layer is described by the following equations: + * + * Update Gate + * .. math:: + * \boldsymbol{z_t} = \ + * f(\mathrm{clip}(W_z \boldsymbol{x_t} + \ + * R_z \boldsymbol{y_{t-1}} + b_z) + * + * Reset Gate + * .. math:: + * \boldsymbol{r_t} = \ + * f(\mathrm{clip}(W_r \boldsymbol{x_t} + \ + * R_r \boldsymbol{y_{t-1}} + b_r)) + * + * Cell Memory State + * .. math:: + * \boldsymbol{c_t} = \ + * \boldsymbol{y_{t-1}} \odot \boldsymbol{r_t} + * + * Output Gate + * .. math:: + * \boldsymbol{o_t} = \ + * g(\mathrm{clip}(W_o \boldsymbol{x_t} + \ + * R_o \boldsymbol{c_t} + b_o)) + * + * Output + * .. math:: + * \boldsymbol{y_t} = \ + * (1 - \boldsymbol{z_t}) \odot \boldsymbol{o_t} + \ + * \boldsymbol{z_t} \odot \boldsymbol{y_{t-1}} + * + * - ``W_z``, ``W_r``, ``W_o`` are 2-dimensional input weight matrices + * (``[outputVectorSize, inputVectorSize]``, row-major) + * - ``R_z``, ``R_r``, ``R_o`` are 2-dimensional recursion matrices + * (``[outputVectorSize, outputVectorSize]``, row-major) + * - ``b_z``, ``b_r``, ``b_o`` are 1-dimensional bias vectors + * (``[outputVectorSize]``) + * - ``f()``, ``g()`` are activations + * - ``clip()`` is a function that constrains values between ``[-50.0, 50.0]`` + * - ``⊙`` denotes the elementwise product of matrices + */ +message GRULayerParams { + + uint64 inputVectorSize = 1; /// Size of the input vectors. + uint64 outputVectorSize = 2; /// Size of the output vectors. + + /** + * 2 element array representing activations [f(), g()] in that order. + * Typical values used = [sigmoid, tanh]. + * Activations supported are Linear, Sigmoid, Tanh, ReLU, Scaled Tanh (alpha = 1.71, beta = 2/3), Hard sigmoid (alpha = 0.2, beta = 0.5) + */ + repeated ActivationParams activations = 10; + + /** + * If false output is just the result after final state update. + * If true, output is a sequence, containing outputs at all time steps. + */ + bool sequenceOutput = 15; + + /** + * If false, no biases (``b_z``, ``b_r``, ``b_o``) are added. + */ + bool hasBiasVectors = 20; + + WeightParams updateGateWeightMatrix = 30; /// Weight Matrix W_z. + WeightParams resetGateWeightMatrix = 31; /// Weight Matrix W_r. + WeightParams outputGateWeightMatrix = 32; /// Weight Matrix W_o. + + WeightParams updateGateRecursionMatrix = 50; /// Recursion Weight Matrix R_z. + WeightParams resetGateRecursionMatrix = 51; /// Recursion Weight Matrix R_r. + WeightParams outputGateRecursionMatrix = 52; /// Recursion Weight Matrix R_o. + + WeightParams updateGateBiasVector = 70; /// Bias vector b_z. + WeightParams resetGateBiasVector = 71; /// Bias vector b_r. + WeightParams outputGateBiasVector = 72; /// Bias vector b_o. + + /// If true, then the node processes the input sequence from right to left + bool reverseInput = 100; + +} + +/** + * Long short-term memory (LSTM) parameters. + * + * This is described by the following equations: + * + * Input Gate + * .. math:: + * \boldsymbol{i_t} = \ + * f(\mathrm{clip}(W_i \boldsymbol{x_t} + \ + * R_i \boldsymbol{y_{t-1}} + \ + * p_i \odot c_{t-1} + b_i)) + * + * Forget Gate + * .. math:: + * \boldsymbol{f_t} = \ + * f(\mathrm{clip}(W_f \boldsymbol{x_t} + \ + * R_f \boldsymbol{y_{t-1}} + \ + * p_f \odot c_{t-1} + b_f)) + * + * Block Input + * .. math:: + * \boldsymbol{z_t} = \ + * g(\mathrm{clip}(W_z \boldsymbol{x_t} + \ + * R_z \boldsymbol{y_{t-1}} + b_z)) + * + * Cell Memory State + * .. math:: + * \boldsymbol{c_t} = \ + * \boldsymbol{c_{t-1}} \odot \boldsymbol{f_t} + \ + * \boldsymbol{i_t} \odot \boldsymbol{z_t} + * + * Output Gate + * .. math:: + * \boldsymbol{o_t} = \ + * f(\mathrm{clip}(W_o \boldsymbol{x_t} + \ + * R_o \boldsymbol{y_{t-1}} + \ + * p_o \odot c_t + b_o)) + * + * Output + * .. math:: + * \boldsymbol{y_t} = \ + * h(\boldsymbol{c_t}) \odot \boldsymbol{o_t} + * + * - ``W_i``, ``W_f``, ``W_z``, ``W_o`` are 2-dimensional input weight matrices + * (``[outputVectorSize, inputVectorSize]``, row-major) + * - ``R_i``, ``R_f``, ``R_z``, ``R_o`` are 2-dimensional recursion matrices + * (``[outputVectorSize, outputVectorSize]``, row-major) + * - ``b_i``, ``b_f``, ``b_z``, ``b_o`` are 1-dimensional bias vectors + * (``[outputVectorSize]``) + * - ``p_``, ``p_f``, ``p_o`` are 1-dimensional peephole vectors + * (``[outputVectorSize]``) + * - ``f()``, ``g()``, ``h()`` are activations + * - ``clip()`` is a function that constrains values between ``[-50.0, 50.0]`` + * - ``⊙`` denotes the elementwise product of matrices + */ +message LSTMParams { + + /** + * If true, output is a sequence, containing outputs at all time steps. + * If false, output is just the result after final state update. + */ + bool sequenceOutput = 10; + + /** + * If false, no biases (``b_i``, ``b_f``, ``b_z``, ``b_o``) are added. + */ + bool hasBiasVectors = 20; + + /** + * If true, a vector of ``1`` values is added to ``b_f``. + */ + bool forgetBias = 30; + + /** + * If true, peephole vectors are included. + */ + bool hasPeepholeVectors = 40; + + /** + * If the coupled Input and Forget flag is on, the behaviour of + * ``c_t`` is changed to the following (i.e. forget gate is not used): + * + * .. math:: + * \boldsymbol{c_t} = \ + * \boldsymbol{c_{t-1}} \odot (1 - \boldsymbol{i_t}) + \ + * \boldsymbol{i_t} \odot \boldsymbol{z_t} + * + */ + bool coupledInputAndForgetGate = 50; + + /** + * Places a limit on the maximum and minimum values of ``c_t``. + * c_t = min(c_t, cellClipThreshold) + * c_t = max(c_t, -cellClipThreshold) + * If 0, it is set to its default value = 50.0. + */ + float cellClipThreshold = 60; + +} + +/** + * Weights for long short-term memory (LSTM) layers + */ +message LSTMWeightParams { + + WeightParams inputGateWeightMatrix = 1; /// Weight Matrix W_i. + WeightParams forgetGateWeightMatrix = 2; /// Weight Matrix W_f. + WeightParams blockInputWeightMatrix = 3; /// Weight Matrix W_z. + WeightParams outputGateWeightMatrix = 4; /// Weight Matrix W_o. + + WeightParams inputGateRecursionMatrix = 20; /// Recursion Weight Matrix R_i. + WeightParams forgetGateRecursionMatrix = 21; /// Recursion Weight Matrix R_f. + WeightParams blockInputRecursionMatrix = 22; /// Recursion Weight Matrix R_z. + WeightParams outputGateRecursionMatrix = 23; /// Recursion Weight Matrix R_o. + + //biases: + WeightParams inputGateBiasVector = 40; /// Bias vector b_i. + WeightParams forgetGateBiasVector = 41; /// Bias vector b_f. + WeightParams blockInputBiasVector = 42; /// Bias vector b_z. + WeightParams outputGateBiasVector = 43; /// Bias vector b_o. + + //peepholes: + WeightParams inputGatePeepholeVector = 60; /// Peephole vector p_i. + WeightParams forgetGatePeepholeVector = 61; /// Peephole vector p_f. + WeightParams outputGatePeepholeVector = 62; /// Peephole vector p_o. + +} + +/** + * A unidirectional long short-term memory (LSTM) layer. + * + * .. code:: + * + * (y_t, c_t) = UniDirectionalLSTMLayer(x_t, y_{t-1}, c_{t-1}) + * + * Input + * A blob of rank 5, with shape `[Seq, Batch, inputVectorSize, 1, 1]``. + * This represents a sequence of vectors of size ``inputVectorSize``. + * Output + * Same rank as the input. + * Represents a vector of size ``outputVectorSize``. It is either the final output or a sequence of outputs at all time steps. + * + * - Output Shape: ``[1, Batch, outputVectorSize, 1, 1]`` , if ``sequenceOutput == false`` + * - Output Shape: ``[Seq, Batch, outputVectorSize, 1, 1]`` , if ``sequenceOutput == true`` + * + */ +message UniDirectionalLSTMLayerParams { + + uint64 inputVectorSize = 1; /// Size of the input vectors. + uint64 outputVectorSize = 2; /// Size of the output vectors. + + /** + * 3 element array representing activations [f(),g(),h()] in that order. + * Typical values used = [sigmoid, tanh, tanh]. + * Activations supported are Linear, Sigmoid, Tanh, ReLU, Scaled Tanh (alpha = 1.71, beta = 2/3), Hard sigmoid (alpha = 0.2, beta = 0.5) + */ + repeated ActivationParams activations = 10; + + LSTMParams params = 15; + + LSTMWeightParams weightParams = 20; /// Weights, biases and peepholes. + + /// If true, then the node processes the input sequence from right to left + bool reverseInput = 100; + +} + +/** + * Bidirectional long short-term memory (LSTM) layer + * + * .. code:: + * + * (y_t, c_t, y_t_reverse, c_t_reverse) = BiDirectionalLSTMLayer(x_t, y_{t-1}, c_{t-1}, y_{t-1}_reverse, c_{t-1}_reverse) + * + * Input + * A blob of rank 5, with shape `[Seq, Batch, inputVectorSize, 1, 1]``. + * This represents a sequence of vectors of size ``inputVectorSize``. + * Output + * Same rank as the input. + * Represents a vector of size ``2 * outputVectorSize``. It is either the final output or a sequence of outputs at all time steps. + * + * - Output Shape: ``[1, Batch, 2 * outputVectorSize, 1, 1]`` , if ``sequenceOutput == false`` + * - Output Shape: ``[Seq, Batch, 2 * outputVectorSize, 1, 1]`` , if ``sequenceOutput == true`` + * + * + * The first LSTM operates on the input sequence in the forward direction. + * The second LSTM operates on the input sequence in the reverse direction. + * + * Example: given the input sequence ``[x_1, x_2, x_3]``, + * where ``x_i`` are vectors at time index ``i``: + * + * The forward LSTM output is ``[yf_1, yf_2, yf_3]``, + * + * where ``yf_i`` are vectors of size ``outputVectorSize``: + * + * - ``yf_1`` is the output at the end of sequence {``x_1``} + * - ``yf_2`` is the output at the end of sequence {``x_1``, ``x_2``} + * - ``yf_3`` is the output at the end of sequence {``x_1``, ``x_2``, ``x_3``} + * + * The backward LSTM output: ``[yb_1, yb_2, yb_3]``, + * + * where ``yb_i`` are vectors of size ``outputVectorSize``: + * + * - ``yb_1`` is the output at the end of sequence {``x_3``} + * - ``yb_2`` is the output at the end of sequence {``x_3``, ``x_2``} + * - ``yb_3`` is the output at the end of sequence {``x_3``, ``x_2``, ``x_1``} + * + * Output of the bi-dir layer: + * + * - if ``sequenceOutput = True`` : { ``[yf_1, yb_3]``, ``[yf_2, yb_2]``, ``[yf_3, yb_1]`` } + * - if ``sequenceOutput = False`` : { ``[yf_3, yb_3]`` } + */ +message BiDirectionalLSTMLayerParams { + + /** + * Size of the input vectors. + */ + uint64 inputVectorSize = 1; + /** + * Size of the outputs vectors. + * It is same for both forward and backward LSTMs. + */ + uint64 outputVectorSize = 2; + + /** + * 3 element array representing activations [f(),g(),h()] in that order. + * Typical values used = [sigmoid, tanh, tanh]. + * Activations supported are Linear, Sigmoid, Tanh, ReLU, Scaled Tanh (alpha = 1.71, beta = 2/3), Hard sigmoid (alpha = 0.2, beta = 0.5) + */ + repeated ActivationParams activationsForwardLSTM = 10; + /** + * Currently, backward LSTM activations + * must be same as the ones for the forward LSTM. + */ + repeated ActivationParams activationsBackwardLSTM = 11; + + /** + * Common parameters shared by the forward and backward LSTMs. + */ + LSTMParams params = 15; + + /** + * Weights and biases. + * Must be a length 2 message, + * for the forward and backward LSTM respectively. + */ + repeated LSTMWeightParams weightParams = 20; + +} + +message CustomLayerParams { + + message CustomLayerParamValue { + oneof value { + double doubleValue = 10; + string stringValue = 20; + int32 intValue = 30; + int64 longValue = 40; + bool boolValue = 50; + } + } + + string className = 10; // The name of the class (conforming to MLCustomLayer) corresponding to this layer + repeated WeightParams weights = 20; // Any weights -- these are serialized in binary format and memmapped at runtime + map parameters = 30; // these may be handled as strings, so this should not be large + string description = 40; // An (optional) description of the layer provided by the model creator. This information is displayed when viewing the model, but does not affect the model's execution on device. + +} + +/** + * A layer that rearranges the dimensions and data of an input. + * + * .. code:: + * + * y = TransposeLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * A N-Dimensional tensor. + * Output + * A N-Dimensional tensor of the same rank but with dimensions and data permuted according to axes. + * Shape: ``[InputShape[axis[0]], InputShape[axis[1]], ... , InputShape[axis[N-1]]]`` + * + * Examples: + * + * - If ``axes`` is set to ``[3, 1, 2, 0]`` and the input shape is ``[6,7,8,9]``, + * then the output has shape ``[9,7,8,6]`` + */ + +message TransposeLayerParams { + + /** + * Length of "axes" should match the rank of input & output tensor + * "axes" should be a permutation of "[0,1,2,...,N-1]" where N is the rank. + */ + repeated uint64 axes = 1; // + +} + +/** + * A layer that computes the matrix multiplication of two tensors with numpy-like broadcasting + * where the matrices reside in the last two indices of the tensor. + * + * .. code:: + * + * y = BatchedMatMul(a,b) + * + * Requires 1 or 2 inputs and produces 1 output. + * + * The first tensor, "a", must be provided as an input. The second tensor can either be an input or provided as a weight matrix parameter. + * + * Input + * - a: First N-Dimensional tensor + * - b: Second N-Dimensional tensor (either a rank-N input or a matrix, i.e. N=2, provided as a layer parameter) + * + * Output + * A tensor containing the matrix product of two tensors. + * When there are two inputs: rank is max(2, rank(a), rank(b)) + * When there is one input: rank is same as that of the input. + * + * This operation behaves as following: + * + * When there are two inputs: + * - If N >= 2 for both tensors, it is treated as a batch of matrices residing in the last two indices. + * All the indices, except for the last two, are broadcasted using conventional rules. + * - If the first tensor is 1-D, it is converted to a 2-D tensor by prepending a 1 to its shape. Eg. (D) -> (1,D) + * - If the second tensor is 1-D, it is converted to a 2-D tensor by appending a 1 to its shape. Eg. (D) -> (D,1) + * + * When there is one input: + * - The weight matrix corresponds to a matrix, of shape (X1, X2). Values of X1, X2 must be provided as layer parameters. + * - The input, "a", is reshaped into a matrix by combining all the leading dimensions, except the last, into a batch dimension. eg: + * - if "a" is rank 1 (X1,) --> (1, X1). Output shape will be (X2,) + * - if "a" is rank 2 (B1, X1) --> no need to reshape. Output shape will be (B1, X2) + * - if "a" is rank 3 (B1, B2, X1) --> (B1 * B2, X1). Output shape will be (B1, B2, X2) + * - etc + */ +message BatchedMatMulLayerParams { + + /** + * If transposeA is true, it transposes the left matrix on the fly before matrix multiplication. + * (is ignored when there is one input) + */ + bool transposeA = 1; + /** + * If transposeB is true, it transposes the right matrix on the fly before matrix multiplication. + * (is ignored when there is one input) + */ + bool transposeB = 2; + + /* + * Following parameters are ignored when there are two inputs. + */ + + uint64 weightMatrixFirstDimension = 5; /// X1: same as the last dimension of the input tensor + uint64 weightMatrixSecondDimension = 6; /// X2: same as the last dimension of the output tensor + + bool hasBias = 7; /// Whether a bias is added or not. Supported only when there is one input. + + /* + * Weight matrix representing shape [X1, X2]. + * Values are however stored in column major order, + * in the "repeated float" or "bytes" fields of the message "WeightParams" + */ + WeightParams weights = 8; + WeightParams bias = 9; /// Bias vector [X2]. Supported only when there is one input. + + /** + * If set, this layer, at runtime, quantizes the floating point input blob to int8 before applying the + * matrix multiplication using the INT8 weight parameters provided in weights->int8RawValue. The + * result is then dequantized. + * Requires: + * * number of inputs to be 1 + * * hasBias == false + * * QuantizationType == LinearQuantizationParams, such that + * * size of the "scale" field is 1 and "bias" field is empty in "LinearQuantizationParams" + * * numberOfBits == 8 + * * weights->rawValue_size to be empty + */ + bool int8DynamicQuantize = 10; + +} + +/** + * A layer that concatenates a list of tensors along a specified axis. + * + * .. code:: + * + * y = ConcatNDLayer(x1,x2,....) + * + * Requires at least 2 input and produces 1 output. + * + * Input + * The rank of the input tensors must match and all dimensions also must match, except for the dimension 'axis'. + * + * + * Output + * Same rank as the input. The dimension along "axis", is the sum of the dimensions of the inputs. + * + * example: + * + * in1 : shape (3, 2), value = [[1, 2], [3, 4], [5, 6]] + * in2 : shape (3, 2), value = [[7, 8], [9, 10], [11, 12]] + * axis = 0 + * + * if interleave = False (default) + * output : shape (6, 2) + * output[0:3, :] = in1 + * output[3:6, :] = in2 + * value = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]] + * + * if interleave = True + * output : shape (6, 2) + * output[0::2, :] = in1 + * output[1::2, :] = in2 + * value = [[1, 2], [7, 8], [3, 4], [9, 10], [5, 6], [11, 12]] + * + */ +message ConcatNDLayerParams { + + /** + * Dimension along which to concatenate. Supports negative values of the parameter 'axis'. + */ + int64 axis = 1; + + /** + * (Only available in Core ML Specification >= 5 (iOS >= 14, macOS >= 11.0) + * Interleave option. If True, concatenation is done via interleaving the inputs. + * This requires all inputs to have the exact same shape. + */ + bool interleave = 2; + + +} + +/** + * A layer that performs softmax normalization along a specified axis. + * + * .. code:: + * + * y = SoftmaxNDLayer(x) + * + * Requires 1 input and produces 1 output. + * + * Output shape is same as the input. + */ +message SoftmaxNDLayerParams { + + /** + * Dimension on which the softmax would be performed. Supports negative values of the parameter 'axis'. + */ + int64 axis = 1; + +} + +/** + * A layer that reverses specific dimensions of the input tensor. + * It is similar in functionality to the numpy.flip method. + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + */ +message ReverseLayerParams { + + /** + * Reverses each dimension of the input tensor for which corresponding reverseDim is set to True. + * Requires len(reverseDim) == rank(inputTensor) + */ + repeated bool reverseDim = 1; + +} + +/** + * A layer that reverses variable length slices. + * + * Requires 2 inputs and produces 1 output. + * + * 2 inputs, in order are denoted by "data", "seq_lengths". + * "seq_lenghts" must be a rank 1 tensor, i.e. seq_lengths.shape = (B,) + * which contains the lengths of the amount of sequence to be reversed, for each element of the batch. + * Dimension "batchAxis" in "data" must be equal to B, i.e, + * data.shape[batchAxis] = B. + * + * According to the batch axis, input "data" is first divided into a batch of B inputs, + * each of which is flipped along the dimension "sequenceAxis", by the amount specified in + * "seq_lengths", the second input. + * + * e.g.: + * + * data [shape = (2,4)]: + * [0 1 2 3] + * [4 5 6 7] + * seq_lengths [shape = (2,)]: + * [3, 0] + * batchAxis = 0 + * sequenceAxis = 1 + * + * output [shape = (2,4)]: + * [2 1 0 3] + * [4 5 6 7] + * + * + * data [shape = (2,3,2)]: + * [0 1] + * [2 3] + * [4 5] (slice = 0) + * [6 7] + * [8 9] + * [10 11] (slice = 1) + * seq_lengths [shape = (2,)]: + * [2, 3] + * batchAxis = 0 + * sequenceAxis = 1 + * + * output [shape = (2,3,2)]: + * [2 3] + * [0 1] + * [4 5] (slice = 0) + * [10 11] + * [8 9] + * [6 7] (slice = 1) + * + * Output shape is same as the input. + */ +message ReverseSeqLayerParams { + + int64 batchAxis = 1; // batch axis has to be strictly less than seq_axis + int64 sequenceAxis = 2; + +} + +/** + * A layer that loads data as a parameter and provides it as an output. + * + * .. code:: + * + * y = LoadConstantNDLayer() + * + * Requires no input and produces 1 output. + * + * Output: A tensor with shape as provided in the parameter "shape" + */ +message LoadConstantNDLayerParams { + + /** + * The shape of the constant to be loaded. + */ + repeated uint64 shape = 1; + WeightParams data = 2; + +} + +/** + * A layer that generates an output tensor with a constant value. + * Input is only used to determine the shape of the output. + * This layer is used to allocate a tensor with a dynamic shape (that of the input) and constant value. + * + * Requires 1 input and produces 1 output. + * + * .. code:: + * + * y = FillLikeLayer(x) + * + * Input + * A N-Dimensional tensor, whose values are ignored. Only the shape is used to + * infer the shape of the output. + * + * Output + * A N-Dimensional tensor with the same shape as the input tensor. + * + */ +message FillLikeLayerParams { + + float value = 1; + +} + +/** + * A layer that generates an output tensor with a constant value. + * This layer is used to allocate a tensor with a static shape and constant value. + * + * Requires no input and produces 1 output. + * + * .. code:: + * + * y = FillStaticLayer(x) + * + * Output + * A N-Dimensional tensor of shape "targetShape". + * + */ +message FillStaticLayerParams { + + float value = 1; + repeated uint64 targetShape = 2; + +} + +/** + * A layer that generates an output tensor with a constant value. + * This layer is used to allocate a tensor with a dynamic shape (as specified by the input) and constant value. + * + * Requires 1 input and produces 1 output. + * + * .. code:: + * + * y = FillDynamicLayer(x) + * + * Input + * A rank 1 tensor specifying the shape of the output + * + * Output + * An N-Dimensional tensor with the shape specified by the values in the input tensor. + * + */ +message FillDynamicLayerParams { + + float value = 1; + +} + +/** + * A layer that returns the elements either from tensor x or tensor y, + * depending on the value in the condition tensor. + * It is similar in functionality to the numpy.where method with 3 inputs. + * + * Requires 3 inputs and produces 1 output. + * Inputs, in order, are the condition tensor, x and y. + * + * for each vector index (i,...,j): + * output[i,...,j] = x[i,...,j] if condition[i,...,j] = True + * y[i,...,j] if condition[i,...,j] = False + * + * All the 3 inputs are first broadcasted to a common shape. + * (the shapes must be broadcastable) + * + * output.rank = max(input[0].rank, input[1].rank, input[2].rank) + * + */ +message WhereBroadcastableLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric sine function. + * + * + * .. code:: + * + * y = SinLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message SinLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric cosine function. + * + * + * .. code:: + * + * y = CosLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message CosLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric tangent function. + * + * + * .. code:: + * + * y = TanLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message TanLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric arcsine function. + * + * + * .. code:: + * + * y = AsinLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message AsinLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric arccosine function. + * + * + * .. code:: + * + * y = AcosLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message AcosLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric arctangent function. + * + * + * .. code:: + * + * y = AtanLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message AtanLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric hyperbolic sine function. + * + * + * .. code:: + * + * y = SinhLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message SinhLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric hyperbolic cosine function. + * + * + * .. code:: + * + * y = CoshLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message CoshLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric hyperbolic tangent function. + * + * + * .. code:: + * + * y = TanhLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message TanhLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric hyperbolic arcsine function. + * + * + * .. code:: + * + * y = AsinhLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message AsinhLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric hyperbolic arccosine function. + * + * + * .. code:: + * + * y = AcoshLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message AcoshLayerParams { + +} + +/** + * A layer that computes elementwise trigonometric hyperbolic arctangent function. + * + * + * .. code:: + * + * y = AtanhLayer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message AtanhLayerParams { + +} +/** + * A layer that raises each element in first tensor to the power of + * corresponding element in the second tensor. + * Supports conventional numpy-like broadcasting. + * + * .. code:: + * + * y = PowBroadcastableLayer(x) + * + * Requires 2 inputs and produces 1 output. + * + * Input + * - First N-Dimensional tensor + * - Second N-Dimensional tensor + * + * Output + * An N-Dimensional tensor with the broadcast shape. + * + */ +message PowBroadcastableLayerParams { + +} + +/** + * A layer that computes the exponential of all elements in the input tensor, with the base 2. + * + * + * .. code:: + * + * y = Exp2Layer(x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message Exp2LayerParams { + +} + +/** + * A layer that returns a tensor containing the indices of all non-zero + * elements of input tensor. + * It is similar in functionality to the numpy.where method with 1 input. + * + * Requires 1 input and produces 1 output. + * Output is of rank 2, of shape (N,R), + * where N is the number of non-zero elements in the input and R is the rank of the input. + * + * Output contains indices represented in the multi-index form + * + * e.g.: + * input {shape = (4,)}: + * [0 1 0 2] + * output {shape = (2,1)}: + * [1] + * [3] + * + * + * input {shape = (3, 3)}: + * [1 2 1] + * [0 2 2] + * [2 1 0] + * output {shape = (7,1)}: + * [0. 0.] + * [0. 1.] + * [0. 2.] + * [1. 1.] + * [1. 2.] + * [2. 0.] + * [2. 1.] + * + */ +message WhereNonZeroLayerParams { + +} + +/** + * A layer that copies a tensor setting everything outside a central band in + * each inner-most matrix to zero. + * + * Requires 1 input and produces 1 output. + * + * Parameters for matrix_band_part layer + * band(m, n) = (num_lower < 0 || (m-n) <= num_lower) && (num_upper < 0 || (n-m) <= num_upper). + * output[i, j, k, ..., m, n] = band(m, n) * input[i, j, k, ..., m, n] + * + * + * Output shape is same as the input shape. + * Rank of the input must be at least 2. + * For rank higher than 2, the last 2 dimensions are treated as the matrix, while the rest are treated as batch. + */ +message MatrixBandPartLayerParams { + + int64 numLower = 1; + int64 numUpper = 2; + +} + +/** + * A layer that copies a tensor setting everything outside upper triangular to zero. + * + * Requires 1 input and produces 1 output. + * + * Output shape is same as the input shape. + * Rank of the input must be at least 2. + * For rank higher than 2, the last 2 dimensions are treated as the matrix, while the rest are treated as batch. + */ +message UpperTriangularLayerParams { + + int64 k = 1; // Diagonal below which to zero elements. k = 0 (the default) is the main diagonal, k < 0 is below it and k > 0 is above + +} + +/** + * A layer that copies a tensor setting everything outside lower triangular to zero. + * + * Requires 1 input and produces 1 output. + * + * Output shape is same as the input shape. + * Rank of the input must be at least 2. + * For rank higher than 2, the last 2 dimensions are treated as the matrix, while the rest are treated as batch. + */ +message LowerTriangularLayerParams { + + int64 k = 1; // Diagonal above which to zero elements. k = 0 (the default) is the main diagonal, k < 0 is below it and k > 0 is above + +} + +/** + * + * A layer that broadcasts a tensor to a new shape. + * + * Requires 2 inputs and produces 1 output. + * + * First input is broadcast to produce the output, while the second input is only + * used to determine the shape of the output. Values of second input are not used. + * + * Output is a tensor with the same shape as the second input. + * + */ +message BroadcastToLikeLayerParams { + +} + +/** + * + * A layer that broadcasts a tensor to a new shape. + * + * Requires 1 input and produces 1 output. + * + * Output tensor is the broadcasted version of the input and has shape as specified in the + * parameter "targetShape". + */ +message BroadcastToStaticLayerParams { + + repeated uint64 targetShape = 1; + +} + +/** + * + * A layer that broadcasts a tensor to a new shape. + * + * Requires 2 inputs and produces 1 output. + * + * First input is the one that is broadcasted to produce the output. + * Second input is a rank 1 tensor specifying the shape of the output. + * Output tensor has shape as specified by the values in the 2nd input tensor. + */ +message BroadcastToDynamicLayerParams { + +} + +/** + * A layer that performs element-wise addition operation with broadcast support. + * + * Requires 2 inputs and produces 1 output. + */ +message AddBroadcastableLayerParams { + +} + +/** + * A layer that performs element-wise maximum operation with broadcast support. + * + * Requires 2 inputs and produces 1 output. + */ +message MaxBroadcastableLayerParams { + +} + +/** + * A layer that performs element-wise minimum operation with broadcast support. + * + * Requires 2 inputs and produces 1 output. + */ +message MinBroadcastableLayerParams { + +} + +/** + * A layer that performs element-wise modular operation with broadcast support. + * + * Requires 2 inputs and produces 1 output. + */ +message ModBroadcastableLayerParams { + +} + +/** + * A layer that performs element-wise floor division operation with broadcast support. + * + * Requires 2 inputs and produces 1 output. + */ +message FloorDivBroadcastableLayerParams { + +} + +/** + * A layer that performs element-wise subtract operation with broadcast support. + * + * Requires 2 inputs and produces 1 output. + */ +message SubtractBroadcastableLayerParams { + +} + +/** + * A layer that performs element-wise multiply operation with broadcast support. + * + * Requires 2 inputs and produces 1 output. + */ +message MultiplyBroadcastableLayerParams { + +} + +/** + * A layer that performs element-wise division operation with broadcast support. + * + * Requires 2 inputs and produces 1 output. + */ +message DivideBroadcastableLayerParams { + +} + +/** + * Gather layer that gathers elements from the first input, along a specified axis, + * at indices specified in the second input. + * It is similar in functionality to the numpy.take method. + * + * Requires 2 inputs and produces 1 output. + * + * Given two inputs, 'data' and 'indices', gather the slices of 'data' + * and store into output. + * e.g. + * for i in [0, length(indices) - 1] + * output[i] = data[indices[i]] (1-D case, axis=0) + * + * if axis = 0: + * for each vector index (i,...,j) + * output[i,...,j,:,..,:] = data[indices[i,...,j],:,..,:] + * + * output.rank = (data.rank - 1) + indices.rank + * + * Negative indices and negative axis are supported. + * + * e.g: + * + * data shape = (2, 3) + * indices shape = (6, 8) + * axis = 0 + * output shape = (6, 8) + (3,) = (6, 8, 3) + * + * data shape = (2, 3, 5) + * indices shape = (6, 8) + * axis = 1 + * output shape = (2,) + (6, 8) + (5,) = (2, 6, 8, 5) + * + */ +message GatherLayerParams { + + int64 axis = 1; + +} + +/* + * Scatter accumulation mode. + */ +enum ScatterMode { + + SCATTER_UPDATE = 0; + SCATTER_ADD = 1; /// add + SCATTER_SUB = 2; /// subtract + SCATTER_MUL = 3; /// multiply + SCATTER_DIV = 4; /// divide + SCATTER_MAX = 5; /// maximum + SCATTER_MIN = 6; /// minimum + +} + +/* + * A layer that scatters data into a new tensor according to indices from the input. + * This is the inverse operation of Gather. + * + * Requires 3 inputs and produces 1 output. + * + * Output is initialized with the first input. + * Then updated with the values in the third input, at indices specified by the second input. + * + * An example when axis=0: + * Given three inputs, in order, "container", "indices", "updates", where + * + * - "container" is a rank R+1 tensor of shape [D_0, D_1, ..., D_R], which + * contains D_0 number of tensors, each with shape [D_1, ..., D_R]. + * + * - "indices" is a rank 1 tensor with shape [N], where N is the number of updates. + * The values in this tensor must be in the range [0, D_0 - 1]. (negative indexing is supported) + * + * - "updates" is a rank R+1 tensor with shape [N, D_1, ..., D_R], which represents + * a total number of N tensors, each of shape [D_1, ..., D_R]. + * + * The effect of this operation is as follows: + * + * output = container; + * For each i in 0, ..., N - 1 + * output[indices[i], :, ..., :] = updates[i, :, ..., :] // if mode == "SCATTER_UPDATE" + * + * or + * For each i in 0, ..., N - 1 + * output[indices[i], :, ..., :] += updates[i, :, ..., :] // if mode == "SCATTER_ADD" + * + * etc + * + * When "indices" is a tensor of rank greater than 1, the equation becomes (for axis=0): + * For each vector index (i,...,j) + * output[indices[i,...,j],...] -= updates[i,...,j,...] // if mode == "SCATTER_SUB" + * + * + * The output has the same shape as the first input. + * "indices" input must have rank less than or equal to the "updates" input and its shape + * must be a subset of the the shape of the "updates" input. + * + * e.g: + * + * container shape = (4, 3) + * indices shape = (5, 2, 3) + * updates shape = (4, 5, 2, 3) + * axis = 1 + * output shape = (4, 3) + * + * container shape = (4, 4, 3) + * indices shape = (6,) + * updates shape = (4, 6, 3) + * axis = -2 + * output shape = (4, 4, 3) + * + * container shape = (5,) + * indices shape = (5, 7, 5, 6) + * updates shape = (5, 7, 5, 6) + * axis = -1 + * output shape = (5,) + */ + +message ScatterLayerParams { + + int64 axis = 1; + ScatterMode mode = 2; /// mode of accumulation. + +} + +/** + * A layer that gathers elements from the first input, 'params', at the multi-indices specified + * by the second input, 'indices'. + * + * Requires 2 inputs and produces 1 output. + * + * 'params' = input[0], 'indices' = input[1] + * + * 'indices' is a rank K+1 tensor of shape [I_0, I_1, .., I_(K-1), I_K] which is viewed as a collection of + * indices of (I_0 * I_1 * ... * I_(K-1)) points in the I_K dimensional space. For instance, the multi-index of the first point + * is indices[0,0,...,0,:]. + * + * Here is how the output is constructed: + * + * for i = 0,1,...,(I_0-1) + * ... + * for j = 0,1,....,(I_(K-1)-1) + * output[i,....,j,:,:,..,:] = params[indices[i,...,j,:], :,:,..,:] + * + * Hence, output shape is [I_0, I_1,...,I(K-1)] + params.shape[I_K:] + * + * output.rank = indices.rank - 1 + params.rank - indices.shape[-1] + * + * e.g: + * + * input[0] shape = (4, 2, 3, 4) + * input[1] shape = (6, 2) + * output shape = (6,) + (3, 4) = (6, 3, 4) + * + * input[0] shape = (3, 3, 3, 4, 7) + * input[1] shape = (3, 5) + * output shape = (3,) + () = (3,) + * + * input[0] shape = (5, 3, 2, 5) + * input[1] shape = (2, 7, 3, 2) + * output shape = (2, 7, 3) + (2, 5) = (2, 7, 3, 2, 5) + * + */ +message GatherNDLayerParams { + +} + +/* + * A layer that scatters data into a new tensor according to multi-indices from the input. + * This is the inverse operation of GatherND. + * + * Requires 3 inputs and produces 1 output. + * 3 inputs, in order are denoted as "container", "indices", "updates". + * + * 'indices' is a rank K+1 tensor of shape [I_0, I_1, .., I_(K-1), I_K] which is viewed as a collection of + * indices of (I_0 * I_1 * ... * I_(K-1)) points in the I_K dimensional space. For instance, the multi-index of the first point + * is indices[0,0,...,0,:]. + * + * container.rank >= I_K + * updates.rank = K + (container.rank - I_K) + * shape of 'updates' = [I_0, I_1,...,I(K-1)] + container.shape[I_K:] + * + * output = container + * For each vector index (i,...,j) s.t. 0<=i shape: (3,) + * reps = N/A [Ignored] + * output shape = (2, 8, 12) + * + */ +message TileLayerParams { + + repeated uint64 reps = 1; + +} + +/** + * A layer that returns the shape of an input tensor. + * + * Requires 1 input and produces 1 output. + * + * Input: a tensor. + * Output: a vector of length R, where R is the rank of the input tensor + * Output is always a rank 1 tensor. + */ +message GetShapeLayerParams { + +} + +/** + * A layer that computes the Gauss error function, + * which is defined as: + * + * .. math:: + * f(x) = \dfrac{1}{\sqrt{\pi}}\int_{-x}^{x}{e^{-t^2}dt} + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + */ +message ErfLayerParams { + +} + +/** + * A layer that evaluates the Gaussian Error Linear Unit (GELU) activation. + * Following equations are used to compute the activation based on the value of the "mode" parameter: + * + * mode == 'EXACT': + * .. math:: + * f(x) = 0.5x\left ( 1+\rm{erf}\left ( \frac{x}{\sqrt{2}} \right ) \right ) + * + * mode == 'TANH_APPROXIMATION': + * .. math:: + * f(x) = 0.5x\left ( 1+\rm{tanh}\left ( \sqrt{2/\pi}\left ( x + 0.044715x^3 \right ) \right ) \right ) + * + * mode == 'SIGMOID_APPROXIMATION': + * .. math:: + * f(x) = x*\rm{sigmoid}(1.702x) + * + * Requires 1 input and produces 1 output. + * Output shape is same as the input. + * + */ +message GeluLayerParams { + + enum GeluMode { + + EXACT = 0; + TANH_APPROXIMATION = 1; + SIGMOID_APPROXIMATION = 2; + + } + + GeluMode mode = 1; /// mode of GELU operation. + +} + +/** + * RangeStatic layer that returns a tensor that contains evenly spaced values. + * It is similar in functionality to the numpy.arange method. + * + * Requires no input and produces 1 output. + * Output is a rank 1 tensor. + */ +message RangeStaticLayerParams { + + float endValue = 1; + float startValue = 2; + float stepSizeValue = 3; + +} + +/** + * A layer that returns a tensor that contains evenly spaced values. + * Its functionality is similar to the numpy.arange method. + * + * Requires at least 1 input, up to a maximum of 3 inputs. + * Produces 1 output, which is a rank 1 tensor. + * + * Each input must be a scalar, or rank 1 and shape (1,). + * + * The first input represents the "endValue". + * The second input, if present, corresponds to "startValue". In this case the value of the "startValue" parameter is ignored. + * The third input, if present, corresponds to "stepSizeValue". In this case the value of the "stepSizeValue" parameter is ignored. + * + */ +message RangeDynamicLayerParams { + + float startValue = 2; + float stepSizeValue = 3; + +} + +/** + * A layer that returns a tensor containing all windows of size ``windowSize`` + * separated by ``step`` along the dimension ``axis``. + * + * .. code:: + * + * y = SlidingWindows(x) + * + * Requires 1 input and produces 1 output. + * + * Input + * An N-Dimensional tensor. + * + * Output + * An (N+1)-Dimensional tensor. + * + * This operation behaves as following: + * - if axis = 0 & input is rank 1 (L,). Output shape will be (M, W). + * - if axis = 1 & input is rank 3 (B1, L, C1). Output shape will be (B1, M, W, C1) + * - if axis = 2 & input is rank 5 (B1, B2, L, C1, C2) --> (B1 * B2, L, C1 * C2) --> (B1 * B2, M, W, C1 * C2). Output shape will be (B1, B2, M, W, C1, C2) + * - etc. + * where + * - L, C, B refer to input length, feature dimension length & batch size respectively + * - W is the window size. + * - M is the number of windows/slices calculated as M = (L - W) / step + 1 + */ +message SlidingWindowsLayerParams { + + int64 axis = 1; + uint64 windowSize = 2; + uint64 step = 3; + +} + +/** + * A layer that applies layer normalization over the input tensor. + * + * Requires 1 input and produces 1 output. + * + * output = gamma * (input - computed_mean) / (sqrt(computed_variance + eps)) + beta + * + * Parameters + * normalizedShape: subset of the input shape, along with layer norm is performed, rest of the input shape is treated as the batch dimension. The mean and variance are computed for the input, over the last few dimensions as specified by the normalizedShape parameter. + * gamma: must have shape = "normalizedShape" + * beta: must have shape = "normalizedShape" + * eps: small constant to avoid division by 0 + * + * Output shape is same as the input. + * + * e.g.: + * input shape = (10,5) + * normalized shape = (5,) or (10,5) + * + * input shape = (10,5,6,7) + * normalized shape = (7,) or (6,7) or (5,6,7) or (10,5,6,7) + */ +message LayerNormalizationLayerParams { + + repeated int64 normalizedShape = 1; + float eps = 2; + WeightParams gamma = 3; + WeightParams beta = 4; + +} + +/** + * Non maximum suppression (NMS) layer. + * Applies the non maximum suppression algorithm to input bounding box coordinates. + * The effect of this layer is similar to the functionality of the "NonMaximumSuppression" + * model type (for details please see NonMaximumSuppression.proto) with a couple of differences. + * One, this is a layer in a neural network model, whereas that is a different model type. Second, + * this layer supports a batch of bounding boxes. + * + * The NMS layer requires at least 2 inputs, and up to a maximum of 5 inputs. It produces 4 outputs. + * Following is the description of inputs and outputs: + * + * input 1, shape (B,N,4): coordinates of N boxes, for a batch size B. + * input 2, shape (B,N,C): class scores for each box. C can be 1 when there is only 1 score per box, i.e., no class specific score. + * + * input 3, optional, shape (1,): IoU threshold. When present, it overwrites the value provided in layer parameter "iouThreshold". + * input 4, optional, shape (1,): Score threshold. When present, it overwrites the value provided in layer parameter "scoreThreshold". + * input 5, optional, shape (1,): Maximum number of boxes. When present, it overwrites the value provided in layer parameter "maxBoxes". + * + * output 1, shape (B,maxBoxes,4): box coordinates, corresponding to the surviving boxes. + * output 2, shape (B,maxBoxes,C): box scores, corresponding to the surviving boxes. + * output 3, shape (B,maxBoxes): indices of the surviving boxes. Hence it will have values in the range [0,N-1], except for padding. + * output 4, shape (B,): number of boxes selected after the NMS algorithm, for each batch. + * + * When surviving boxes are less than "maxBoxes", the first 3 outputs are padded. + * For the first two outputs, the padding is done using values 0, whereas for the third output the + * padding value used is -1, since the output values represent indices. + * + * If no box survives, that is, all the scores are below the "scoreThreshold", + * then for that batch, number of boxes (value of the fourth output) will be 1. The first 3 outputs will + * correspond to the box with the highest score. This is to avoid generating an "empty" output. + * + * The four values that describe the box dimensions are (in order): + * + * - x (center location of the box along the horizontal axis) + * - y (center location of the box along the vertical axis) + * - width (size of box along the horizontal axis) + * - height (size of box on along the vertical axis) + * + * In each batch, + * the N scores for N boxes, used for suppression, are generated by taking the max of the matrix (N,C) + * along the columns. + * If "perClassSuppression" flag is false, suppression happens across all classes. + * If "perClassSuppression" flag is true, each box is assigned to the class with the highest + * score and then the suppression happens separately for boxes within the same class. + * + * Note that the 4th output can be used to dynamically slice the first 3 outputs, in case + * the padded outputs are not required. + * + */ +message NonMaximumSuppressionLayerParams { + /** + * The intersection over union (IoU) threshold over which boxes are suppressed. + */ + float iouThreshold = 1; + + /** + * Before IoU suppression is performed, boxes with class scores below this threshold are rejected. + */ + float scoreThreshold = 2; + + /** + * The maximum number of boxes to be given out as output. + * If the number of surviving boxes are less, output is padded up to this number. + */ + uint64 maxBoxes = 3; + + /** + * If true, suppression is performed independently within boxes of each class. + */ + bool perClassSuppression = 4; +} + +/** + * A layer that performs element-wise clamped ReLU operation. + * + * Requires 1 input and produces 1 output. + * + * This function has the following formula: + * + * .. math:: + * f(x) = \begin{cases} + * \text{min}(\text{beta},x) \;\; \text{if} \;\; x \geq 0\\ + * \text{min}(\text{beta} ,\text{alpha}\cdot x) \;\; \text{if} \;\; x<0 + * \end{cases} + * + * Output shape is same as the input. + * + * Available (iOS >= 14, macOS >= 11.0, watchOS >= 7) + */ +message ClampedReLULayerParams { + + float alpha = 1; + float beta = 2; + +} + +/** +* A layer that returns the indices that would sort the input tensor, along a specified axis. +* +* Requires 1 input and produces 1 output. +* +* Output has the same rank and shape as the input. +* +* Value of "axis" must be positive and less than the rank of the input. +* +* e.g.: +* +* input shape = (5,) +* axis = 0 +* input values = [3.1, 5.4, 32.9, 3.2, 77.0] +* output shape = (5,) +* output values = [0, 3, 1, 2, 4], descending = False +* output values = [4, 2, 1, 3, 0], descending = True +* +* input shape = (2,3) +* axis = 1 +* input values = [[3, 5, 32], [3, 77, 6]] +* output shape = (2,3) +* output values = [[0, 1, 2], [0, 2, 1]], descending = False +* output values = [[2, 1, 0], [1, 2, 0]], descending = True +* +*/ +message ArgSortLayerParams { + + int64 axis = 1; /// must be between [0, input_rank - 1] + bool descending = 2; + +} + +/** + * A layer that does slice operation by providing size to be extracted + * from the given input tensor. + * + * Requires 2 inputs and produces 1 output. + * Rank of the output is same as the rank of the first input. + * + * The 1st input represents the tensor to be sliced. + * The 2nd input represents the beginning index to be sliced from. + * + * Example: + * Input 1: x (x.shape = (2, 3, 4)) + * Input 2: begin + * size: 2 + * axis: 1 + * + * Output: x[:, begin:begin+2, :] + * + */ +message SliceBySizeLayerParams { + + int64 size = 2; + int64 axis = 3; + +} + + +/// Neural Network Specializations +/// ------------------------------ + +/** + * A neural network specialized as a classifier. + */ +message NeuralNetworkClassifier { + + repeated NeuralNetworkLayer layers = 1; + repeated NeuralNetworkPreprocessing preprocessing = 2; + + // use this enum value to determine the input tensor shapes to the neural network, for multiarray inputs + NeuralNetworkMultiArrayShapeMapping arrayInputShapeMapping = 5; + + // use this enum value to determine the input tensor shapes to the neural network, for image inputs + NeuralNetworkImageShapeMapping imageInputShapeMapping = 6; + + NetworkUpdateParameters updateParams = 10; + + // The set of labels for every possible class. + oneof ClassLabels { + StringVector stringClassLabels = 100; + Int64Vector int64ClassLabels = 101; + } + + // The name of the output blob containing the probability of each class. + // In other words, the score vector. Must be a 1-D tensor with the same + // number and order of elements as ClassLabels. + string labelProbabilityLayerName = 200; +} + + +/** + * A layer that computes the one hot representation of the input. + * + * Requires 1 or 2 inputs and produces 1 output. + * Rank of the output is one more than the first input. + * If the second input is present, it is used to determine the value of "oneHotVectorSize" and the parameter "oneHotVectorSize" is ignored. + * + * Input values correspond to indices and should typically be in the range [0,"oneHotVectorSize" -1]. If it is outside this range, a vector of all "offValue" will be chosen. + * + * Typically one hot vectors contain 0s everywhere, except 1 at the index that the input corresponds to. + * However, instead of 0, any float value could be generated by using the "offValue" parameter. + * Similarly, instead of 1, any other value can be used by employing the "onValue" parameter. + * + * e.g.: + * input shape: (10,), "oneHotVectorSize" : 32, axis=-1, then output shape will be (10,32) + * input shape: (10,23), "oneHotVectorSize" : 32, axis=1, then output shape will be (10,32,23) + * input shape: (10,), "oneHotVectorSize" : 32, axis=0, then output shape will be (32,10) + * + * input shape: (2,), "oneHotVectorSize" : 4, axis=-1, then output shape will be (2,4) + * say input values = [2, 0], and "onValue" = 5, and "offValue" = -1, then output will be: + * [-1, -1, 5, -1 + * 5, -1, -1, -1] + * + * say input values = [2, -1], and "onValue" = 5, and "offValue" = -1, then output will be: + * [-1, -1, 5, -1 + * -1, -1, -1, -1] + * + * Available (iOS >= 14, macOS >= 11.0, watchOS >= 7) + */ + +message OneHotLayerParams { + + uint64 oneHotVectorSize = 1; /// size of the one hot vector + int64 axis = 2; /// negative indexing is supported. It refers to the axis in the output tensor. + float onValue = 3; + float offValue = 4; +} + + +/** + * A layer that computes the cumsum values of the input along a given axis. + * + * Requires 1 or 2 inputs and produces 1 output. + * + * Output shape and rank is same as the first input. + * If the second input is present, it is used to determine the value of "axis" and the parameter "axis" is ignored. + * + * e.g.: + * Input shape = (3,), values it has: [4, 6, 7] + * + * Then output values will be: + * + * if "excludeFinalSum" = False and "reverse" = False: + * output values : [4, 10, 17] + * + * if "excludeFinalSum" = True and "reverse" = False: + * output values : [0, 4, 10] + * + * if "excludeFinalSum" = False and "reverse" = True: + * output values : [17, 13, 7] + * + * if "excludeFinalSum" = True and "reverse" = True: + * output values : [13, 7, 0] + * + * + * Available (iOS >= 14, macOS >= 11.0, watchOS >= 7) + */ + + +message CumSumLayerParams { + + int64 axis = 1; /// negative indexing is supported + + /// if true, the first element of the output is 0, and the last element contains the sum of the input up to the penultimate value + /// if false, the first element of the output is same as the input and the last element is the sum of all the input values + /// (this behavior is reversed when "reverse" flag is True) + bool excludeFinalSum = 2; + + bool reverse = 3; /// if true, cumsum is performed in the opposite direction +} + + +/** + * A neural network specialized as a regressor. + */ +message NeuralNetworkRegressor { + + repeated NeuralNetworkLayer layers = 1; + repeated NeuralNetworkPreprocessing preprocessing = 2; + + // use this enum value to determine the input tensor shapes to the neural network, for multiarray inputs + NeuralNetworkMultiArrayShapeMapping arrayInputShapeMapping = 5; + + // use this enum value to determine the input tensor shapes to the neural network, for image inputs + NeuralNetworkImageShapeMapping imageInputShapeMapping = 6; + + NetworkUpdateParameters updateParams = 10; + +} + +/// --------------------------------------------------------- +/// On-device Training related messages +/// --------------------------------------------------------- + +/** + * Details on how the network will be updated + */ +message NetworkUpdateParameters { + + repeated LossLayer lossLayers = 1; + Optimizer optimizer = 2; + Int64Parameter epochs = 3; + + /** + * Describes whether to shuffle the batch of data between epochs. + */ + BoolParameter shuffle = 10; + + /** + * The seed to be used in an associated random number generator. + */ + Int64Parameter seed = 20; +} + +/** + * Loss layer - categorical cross entropy and mean squared error are the only supported loss functions currently + */ +message LossLayer { + + string name = 1; + oneof LossLayerType { + + CategoricalCrossEntropyLossLayer categoricalCrossEntropyLossLayer = 10; + MeanSquaredErrorLossLayer meanSquaredErrorLossLayer = 11; + + } + +} + +/** + * Categorical cross entropy loss layer + * Categorical cross entropy is used for single label categorization (only one category is applicable for each data point). + * + * The input is a vector of length N representing the distribution over N categories. It must be the output of a softmax. + * + * The target is a single value representing the true category or class label. If the target is the predictedFeatureName of a neural network classifier it will be inverse mapped to the corresponding categorical index for you. + * + * math: + * Loss_{CCE}(input, target) = -\sum_{i=1}^{N} (target == i) log( input[i] ) = - log (input[target]) + */ +message CategoricalCrossEntropyLossLayer { + + string input = 1; + string target = 2; + +} + +/** + * Mean squared error loss layer, + * specifying input and target + */ +message MeanSquaredErrorLossLayer { + + string input = 1; + string target = 2; + +} + +/** + * Optimizer - stochastic gradient descent and adam are the only supported optimizers currently + */ +message Optimizer { + + oneof OptimizerType { + + SGDOptimizer sgdOptimizer = 10; + AdamOptimizer adamOptimizer = 11; + + } + +} + +/** + * Stochastic gradient descent optimizer, + * specifying configurable learning rate, mini batch size, and momentum + */ +message SGDOptimizer { + + DoubleParameter learningRate = 1; + Int64Parameter miniBatchSize = 2; + DoubleParameter momentum = 3; + +} + +/** + * Adam optimizer, + * specifying configurable learning rate, mini batch size, betas, and eps + */ +message AdamOptimizer { + + DoubleParameter learningRate = 1; + Int64Parameter miniBatchSize = 2; + DoubleParameter beta1 = 3; + DoubleParameter beta2 = 4; + DoubleParameter eps = 5; + +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/NonMaximumSuppression.proto b/onnxruntime/core/providers/coreml/mlmodel_format/NonMaximumSuppression.proto new file mode 100644 index 0000000000000..c98949a0c2e21 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/NonMaximumSuppression.proto @@ -0,0 +1,187 @@ +// Copyright (c) 2018, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification; + +/* +* Non-maximum suppression of axis-aligned bounding boxes. +* +* This is used primarily for object detectors that tend to produce multiple +* boxes around a single object. This is a byproduct of the detector's +* robustness to spatial translation. If there are two or more bounding boxes +* that are very similar to one another, the algorithm should return only a +* single representative. +* +* Similarity between two bounding boxes is measured by intersection-over-union +* (IOU), the fraction between the area of intersection and area of the union. +* Here is an example where the areas can be calculated by hand by counting glyphs:: +* +* +-------+ +-------+ +* | | | | +* | +------+ +--+ | +---+ +* | | | | | | | | +* +-------+ | +--+ +----+ | +* | | | | +* +------+ +------+ +* Intersection Union +* IOU: 0.16 = 12 / 73 +* +* All IOU scores are fractions betwen 0.0 (fully disjoint) and 1.0 (perfect +* overlap). The standard algorithm (PickTop) is defined as follows: +* +* 1. Sort boxes by descending order of confidence +* 2. Take the top one and mark it as keep +* 3. Suppress (mark it as discard) all boxes within a fixed IOU radius of the +* keep box +* 4. Go to 2 and repeat on the subset of boxes not already kept or discarded +* 5. When all boxes are processed, output only the ones marked as keep +* +* Before the algorithm, boxes that fall below the confidence threshold are +* discarded. +*/ +message NonMaximumSuppression { + // Suppression methods: + /* + * Pick the bounding box of the top confidence, suppress all within a radius. + */ + message PickTop { + /* + * Suppression is only done among predictions with the same label + * (argmax of the confidence). + */ + bool perClass = 1; + } + + /* + * Choose which underlying suppression method to use + */ + oneof SuppressionMethod { + PickTop pickTop = 1; + } + + /* + * Optional class label mapping. + */ + oneof ClassLabels { + StringVector stringClassLabels = 100; + Int64Vector int64ClassLabels = 101; + } + + /* + * This defines the radius of suppression. A box is considered to be within + * the radius of another box if their IOU score is less than this value. + */ + double iouThreshold = 110; + + /* + * Remove bounding boxes below this threshold. The algorithm run-time is + * proportional to the square of the number of incoming bounding boxes + * (O(N^2)). This threshold is a way to reduce N to make the algorithm + * faster. The confidence threshold can be any non-negative value. Negative + * confidences are not allowed, since if the output shape is specified to be + * larger than boxes after suppression, the unused boxes are filled with + * zero confidence. If the prediction is handled by Core Vision, it is also + * important that confidences are defined with the following semantics: + * + * 1. Confidences should be between 0 and 1 + * 2. The sum of the confidences for a prediction should not exceed 1, but is + * allowed to be less than 1 + * 3. The sum of the confidences will be interpreted as the confidence of + * any object (e.g. if the confidences for two classes are 0.2 and 0.4, + it means there is a 60% (0.2 + 0.4) confidence that an object is + present) + */ + double confidenceThreshold = 111; + + /* + * Set the name of the confidence input. + * + * The input should be a multi-array of type double and shape N x C. N is + * the number of boxes and C the number of classes. Each row describes the + * confidences of each object category being present at that particular + * location. Confidences should be nonnegative, where 0.0 means the highest + * certainty the object is not present. + * + * Specifying shape is optional. + */ + string confidenceInputFeatureName = 200; + + /* + * Set the name of the coordinates input. + * + * The input should be a multi-array of type double and shape N x 4. The + * rows correspond to the rows of the confidence matrix. The four values + * describe (in order): + * + * - x (center location of the box along the horizontal axis) + * - y (center location of the box along the vertical axis) + * - width (size of box along the horizontal axis) + * - height (size of box on along the vertical axis) + * + * Specifying shape is optional. + */ + string coordinatesInputFeatureName = 201; + + /* + * The iouThreshold can be optionally overridden by specifying this string + * and providing a corresponding input of type double. This allows changing + * the value of the parameter during run-time. + * + * The input should be a scalar double between 0.0 and 1.0. Setting it to 1.0 + * means there will be no suppression based on IOU. + */ + string iouThresholdInputFeatureName = 202; + + /* + * The confidenceThreshold can be optionally overridden by specifying this + * string and providing a corresponding input. This allows changing the + * value of the parameter during run-time, which can aid setting it just + * right for a particular use case. + * + * The input should be a scalar double with nonnegative value. + */ + string confidenceThresholdInputFeatureName = 203; + + /* + * Set the name of the confidence output. The output will be the same type + * and shape as the corresponding input. The only difference is that the + * number of rows may have been reduced. + * + * Specifying shape is optional. One reason to specify shape is to limit + * the number of output boxes. This can be done is several ways: + * + * Fixed shape: + * The output can be pinned to a fixed set of boxes. If this number is larger + * than the number of boxes that would have been returned, the output is padded + * with zeros for both confidence and coordinates. Specifying a fixed shape + * can be done by setting either shape (deprecated) or allowedShapes set to + * fixedsize. + * + * Min/max: + * It is also possible to set both a minimum and a maximum. The same zero-padding + * as for fixed shape is applied when necessary. Setting min/max is done by defining + * two allowedShapes, where the first dimension uses a rangeofsizes defining lowerbound + * and upperbound. + */ + string confidenceOutputFeatureName = 210; + + /* + * Set the name of the coordinates output. The output will be the same type + * and shape as the corresponding input. The only difference is that the + * number of rows may have been reduced. + * + * Specifying shape is optional. See confidence output for a more detailed + * description. Note that to achieve either fixed shape output or a + * constraint range of boxes, only one of confidence or coordinates need to + * set a shape. Both shapes are allowed to be defined, but in such case they + * have to be consistent along dimension 0. + */ + string coordinatesOutputFeatureName = 211; +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/Normalizer.proto b/onnxruntime/core/providers/coreml/mlmodel_format/Normalizer.proto new file mode 100644 index 0000000000000..627f7e2e3afd7 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/Normalizer.proto @@ -0,0 +1,38 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification; + +/** + * A normalization preprocessor. + */ +message Normalizer { + /** + * There are three normalization modes, + * which have the corresponding formulas: + * + * Max + * .. math:: + * max(x_i) + * + * L1 + * .. math:: + * z = ||x||_1 = \sum_{i=1}^{n} |x_i| + * + * L2 + * .. math:: + * z = ||x||_2 = \sqrt{\sum_{i=1}^{n} x_i^2} + */ + enum NormType { + LMax = 0; + L1 = 1; + L2 = 2; + } + + NormType normType = 1; +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/OneHotEncoder.proto b/onnxruntime/core/providers/coreml/mlmodel_format/OneHotEncoder.proto new file mode 100644 index 0000000000000..f47cf28166222 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/OneHotEncoder.proto @@ -0,0 +1,41 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification; + +/** + * Transforms a categorical feature into an array. The array will be all + * zeros expect a single entry of one. + * + * Each categorical value will map to an index, this mapping is given by + * either the ``stringCategories`` parameter or the ``int64Categories`` + * parameter. + */ +message OneHotEncoder { + enum HandleUnknown { + ErrorOnUnknown = 0; + IgnoreUnknown = 1; // Output will be all zeros for unknown values. + } + + /** + * Mapping to be used for the encoding. The position of the category in + * the below vector determines where the single one entry will be in the + * output. + */ + oneof CategoryType { + StringVector stringCategories = 1; + Int64Vector int64Categories = 2; + } + + // Output can be a dictionary with only one entry, instead of an array. + bool outputSparse = 10; + + HandleUnknown handleUnknown = 11; +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/Parameters.proto b/onnxruntime/core/providers/coreml/mlmodel_format/Parameters.proto new file mode 100644 index 0000000000000..ed1ebe525181f --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/Parameters.proto @@ -0,0 +1,52 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification; + +/** + * Int64 parameter, + * consisting of a default int64 value, and allowed range or set of values + * value is unbounded if AllowedValues is not set. + */ +message Int64Parameter { + int64 defaultValue = 1; + oneof AllowedValues { + Int64Range range = 10; + Int64Set set = 11; + } +} + +/** + * Double parameter, + * consisting of a default double value, and allowed range of values + * value is unbounded if AllowedValues is not set. + */ +message DoubleParameter { + double defaultValue = 1; + oneof AllowedValues { + DoubleRange range = 10; + } +} + +/** + * String parameter, + * A default string value must be provided + */ +message StringParameter { + string defaultValue = 1; +} + +/** + * String parameter, + * A default bool value must be provided + */ +message BoolParameter { + bool defaultValue = 1; +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/README.md b/onnxruntime/core/providers/coreml/mlmodel_format/README.md new file mode 100644 index 0000000000000..e5eba65f982ad --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/README.md @@ -0,0 +1,16 @@ +# Core ML Model Format Specification +This directory contains the protobuf message definitions that comprise the Core ML model document (``.mlmodel``) format. + +The top-level message is ``Model``, which is defined in ``Model.proto``. +Other message types describe data structures, feature types, feature engineering model types, and predictive model types. + +# Update the Core ML Model Format Specification +Please do not modify protobuf message definitions, they are copied directly from [Core ML Tools](https://github.com/apple/coremltools) repository. + +To update the Core ML Model Format Schema schema files to a more recent version: +1. Delete all the protobuf message definitions (`.proto`) from this directory. +2. Copy the new version of protobuf message definitions (`.proto`) from the `mlmodel/format/` directory of preferred coremltools release branch. + +# Core ML Model Format Schema version history +## [coremltools 4.0](https://github.com/apple/coremltools/releases/tag/4.0) +[Core ML Model Format Specification](https://github.com/apple/coremltools/tree/4.0/mlmodel/format) diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/SVM.proto b/onnxruntime/core/providers/coreml/mlmodel_format/SVM.proto new file mode 100644 index 0000000000000..932a4ec216682 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/SVM.proto @@ -0,0 +1,195 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification; + +/// Kernel Definitions +/// ------------------ + +/** + * A linear kernel. + * + * This function has the following formula: + * + * .. math:: + * K(\boldsymbol{x}, \boldsymbol{x'}) = \boldsymbol{x}^T \boldsymbol{x'} + */ +message LinearKernel { +} + +/** + * A Gaussian radial basis function (RBF) kernel. + * + * This function has the following formula: + * + * .. math:: + * K(\boldsymbol{x}, \boldsymbol{x'}) = \ + * \exp(-\gamma || \boldsymbol{x} - \boldsymbol{x'} ||^2 ) + * + */ +message RBFKernel { + double gamma = 1; +} + +/** + * A polynomial kernel. + * + * This function has the following formula: + * + * .. math:: + * K(\boldsymbol{x}, \boldsymbol{x'}) = \ + * (\gamma \boldsymbol{x}^T \boldsymbol{x'} + c)^{degree} + */ +message PolyKernel { + int32 degree = 1; + double c = 2; + double gamma = 3; +} + +/** + * A sigmoid kernel. + * + * This function has the following formula: + * + * .. math:: + * K(\boldsymbol{x}, \boldsymbol{x'}) = \ + * \tanh(\gamma \boldsymbol{x}^T \boldsymbol{x'} + c) + */ +message SigmoidKernel { + double gamma = 1; + double c = 2; +} + +/** + * A kernel. + */ +message Kernel { + oneof kernel { + LinearKernel linearKernel = 1; + RBFKernel rbfKernel = 2; + PolyKernel polyKernel = 3; + SigmoidKernel sigmoidKernel = 4; + } +} + + +/// Support Vector Definitions +/// -------------------------- + +/** + * A sparse node. + */ +message SparseNode { + int32 index = 1; // 1-based indexes, like libsvm + double value = 2; +} + +/** + * A sparse vector. + */ +message SparseVector { + repeated SparseNode nodes = 1; +} + +/** + * One or more sparse support vectors. + */ +message SparseSupportVectors { + repeated SparseVector vectors = 1; +} + +/** + * A dense vector. + */ +message DenseVector { + repeated double values = 1; +} + +/** + * One or more dense support vectors. + */ +message DenseSupportVectors { + repeated DenseVector vectors = 1; +} + +/** + * One or more coefficients. + */ +message Coefficients { + repeated double alpha = 1; +} + +/** + * A support vector regressor. + */ +message SupportVectorRegressor { + Kernel kernel = 1; + + // Support vectors, either sparse or dense format + oneof supportVectors { + SparseSupportVectors sparseSupportVectors = 2; + DenseSupportVectors denseSupportVectors = 3; + } + + // Coefficients, one for each support vector + Coefficients coefficients = 4; + + double rho = 5; +} + +/** + * A support vector classifier + */ +message SupportVectorClassifier { + Kernel kernel = 1; + + /** + * The number of support vectors for each class. + */ + repeated int32 numberOfSupportVectorsPerClass = 2; + + /** + * The support vectors, in either sparse or dense format. + */ + oneof supportVectors { + SparseSupportVectors sparseSupportVectors = 3; + DenseSupportVectors denseSupportVectors = 4; + } + + /** + * The coefficients, essentially a two dimensional array of + * size: (numberOfClasses-1) by (total number of support vectors) + */ + repeated Coefficients coefficients = 5; + + /** + * Constants for decision function, + * with K*(K-1) / 2 elements, + * where K is the number of classes. + */ + repeated double rho = 6; + + /** + * Pairwise probability information for A vs B classifier. + * Total of K*(K-1)/2 elements where K is the number of classes. + * These fields are optional, + * and only required if you want probabilities or multi class predictions. + */ + repeated double probA = 7; + repeated double probB = 8; + + /** + * Class label mapping. + */ + oneof ClassLabels { + StringVector stringClassLabels = 100; + Int64Vector int64ClassLabels = 101; + } +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/Scaler.proto b/onnxruntime/core/providers/coreml/mlmodel_format/Scaler.proto new file mode 100644 index 0000000000000..f0e13d54be2e8 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/Scaler.proto @@ -0,0 +1,34 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification; + +/** + * A scaling operation. + * + * This function has the following formula: + * + * .. math:: + * f(x) = scaleValue \cdot (x + shiftValue) + * + * If the ``scaleValue`` is not given, the default value 1 is used. + * If the ``shiftValue`` is not given, the default value 0 is used. + * + * If ``scaleValue`` and ``shiftValue`` are each a single value + * and the input is an array, then the scale and shift are applied + * to each element of the array. + * + * If the input is an integer, then it is converted to a double to + * perform the scaling operation. If the output type is an integer, + * then it is cast to an integer. If that cast is lossy, then an + * error is generated. + */ +message Scaler { + repeated double shiftValue = 1; + repeated double scaleValue = 2; +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/SoundAnalysisPreprocessing.proto b/onnxruntime/core/providers/coreml/mlmodel_format/SoundAnalysisPreprocessing.proto new file mode 100644 index 0000000000000..05bb744a9af94 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/SoundAnalysisPreprocessing.proto @@ -0,0 +1,60 @@ +// Copyright (c) 2019, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification.CoreMLModels; + +/** +* A model which takes audio signal samples as input and outputs an array of +* preprocessed samples according to the specified preprocessing types +*/ +message SoundAnalysisPreprocessing { + + // Specific preprocessing types for sound analysis + + /* Vggish preprocesses input audio samples and makes them ready to + be fed to Vggish feature extractor. + c.f. https://arxiv.org/pdf/1609.09430.pdf + + The preprocessing takes input a single channel (monophonic) audio samples + 975 miliseconds long, sampled at 16KHz, i.e., 15600 samples 1D multiarray + and produces preprocessed samples in multiarray of shape [1, 96, 64] + + (1) Splits the input audio samples into overlapping frames, where each + frame is 25 milliseconds long and hops forward by 10 milliseconds. + Any partial frames at the end are dropped. + + (2) Hann window: apply a periodic Hann with a window_length of + 25 milliseconds, which translates to 400 samples in 16KHz sampling rate + + w(n) = 0.5 - 0.5 * cos(2*pi*n/window_length_sample), + where 0 <= n <= window_lenth_samples - 1 and window_lenth_samples = 400 + + Then, the Hann window is applied to each frame as below + + windowed_frame(n) = frame(n) * w(n) + where 0 <= n <= window_lenth_samples - 1 and window_lenth_samples = 400 + + (3) Power spectrum: calculate short-time Fourier transfor magnitude, with + an FFT length of 512 + + (4) Log Mel filter bank: calculates a log magnitude mel-frequency + spectrogram minimum frequency of 125Hz and maximum frequency of 7500Hz, + number of mel bins is 64, log_offset is 0.01, number of spectrum bins + is 64. + */ + + message Vggish { + // no specific parameter + } + + // Vision feature print type + oneof SoundAnalysisPreprocessingType { + Vggish vggish = 20; + } + +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/TextClassifier.proto b/onnxruntime/core/providers/coreml/mlmodel_format/TextClassifier.proto new file mode 100644 index 0000000000000..bf6d3c7f7f3e5 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/TextClassifier.proto @@ -0,0 +1,43 @@ +// Copyright (c) 2018, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification.CoreMLModels; + +/** +* A model which takes a single input string and outputs a +* label for the input. +*/ +message TextClassifier { + + /* + * Stores the resivion number for the model, revision 1 is available on + * iOS, tvOS 12.0+, macoOS 10.14+ + */ + uint32 revision = 1; + + /* + * Stores the language of the model, as specified in BCP-47 format, + * e.g. "en-US". See https://tools.ietf.org/html/bcp47 + */ + string language = 10; + + /* + * Stores the byte representation of learned model parameters + */ + bytes modelParameterData = 100; + + /* + * Stores the set of output class labels + */ + oneof ClassLabels { + StringVector stringClassLabels = 200; + } + +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/TreeEnsemble.proto b/onnxruntime/core/providers/coreml/mlmodel_format/TreeEnsemble.proto new file mode 100644 index 0000000000000..defebee98852c --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/TreeEnsemble.proto @@ -0,0 +1,161 @@ +// Copyright (c) 2017, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +/** + * Each tree is a collection of nodes, + * each of which is identified by a unique identifier. + * + * Each node is either a branch or a leaf node. + * A branch node evaluates a value according to a behavior; + * if true, the node identified by ``true_child_node_id`` is evaluated next, + * if false, the node identified by ``false_child_node_id`` is evaluated next. + * A leaf node adds the evaluation value to the base prediction value + * to get the final prediction. + * + * A tree must have exactly one root node, + * which has no parent node. + * A tree must not terminate on a branch node. + * All leaf nodes must be accessible + * by evaluating one or more branch nodes in sequence, + * starting from the root node. + */ + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification; + +/** + * A tree ensemble post-evaluation transform. + */ +enum TreeEnsemblePostEvaluationTransform { + NoTransform = 0; + Classification_SoftMax = 1; + Regression_Logistic = 2; + Classification_SoftMaxWithZeroClassReference = 3; +} + +/** + * Tree ensemble parameters. + */ +message TreeEnsembleParameters { + message TreeNode { + uint64 treeId = 1; + uint64 nodeId = 2; + + enum TreeNodeBehavior { + BranchOnValueLessThanEqual = 0; + BranchOnValueLessThan = 1; + BranchOnValueGreaterThanEqual = 2; + BranchOnValueGreaterThan = 3; + BranchOnValueEqual = 4; + BranchOnValueNotEqual = 5; + LeafNode = 6; + } + + /** + * The branch mode parameters. + * + * If branch is false, + * then the parameters in this section must be filled in + * to determine how the branching functions. + */ + TreeNodeBehavior nodeBehavior = 3; + + /** + * If the node behavior mode is a branch mode, + * then these values must be filled in. + */ + uint64 branchFeatureIndex = 10; + double branchFeatureValue = 11; + uint64 trueChildNodeId = 12; + uint64 falseChildNodeId = 13; + bool missingValueTracksTrueChild = 14; + + /** + * The leaf mode. + * + * If ``nodeBahavior`` == ``LeafNode``, + * then the evaluationValue is added to the base prediction value + * in order to get the final prediction. + * To support multiclass classification + * as well as regression and binary classification, + * the evaluation value is encoded here as a sparse vector, + * with evaluationIndex being the index of the base vector + * that evaluation value is added to. + * In the single class case, + * it is expected that evaluationIndex is exactly 0. + */ + message EvaluationInfo { + uint64 evaluationIndex = 1; + double evaluationValue = 2; + } + + repeated EvaluationInfo evaluationInfo = 20; + + /** + * The relative hit rate of a node for optimization purposes. + * + * This value has no effect on the accuracy of the result; + * it allows the tree to optimize for frequent branches. + * The value is relative, + * compared to the hit rates of other branch nodes. + * + * You typically use a proportion of training samples + * that reached this node + * or some similar metric to derive this value. + */ + double relativeHitRate = 30; + } + + repeated TreeNode nodes = 1; + + /** + * The number of prediction dimensions or classes in the model. + * + * All instances of ``evaluationIndex`` in a leaf node + * must be less than this value, + * and the number of values in the ``basePredictionValue`` field + * must be equal to this value. + * + * For regression, + * this is the dimension of the prediction. + * For classification, + * this is the number of classes. + */ + uint64 numPredictionDimensions = 2; + + /** + * The base prediction value. + * + * The number of values in this must match + * the default values of the tree model. + */ + repeated double basePredictionValue = 3; +} + +/** + * A tree ensemble classifier. + */ +message TreeEnsembleClassifier { + TreeEnsembleParameters treeEnsemble = 1; + TreeEnsemblePostEvaluationTransform postEvaluationTransform = 2; + + // Required class label mapping + oneof ClassLabels { + StringVector stringClassLabels = 100; + Int64Vector int64ClassLabels = 101; + } +} + +/** + * A tree ensemble regressor. + */ +message TreeEnsembleRegressor { + TreeEnsembleParameters treeEnsemble = 1; + TreeEnsemblePostEvaluationTransform postEvaluationTransform = 2; +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/VisionFeaturePrint.proto b/onnxruntime/core/providers/coreml/mlmodel_format/VisionFeaturePrint.proto new file mode 100644 index 0000000000000..cd13d290e421e --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/VisionFeaturePrint.proto @@ -0,0 +1,63 @@ +// Copyright (c) 2018, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +package CoreML.Specification.CoreMLModels; + +/** +* A model which takes an input image and outputs array(s) of features +* according to the specified feature types +*/ +message VisionFeaturePrint { + + // Specific vision feature print types + + // Scene extracts features useful for identifying contents of natural images + // in both indoor and outdoor environments + message Scene { + enum SceneVersion { + SCENE_VERSION_INVALID = 0; + // VERSION_1 is available on iOS,tvOS 12.0+, macOS 10.14+ + // It uses a 299x299 input image and yields a 2048 float feature vector + SCENE_VERSION_1 = 1; + } + + SceneVersion version = 1; + } + + // Objects extracts features useful for identifying and localizing + // objects in natural images + message Objects { + enum ObjectsVersion { + OBJECTS_VERSION_INVALID = 0; + // VERSION_1 is available on iOS,tvOS 14.0+, macOS 11.0+ + // It uses a 299x299 input image and yields two multiarray + // features: one at high resolution of shape (288, 35, 35) + // the other at low resolution of shape (768, 17, 17) + OBJECTS_VERSION_1 = 1; + } + + ObjectsVersion version = 1; + + /* + * Stores the names of the output features according to the + * order of them being computed from the neural network, i.e., + * the first element in the output is the earliest being + * computed, while the last is the latest being computed. In + * general, the order reflects the resolution of the feature. + * The earlier it is computed, the higher the feature resolution. + */ + repeated string output = 100; + } + + // Vision feature print type + oneof VisionFeaturePrintType { + Scene scene = 20; + Objects objects = 21; + } + +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/WordEmbedding.proto b/onnxruntime/core/providers/coreml/mlmodel_format/WordEmbedding.proto new file mode 100644 index 0000000000000..ec11a67ca5294 --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/WordEmbedding.proto @@ -0,0 +1,35 @@ +// Copyright (c) 2019, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification.CoreMLModels; + +/** +* A model which maps a set of strings into a finite-dimensional real vector space. +*/ +message WordEmbedding { + + /* + * Stores the revision number for the model, revision 2 is available on + * iOS, tvOS 13.0+, macOS 10.15+ + */ + uint32 revision = 1; + + /* + * Stores the language of the model, as specified in BCP-47 format, + * e.g. "en-US". See https://tools.ietf.org/html/bcp47 + */ + string language = 10; + + /* + * Stores efficient representation of emebedding as encoded by the Natural Language Framework + */ + bytes modelParameterData = 100; + +} diff --git a/onnxruntime/core/providers/coreml/mlmodel_format/WordTagger.proto b/onnxruntime/core/providers/coreml/mlmodel_format/WordTagger.proto new file mode 100644 index 0000000000000..8523e05df2c0b --- /dev/null +++ b/onnxruntime/core/providers/coreml/mlmodel_format/WordTagger.proto @@ -0,0 +1,75 @@ +// Copyright (c) 2018, Apple Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-3-clause license that can be +// found in LICENSE.txt or at https://opensource.org/licenses/BSD-3-Clause + +syntax = "proto3"; +option optimize_for = LITE_RUNTIME; + +import public "DataStructures.proto"; + +package CoreML.Specification.CoreMLModels; + +/** +* A model which takes a single input string and outputs a +* sequence of tokens, tags for tokens, along with their +* locations and lengths, in the original string. +*/ +message WordTagger { + + /* + * Stores the resivion number for the model, revision 1 is available on + * iOS, tvOS 12.0+, macoOS 10.14+ + */ + uint32 revision = 1; + + /* + * Stores the language of the model, as specified in BCP-47 format, + * e.g. "en-US". See https://tools.ietf.org/html/bcp47 + */ + string language = 10; + + /* + * Stores the name of tokens output. The output will be + * a sequence of strings that contains the tokens in the + * input string + */ + string tokensOutputFeatureName = 20; + + /* + * Stores the name of token tags output. The output will be + * a sequence of strings that contains the tags for each + * token in the input string + */ + string tokenTagsOutputFeatureName = 21; + + /* + * Stores the name of token locations output. The output will be + * a sequence of integers that contains the locations (indices) + * for each token in the input string, location starts from 0 + */ + string tokenLocationsOutputFeatureName = 22; + + /* + * Stores the name of token lengths output. The output will be + * a sequence of integers that contains the lengths for each + * token in the input string + */ + string tokenLengthsOutputFeatureName = 23; + + /* + * Stores the byte representation of learned model parameters + */ + bytes modelParameterData = 100; + + /* + * Stores the set of output tags + */ + oneof Tags { + StringVector stringTags = 200; + } + + + +} + From b02f4ece5e4f48f5d303d6be0170c03d60b24efb Mon Sep 17 00:00:00 2001 From: Dwayne Robinson Date: Fri, 28 Jan 2022 14:25:12 -0800 Subject: [PATCH 02/56] Remove cbegin and cend calls which do not exist in std::span or gsl::span (#10426) --- include/onnxruntime/core/framework/tensor_shape.h | 2 +- onnxruntime/core/framework/op_node_proto_helper.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/onnxruntime/core/framework/tensor_shape.h b/include/onnxruntime/core/framework/tensor_shape.h index 4db6b58adc965..ef0cfcfa01d51 100644 --- a/include/onnxruntime/core/framework/tensor_shape.h +++ b/include/onnxruntime/core/framework/tensor_shape.h @@ -43,7 +43,7 @@ using InlinedShapeVector = absl::InlinedVector& span) { TensorShapeVector out; out.reserve(span.size()); - out.assign(span.cbegin(), span.cend()); + out.assign(span.begin(), span.end()); return out; } diff --git a/onnxruntime/core/framework/op_node_proto_helper.cc b/onnxruntime/core/framework/op_node_proto_helper.cc index 7268e957b21b3..960c9971244aa 100644 --- a/onnxruntime/core/framework/op_node_proto_helper.cc +++ b/onnxruntime/core/framework/op_node_proto_helper.cc @@ -186,7 +186,7 @@ MUST_USE_RESULT Status OpNodeProtoHelper::GetAttrs(const std::string& na Status status = this->GetAttrsAsSpan(name, span); if (status.IsOK()) { out.reserve(span.size()); - out.assign(span.cbegin(), span.cend()); + out.assign(span.begin(), span.end()); } return status; } From 85cbe8367e8576cde03435666c02964aeceedaa6 Mon Sep 17 00:00:00 2001 From: ytaous <4484531+ytaous@users.noreply.github.com> Date: Fri, 28 Jan 2022 22:43:27 -0800 Subject: [PATCH 03/56] [ROCm] BFloat16 support (#10416) * reducesum bf16 support * bf16 for add/sub/mul/div * fix build * bf16 for Cast * bf16 for softmax Co-authored-by: root --- .../core/providers/rocm/math/softmax.cc | 19 +++ .../core/providers/rocm/math/softmax_impl.cu | 2 + .../providers/rocm/reduction/reduction_ops.cc | 111 +++++++++++++++++- .../providers/rocm/rocm_execution_provider.cc | 44 +++---- .../cpu/math/element_wise_ops_test.cc | 24 ++-- .../test/providers/cpu/math/gemm_test.cc | 4 +- .../test/providers/cpu/math/matmul_test.cc | 4 +- .../cpu/reduction/reduction_ops_test.cc | 6 +- 8 files changed, 177 insertions(+), 37 deletions(-) diff --git a/onnxruntime/core/providers/rocm/math/softmax.cc b/onnxruntime/core/providers/rocm/math/softmax.cc index e1d9aa83f6d08..ecbd918d7f866 100644 --- a/onnxruntime/core/providers/rocm/math/softmax.cc +++ b/onnxruntime/core/providers/rocm/math/softmax.cc @@ -45,6 +45,24 @@ SPECIALIZED_SOFTMAX_HELPER_IMPL(float) // SPECIALIZED_SOFTMAX_HELPER_IMPL(double) SPECIALIZED_SOFTMAX_HELPER_IMPL(MLFloat16) +// miopenSoftmaxForward/Backward doesn't support BFloat16. +#define SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(is_log_softmax) \ + template <> \ + Status SoftMaxComputeHelper(hipStream_t stream, const BFloat16* X, \ + const TensorShape& input_shape, BFloat16* Y, int64_t axis) { \ + typedef typename ToHipType::MappedType HipT; \ + int64_t N = input_shape.SizeToDimension(axis); \ + int64_t D = input_shape.SizeFromDimension(axis); \ + auto Y_data = reinterpret_cast(Y); \ + auto X_data = reinterpret_cast(X); \ + dispatch_warpwise_softmax_forward, is_log_softmax>( \ + stream, Y_data, X_data, gsl::narrow_cast(D), gsl::narrow_cast(D), gsl::narrow_cast(N)); \ + return Status::OK(); \ + } + +SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(true) +SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(false) + #define REGISTER_KERNEL_TYPED(T) \ ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \ Softmax, \ @@ -203,6 +221,7 @@ SPECIALIZED_COMPUTE(float) // MIOpen double data type not supported // SPECIALIZED_COMPUTE(double) SPECIALIZED_COMPUTE(MLFloat16) +SPECIALIZED_COMPUTE(BFloat16) } // namespace rocm } // namespace onnxruntime diff --git a/onnxruntime/core/providers/rocm/math/softmax_impl.cu b/onnxruntime/core/providers/rocm/math/softmax_impl.cu index d892b9fb86371..68f04070f3fb0 100644 --- a/onnxruntime/core/providers/rocm/math/softmax_impl.cu +++ b/onnxruntime/core/providers/rocm/math/softmax_impl.cu @@ -97,6 +97,7 @@ template void dispatch_warpwise_softmax_forward( SPECIALIZED_SOFTMAX_IMPL(float, float, float) SPECIALIZED_SOFTMAX_IMPL(half, half, float) SPECIALIZED_SOFTMAX_IMPL(double, double, double) +SPECIALIZED_SOFTMAX_IMPL(BFloat16, BFloat16, float) template void dispatch_blockwise_softmax_forward(hipStream_t stream, output_t* output, const input_t* input, int softmax_elements, int softmax_elements_stride, int batch_count) { @@ -119,6 +120,7 @@ template void dispatch_blockwise_softmax_forward SPECIALIZED_BLOCKWISE_SOFTMAX_IMPL(float, float, float) SPECIALIZED_BLOCKWISE_SOFTMAX_IMPL(half, half, float) SPECIALIZED_BLOCKWISE_SOFTMAX_IMPL(double, double, double) +SPECIALIZED_BLOCKWISE_SOFTMAX_IMPL(BFloat16, BFloat16, float) } diff --git a/onnxruntime/core/providers/rocm/reduction/reduction_ops.cc b/onnxruntime/core/providers/rocm/reduction/reduction_ops.cc index 9258beb423ad8..34537897b9f98 100644 --- a/onnxruntime/core/providers/rocm/reduction/reduction_ops.cc +++ b/onnxruntime/core/providers/rocm/reduction/reduction_ops.cc @@ -379,7 +379,6 @@ Status PrepareForReduce(const Tensor* X, const auto input_dims = input_shape.GetDims(); InlinedShapeVector reduced(rank, false); - prepare_reduce_metadata.output_dims.reserve(input_dims.size()); if (axes.size() > 0) { prepare_reduce_metadata.output_dims = input_shape.AsShapeVector(); for (auto axis : axes) { @@ -393,6 +392,7 @@ Status PrepareForReduce(const Tensor* X, } } else { // no axes provided (i.e.) default axes => reduce on all dims + prepare_reduce_metadata.output_dims.reserve(input_dims.size()); for (auto dim : input_dims) { ORT_ENFORCE(keepdims || dim != 0, "Can't reduce on dim with value of 0 if 'keepdims' is false. " @@ -823,6 +823,111 @@ SPECIALIZED_REDUCEKERNEL_COMPUTEIMPL(int64_t) SPECIALIZED_REDUCEKERNEL_COMPUTEIMPL(int8_t) SPECIALIZED_REDUCEKERNEL_COMPUTEIMPL(uint8_t) +template <> +template <> +Status ReduceKernel::ComputeImpl( + OpKernelContext* ctx, miopenReduceTensorOp_t miopen_reduce_op) const { + typedef typename ToHipType::MappedType HipT; + const Tensor* X = ctx->Input(0); + TensorShapeVector axes; + size_t num_inputs = ctx->InputCount(); + if (num_inputs == 2) { + const Tensor* axes_tensor = ctx->Input(1); + ORT_ENFORCE(axes_tensor != nullptr, "Axes input is null"); + ORT_ENFORCE(axes_tensor->Shape().NumDimensions() == 1, "An axes tensor must be a vector tensor."); + auto nDims = static_cast(axes_tensor->Shape()[0]); + const auto* data = axes_tensor->template Data(); + axes.assign(data, data + nDims); + } else { + axes.assign(axes_.begin(), axes_.end()); + } + + if (axes.empty() && noop_with_empty_axes_) { + auto* Y = ctx->Output(0, X->Shape()); + HIP_RETURN_IF_ERROR(hipMemcpyAsync(Y->template MutableData(), X->template Data(), + X->SizeInBytes(), hipMemcpyDeviceToDevice, Stream())); + return Status::OK(); + } + + PrepareReduceMetadata prepare_reduce_metadata; + ORT_RETURN_IF_ERROR(PrepareForReduce(X, keepdims_, axes, prepare_reduce_metadata)); + + Tensor* Y = ctx->Output(0, prepare_reduce_metadata.squeezed_output_dims); + + int64_t input_count = prepare_reduce_metadata.input_count; + int64_t output_count = prepare_reduce_metadata.output_count; + auto& input_dims_miopen = prepare_reduce_metadata.input_dims_miopen; + auto& output_dims_miopen = prepare_reduce_metadata.output_dims_miopen; + + if (input_count == 0) { + assert(Y->Shape().Size() == 0); + return Status::OK(); + } + + if (input_count == output_count) { + if (Y->template MutableData() != X->template Data()) { + HIP_RETURN_IF_ERROR(hipMemcpyAsync(Y->template MutableData(), X->template Data(), + input_count * sizeof(BFloat16), hipMemcpyDeviceToDevice, Stream())); + } + return Status::OK(); + } + + if (fast_reduction_ && !ctx->GetUseDeterministicCompute()) { + int m{}, n{}; + const auto applicable_matrix_reduction = + get_applicable_matrix_reduction(miopen_reduce_op, X->Shape().GetDims(), axes, m, n); + switch (applicable_matrix_reduction) { + case ApplicableMatrixReduction::Rows: { + return reduce_matrix_rows(Stream(), reinterpret_cast(X->template Data()), + reinterpret_cast(Y->template MutableData()), m, n); + } + case ApplicableMatrixReduction::Columns: { + const auto buffer_size_bytes = compute_reduce_matrix_columns_buffer_size(m, n); + auto buffer = rocm_ep_->GetScratchBuffer(buffer_size_bytes); + return reduce_matrix_columns(Stream(), reinterpret_cast(X->template Data()), + reinterpret_cast(Y->template MutableData()), m, n, buffer.get(), + buffer_size_bytes); + } + default: + break; + } + } + + HIP_RETURN_IF_ERROR(hipMemsetAsync(Y->MutableDataRaw(), 0, Y->SizeInBytes(), Stream())); + + size_t indices_bytes = 0; + size_t workspace_bytes = 0; + MiopenTensor input_tensor; + MiopenTensor output_tensor; + MiopenReduceDescriptor reduce_desc; + + miopenDataType_t miopen_type_X = miopenFloat; + IAllocatorUniquePtr temp_X = GetScratchBuffer(input_count); + Impl_Cast(Stream(), reinterpret_cast(X->template Data()), temp_X.get(), + X->Shape().Size()); + + ORT_RETURN_IF_ERROR(reduce_desc.Set(miopen_reduce_op, miopen_type_X, MIOPEN_REDUCE_TENSOR_NO_INDICES)); + ORT_RETURN_IF_ERROR(input_tensor.Set(input_dims_miopen, miopen_type_X)); + ORT_RETURN_IF_ERROR(output_tensor.Set(output_dims_miopen, miopen_type_X)); + MIOPEN_RETURN_IF_ERROR( + miopenGetReductionIndicesSize(MiopenHandle(), reduce_desc, input_tensor, output_tensor, &indices_bytes)); + MIOPEN_RETURN_IF_ERROR( + miopenGetReductionIndicesSize(MiopenHandle(), reduce_desc, input_tensor, output_tensor, &workspace_bytes)); + IAllocatorUniquePtr indices_rocm = GetScratchBuffer(indices_bytes); + IAllocatorUniquePtr workspace_rocm = GetScratchBuffer(workspace_bytes); + + const auto one = Consts::One; + const auto zero = Consts::Zero; + auto temp_Y = GetScratchBuffer(output_count); + MIOPEN_RETURN_IF_ERROR(miopenReduceTensor(MiopenHandle(), reduce_desc, indices_rocm.get(), indices_bytes, + workspace_rocm.get(), workspace_bytes, &one, input_tensor, temp_X.get(), + &zero, output_tensor, temp_Y.get())); + + Impl_Cast(Stream(), temp_Y.get(), reinterpret_cast(Y->template MutableData()), output_count); + + return Status::OK(); +} + namespace ReductionOps { template @@ -880,7 +985,8 @@ template std::unique_ptr ReduceCompute, BuildKernelCreateInfo, - // BuildKernelCreateInfo, - // BuildKernelCreateInfo, - // BuildKernelCreateInfo, - // BuildKernelCreateInfo, - // BuildKernelCreateInfo, - // BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, // BuildKernelCreateInfo, // BuildKernelCreateInfo, // BuildKernelCreateInfo, BuildKernelCreateInfo, - // BuildKernelCreateInfo, + BuildKernelCreateInfo, // OpSet 14 BuildKernelCreateInfo, @@ -2031,10 +2031,10 @@ static Status RegisterRocmKernels(KernelRegistry& kernel_registry) { BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, - // BuildKernelCreateInfo, - // BuildKernelCreateInfo, - // BuildKernelCreateInfo, - // BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, // BuildKernelCreateInfo, // OpSet 15 diff --git a/onnxruntime/test/providers/cpu/math/element_wise_ops_test.cc b/onnxruntime/test/providers/cpu/math/element_wise_ops_test.cc index f47d80f9abf7e..43e9ead580377 100644 --- a/onnxruntime/test/providers/cpu/math/element_wise_ops_test.cc +++ b/onnxruntime/test/providers/cpu/math/element_wise_ops_test.cc @@ -18,7 +18,7 @@ std::vector MakeMLFloat16(const std::initializer_list& input) return output; } -#ifdef USE_CUDA +#if defined(USE_CUDA) || defined(USE_ROCM) void TestFloat16(const char* op_name, const std::vector& lhs_dim, const std::initializer_list& lhs_values, const std::vector& rhs_dim, const std::initializer_list& rhs_values, const std::vector& out_dim, @@ -29,7 +29,11 @@ void TestFloat16(const char* op_name, const std::vector& lhs_dim, tester.AddInput("B", rhs_dim, MakeMLFloat16(rhs_values)); tester.AddOutput("C", out_dim, MakeMLFloat16(out_values)); std::vector> execution_providers; +#ifdef USE_CUDA execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif tester.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); } @@ -39,7 +43,11 @@ void TestFloat16(const char* op_name, const std::vector& lhs_dim, tester.AddInput("B", rhs_dim, MakeBFloat16(rhs_values)); tester.AddOutput("C", out_dim, MakeBFloat16(out_values)); std::vector> execution_providers; +#ifdef USE_CUDA execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif tester.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); } } @@ -128,7 +136,7 @@ TEST(MathOpTest, Add_float) { test.Run(); #endif -#ifdef USE_CUDA +#if defined(USE_CUDA) || defined(USE_ROCM) TestFloat16("Add", dims, lhs_values, dims, rhs_values, dims, out_values); #endif } @@ -163,7 +171,7 @@ TEST(MathOpTest, Add_Broadcast_Axis) { test.AddOutput("C", dims, out_values); test.Run(OpTester::ExpectResult::kExpectSuccess, ""); -#ifdef USE_CUDA +#if defined(USE_CUDA) || defined(USE_ROCM) TestFloat16("Add", dims, lhs_values, {3, 1}, rhs_values, dims, out_values); #endif } @@ -186,7 +194,7 @@ TEST(MathOpTest, Add_Broadcast_MultidirectionalAB) { {kTensorrtExecutionProvider}); // TensorRT: got C with shape [3, 1] #endif -#ifdef USE_CUDA +#if defined(USE_CUDA) || defined(USE_ROCM) TestFloat16("Add", {3, 1}, lhs_values, {3}, rhs_values, {3, 3}, out_values); #endif } @@ -208,7 +216,7 @@ TEST(MathOpTest, Add_Broadcast_MultidirectionalBA) { {kTensorrtExecutionProvider}); // TensorRT: got C with shape [3, 1] #endif -#ifdef USE_CUDA +#if defined(USE_CUDA) || defined(USE_ROCM) TestFloat16("Add", {3}, lhs_values, {3, 1}, rhs_values, {3, 3}, out_values); #endif } @@ -404,7 +412,7 @@ TEST(MathOpTest, Sub) { test.Run(); #endif -#ifdef USE_CUDA +#if defined(USE_CUDA) || defined(USE_ROCM) TestFloat16("Sub", dims, lhs_values, dims, rhs_values, dims, out_values); #endif } @@ -462,7 +470,7 @@ TEST(MathOpTest, Mul) { test.Run(); #endif -#ifdef USE_CUDA +#if defined(USE_CUDA) || defined(USE_ROCM) TestFloat16("Mul", dims, lhs_values, dims, rhs_values, dims, out_values); #endif } @@ -501,7 +509,7 @@ TEST(MathOpTest, Div) { test.Run(); #endif -#ifdef USE_CUDA +#if defined(USE_CUDA) || defined(USE_ROCM) TestFloat16("Div", dims, lhs_values, dims, rhs_values, dims, out_values); #endif } diff --git a/onnxruntime/test/providers/cpu/math/gemm_test.cc b/onnxruntime/test/providers/cpu/math/gemm_test.cc index 2411f2a14b42d..e96fbc1c9c929 100644 --- a/onnxruntime/test/providers/cpu/math/gemm_test.cc +++ b/onnxruntime/test/providers/cpu/math/gemm_test.cc @@ -106,9 +106,9 @@ TEST(GemmOpTest, GemmNoTrans_bfloat16) { test.AddOutput("Y", {2, 3}, MakeBFloat16({11.0f, 11.0f, 11.0f, -9.0f, -9.0f, -9.0f})); std::vector> execution_providers; #ifdef USE_CUDA - execution_providers.push_back(DefaultCudaExecutionProvider()); + execution_providers.push_back(DefaultCudaExecutionProvider()); #elif USE_ROCM - execution_providers.push_back(DefaultRocmExecutionProvider()); + execution_providers.push_back(DefaultRocmExecutionProvider()); #endif test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); } diff --git a/onnxruntime/test/providers/cpu/math/matmul_test.cc b/onnxruntime/test/providers/cpu/math/matmul_test.cc index 862ef375b06cc..6d2afcdc53df7 100644 --- a/onnxruntime/test/providers/cpu/math/matmul_test.cc +++ b/onnxruntime/test/providers/cpu/math/matmul_test.cc @@ -210,9 +210,9 @@ TEST(MathOpTest, MatMul_BFloat16) { test.AddOutput("Y", {2, 3}, MakeBFloat16({10.0f, 10.0f, 10.0f, -10.0f, -10.0f, -10.0f})); std::vector> execution_providers; #ifdef USE_CUDA - execution_providers.push_back(DefaultCudaExecutionProvider()); + execution_providers.push_back(DefaultCudaExecutionProvider()); #elif USE_ROCM - execution_providers.push_back(DefaultRocmExecutionProvider()); + execution_providers.push_back(DefaultRocmExecutionProvider()); #endif test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); } diff --git a/onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc b/onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc index 2c36b80ecc561..c0298f74aed55 100644 --- a/onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc +++ b/onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc @@ -1491,7 +1491,7 @@ TEST(ReductionOpTest, ReduceSum_half_bert) { // Add more UTs for half as needed #endif -#ifdef USE_CUDA +#if defined(USE_CUDA) || defined(USE_ROCM) TEST(ReductionOpTest, ReduceSumBFloat16) { OpTester test("ReduceSum", 14); test.AddAttribute("keepdims", (int64_t)0); @@ -1500,7 +1500,11 @@ TEST(ReductionOpTest, ReduceSumBFloat16) { test.AddInput("axes", {2}, std::vector{0, 1}); test.AddOutput("reduced", {2}, MakeBFloat16({36.0f, 42.0f})); std::vector> execution_providers; +#ifdef USE_CUDA execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); } #endif From baa17679221807ea332a7134c0d10b81adf4009e Mon Sep 17 00:00:00 2001 From: Scott McKay Date: Sun, 30 Jan 2022 08:10:13 +1000 Subject: [PATCH 04/56] Allow for an optional subgraph input to have no type info. (#10379) Add a test for a missing optional input to Loop. --- onnxruntime/core/graph/graph.cc | 9 ++++- .../providers/cpu/controlflow/loop_test.cc | 38 +++++++++---------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/onnxruntime/core/graph/graph.cc b/onnxruntime/core/graph/graph.cc index cb3fb4c8c04ca..5f0a6a6973cee 100644 --- a/onnxruntime/core/graph/graph.cc +++ b/onnxruntime/core/graph/graph.cc @@ -2131,11 +2131,16 @@ Status Graph::InferAndVerifySubgraphTypes(const Node& node, Graph& subgraph, // apply type/shape info to the subgraph's inputs for (size_t i = 0; i < num_subgraph_inputs; ++i) { - const auto& input_type = *input_types[i]; + const auto* input_type = input_types[i]; + if (input_type == nullptr) { + // optional input + continue; + } + const auto& subgraph_input = *subgraph_inputs->at(i); NodeArg* mutable_nodearg = subgraph.GetNodeArg(subgraph_input.Name()); - status = mutable_nodearg->UpdateTypeAndShape(input_type, true, options.override_types, subgraph.logger_); + status = mutable_nodearg->UpdateTypeAndShape(*input_type, true, options.override_types, subgraph.logger_); if (!status.IsOK()) { return ORT_MAKE_STATUS(ONNXRUNTIME, FAIL, "Node:", node.Name(), " ", status.ErrorMessage()); } diff --git a/onnxruntime/test/providers/cpu/controlflow/loop_test.cc b/onnxruntime/test/providers/cpu/controlflow/loop_test.cc index 32f1a120e2f9b..7628c3454a7b9 100644 --- a/onnxruntime/test/providers/cpu/controlflow/loop_test.cc +++ b/onnxruntime/test/providers/cpu/controlflow/loop_test.cc @@ -596,7 +596,7 @@ TEST(Loop, SubgraphTypeOverride) { std::vector inputs; std::vector outputs; - /* + /* Inputs: iter_num, cond_in, fake_in, loop carried state variables. iter_num_in cond_in fake_in [outer_scope_0] @@ -671,7 +671,7 @@ TEST(Loop, SubgraphTypeOverride) { LoopOpTester test{{}, create_subgraph}; test.AddInput("M", {1}, {1}); - test.AddInput("cond", {1}, {true}); + test.AddOptionalInputEdge(); // 'cond' is optional in this test so don't provide it test.AddInput("fake", {1}, {0.f}); test.AddInput("outer_scope_0", {1}, {kOuterNodeAddValue}); @@ -799,8 +799,8 @@ TEST(Loop, Opset11WithNoVariadicInputsAndOutputs) { auto* constant_attribute_tensor_proto = attr_proto.mutable_t(); constant_attribute_tensor_proto->mutable_dims()->Clear(); // scalar - constant_attribute_tensor_proto->set_data_type(TensorProto_DataType_FLOAT); //float scalar - *constant_attribute_tensor_proto->mutable_float_data()->Add() = 1.0f; //float scalar with value 1.0f + constant_attribute_tensor_proto->set_data_type(TensorProto_DataType_FLOAT); // float scalar + *constant_attribute_tensor_proto->mutable_float_data()->Add() = 1.0f; // float scalar with value 1.0f constant_node.AddAttribute("value", attr_proto); } @@ -977,11 +977,11 @@ TEST(Loop, IterationCountAsOutput) { /* Inputs: iter_num, cond_in, loop carried state variables. - iter_num_in cond_in - | | - [Identity] [Identity] - | | - loop_var_0_out cond_out + iter_num_in cond_in + | | + [Identity] [Identity] + | | + loop_var_0_out cond_out */ // graph inputs types. @@ -1061,12 +1061,12 @@ TEST(Loop, SequenceAsLoopCarriedDependency) { Inputs: iter_num, cond_in, loop_var_0_in - loop_var_0_in inserted_tensor cond_in iter_num - | | | (unused) - [SequenceInsert]-----/ [Identity] + loop_var_0_in inserted_tensor cond_in iter_num + | | | (unused) + [SequenceInsert]-----/ [Identity] | | - | cond_out - loop_var_0_out + | cond_out + loop_var_0_out */ // graph inputs types. @@ -1184,12 +1184,12 @@ TEST(Loop, OptionalTypeAsLoopCarriedDependency) { Inputs: iter_num, cond_in, loop_var_0_in - loop_var_0_in cond_in iter_num - | | (unused) - [Identity] [Identity] + loop_var_0_in cond_in iter_num + | | (unused) + [Identity] [Identity] | | - | cond_out - loop_var_0_out + | cond_out + loop_var_0_out */ // graph inputs types. From c43c1691ad6945f1e20d30408c70a04c227a35eb Mon Sep 17 00:00:00 2001 From: Edward Chen <18449977+edgchen1@users.noreply.github.com> Date: Mon, 31 Jan 2022 09:41:04 -0800 Subject: [PATCH 05/56] Enable transpose optimizer in minimal extended build (#10349) Enable transpose optimizer and infrastructure it depends on in a minimal extended build. --- cmake/CMakeLists.txt | 8 +- cmake/external/onnx_minimal.cmake | 15 ++- cmake/onnxruntime_optimizer.cmake | 5 +- cmake/onnxruntime_unittests.cmake | 2 +- include/onnxruntime/core/graph/graph.h | 72 +++++----- include/onnxruntime/core/graph/node_arg.h | 11 +- .../core/optimizer/graph_transformer_utils.h | 6 +- onnxruntime/core/framework/session_state.cc | 12 +- onnxruntime/core/framework/tensorprotoutils.h | 53 +++++++- onnxruntime/core/graph/graph.cc | 126 ++++++++++-------- onnxruntime/core/graph/graph_utils.cc | 80 ++++++----- onnxruntime/core/graph/graph_utils.h | 30 +++-- .../runtime_optimization_record_container.cc | 4 +- .../runtime_optimization_record_container.h | 4 +- .../core/optimizer/graph_transformer_utils.cc | 4 +- .../core/optimizer/nhwc_transformer.cc | 2 +- .../selector_action_transformer.cc | 10 +- .../selector_action_transformer.h | 4 +- .../core/optimizer/transpose_optimizer/api.h | 4 +- .../optimizer/transpose_optimizer/api_impl.cc | 55 ++++---- .../optimizer/transpose_optimizer/api_impl.h | 6 +- .../ort_transpose_optimizer.cc | 2 +- onnxruntime/core/session/inference_session.cc | 21 ++- .../linux-cpu-minimal-build-ci-pipeline.yml | 4 +- 24 files changed, 318 insertions(+), 222 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 2011285360629..475cfcdf5d8e8 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -120,8 +120,8 @@ option(onnxruntime_EXTENDED_MINIMAL_BUILD "onnxruntime_MINIMAL_BUILD with suppor option(onnxruntime_MINIMAL_BUILD_CUSTOM_OPS "Add custom operator kernels support to a minimal build." OFF) option(onnxruntime_REDUCED_OPS_BUILD "Reduced set of kernels are registered in build via modification of the kernel registration source files." OFF) option(onnxruntime_DISABLE_EXTERNAL_INITIALIZERS "Don't allow models to load external data" OFF) -cmake_dependent_option(onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD - "Enable runtime graph optimization replay for ORT format models in an extended minimal build." +cmake_dependent_option(onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD + "Enable runtime graph optimizations for ORT format models in an extended minimal build." OFF "onnxruntime_EXTENDED_MINIMAL_BUILD" OFF) #A special option just for debugging and sanitize check. Please do not enable in option in retail builds. @@ -347,8 +347,8 @@ if (onnxruntime_MINIMAL_BUILD) # enable EPs that compile kernels at runtime add_compile_definitions(ORT_EXTENDED_MINIMAL_BUILD) - if (onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) - add_compile_definitions(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) + if (onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + add_compile_definitions(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) endif() endif() diff --git a/cmake/external/onnx_minimal.cmake b/cmake/external/onnx_minimal.cmake index 33df1f5a31671..c42f431ea9920 100644 --- a/cmake/external/onnx_minimal.cmake +++ b/cmake/external/onnx_minimal.cmake @@ -31,10 +31,10 @@ else() if(HAS_UNUSED_BUT_SET_VARIABLE) target_compile_options(onnx_proto PRIVATE "-Wno-unused-but-set-variable") - endif() + endif() endif() -# For reference, this would be the full ONNX source include. We only need data_type_utils.* in this build. +# For reference, this would be the full ONNX source include. We only need data_type_utils in this build. # file(GLOB_RECURSE onnx_src CONFIGURE_DEPENDS # "${ONNX_SOURCE_ROOT}/onnx/*.h" # "${ONNX_SOURCE_ROOT}/onnx/*.cc" @@ -46,10 +46,11 @@ endif() # "${ONNX_SOURCE_ROOT}/onnx/test/*" # "${ONNX_SOURCE_ROOT}/onnx/cpp2py_export.cc" # ) -# list(REMOVE_ITEM onnx_src ${onnx_exclude_src}) -file(GLOB onnx_src CONFIGURE_DEPENDS -"${ONNX_SOURCE_ROOT}/onnx/common/common.h" -"${ONNX_SOURCE_ROOT}/onnx/defs/data_type_utils.*" +# list(REMOVE_ITEM onnx_src ${onnx_exclude_src}) +set(onnx_src + "${ONNX_SOURCE_ROOT}/onnx/common/common.h" + "${ONNX_SOURCE_ROOT}/onnx/defs/data_type_utils.h" + "${ONNX_SOURCE_ROOT}/onnx/defs/data_type_utils.cc" ) add_library(onnx ${onnx_src}) @@ -75,7 +76,7 @@ if (WIN32) /EHsc # exception handling - C++ may throw, extern "C" will not ) endif() - + target_compile_options(onnx_proto PRIVATE /wd4244 # 'argument' conversion from 'google::protobuf::int64' to 'int', possible loss of data ) diff --git a/cmake/onnxruntime_optimizer.cmake b/cmake/onnxruntime_optimizer.cmake index 1a3ceaa8095e3..44d16a1fefbdd 100644 --- a/cmake/onnxruntime_optimizer.cmake +++ b/cmake/onnxruntime_optimizer.cmake @@ -26,7 +26,7 @@ if (onnxruntime_MINIMAL_BUILD) ) endif() - if (onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) + if (onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) list(APPEND onnxruntime_optimizer_src_patterns "${ONNXRUNTIME_INCLUDE_DIR}/core/optimizer/graph_transformer_utils.h" "${ONNXRUNTIME_ROOT}/core/optimizer/graph_transformer_utils.cc" @@ -36,6 +36,9 @@ if (onnxruntime_MINIMAL_BUILD) "${ONNXRUNTIME_ROOT}/core/optimizer/qdq_transformer/selectors_actions/*.cc" "${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/*.h" "${ONNXRUNTIME_ROOT}/core/optimizer/selectors_actions/*.cc" + + "${ONNXRUNTIME_ROOT}/core/optimizer/transpose_optimizer/*.h" + "${ONNXRUNTIME_ROOT}/core/optimizer/transpose_optimizer/*.cc" ) endif() else() diff --git a/cmake/onnxruntime_unittests.cmake b/cmake/onnxruntime_unittests.cmake index 7c3bcf2c939da..eafb83a8f31fa 100644 --- a/cmake/onnxruntime_unittests.cmake +++ b/cmake/onnxruntime_unittests.cmake @@ -236,7 +236,7 @@ else() # minimal and/or reduced ops build endif() endif() -if((NOT onnxruntime_MINIMAL_BUILD OR onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +if((NOT onnxruntime_MINIMAL_BUILD OR onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) AND NOT onnxruntime_REDUCED_OPS_BUILD) list(APPEND onnxruntime_test_optimizer_src "${TEST_SRC_DIR}/optimizer/runtime_optimization/graph_runtime_optimization_test.cc") diff --git a/include/onnxruntime/core/graph/graph.h b/include/onnxruntime/core/graph/graph.h index 49204b54ba773..421d01feddf2a 100644 --- a/include/onnxruntime/core/graph/graph.h +++ b/include/onnxruntime/core/graph/graph.h @@ -53,7 +53,7 @@ struct IndexedSubGraph; class Model; class OpSignature; -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) class RuntimeOptimizationRecordContainer; #endif @@ -357,10 +357,12 @@ class Node { /** Gets the Node's attributes. */ const NodeAttributes& GetAttributes() const noexcept { return attributes_; } -#if !defined(ORT_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) /** Remove the specified attribute from this Node */ bool ClearAttribute(const std::string& attr_name); +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) /** Gets the Node's mutable attributes. */ NodeAttributes& GetMutableAttributes() noexcept { return attributes_; } @@ -831,13 +833,15 @@ class Graph { return *(result.first->second); } -#if !defined(ORT_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) /** Generate a unique name in this Graph for a NodeArg */ std::string GenerateNodeArgName(const std::string& base_name); /** Generate a unique name in this Graph for a Node */ std::string GenerateNodeName(const std::string& base_name); +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) /** Copy a Node and add it to this Graph. @param other Node to copy @returns Reference to the Node that was created and added to this Graph. @@ -1071,6 +1075,9 @@ class Graph { */ void SetOutputs(const std::vector& outputs); +#endif // !defined(ORT_MINIMAL_BUILD) + +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) /** Sets the type of a NodeArg, replacing existing type/shape if any */ void SetNodeArgType(NodeArg& arg, const ONNX_NAMESPACE::TypeProto& type_proto); @@ -1096,6 +1103,18 @@ class Graph { return GetConsumerNodesImpl(*this, node_arg_name); } + // Without removing the existing consumers, add a consumer to the give node arg name. + void AddConsumerNode(const std::string& node_arg_name, Node* consumer) { + node_arg_to_consumer_nodes_[node_arg_name].insert(consumer->Index()); + } + + // Remove a consumer from the set + void RemoveConsumerNode(const std::string& node_arg_name, Node* consumer) { + node_arg_to_consumer_nodes_[node_arg_name].erase(consumer->Index()); + } +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + +#if !defined(ORT_MINIMAL_BUILD) std::vector GetMutableConsumerNodes(const std::string& node_arg_name) { return GetConsumerNodesImpl(*this, node_arg_name); } @@ -1110,16 +1129,6 @@ class Graph { } } - // Without removing the existing consumers, add a consumer to the give node arg name. - void AddConsumerNode(const std::string& node_arg_name, Node* consumer) { - node_arg_to_consumer_nodes_[node_arg_name].insert(consumer->Index()); - } - - // Remove a consumer from the set - void RemoveConsumerNode(const std::string& node_arg_name, Node* consumer) { - node_arg_to_consumer_nodes_[node_arg_name].erase(consumer->Index()); - } - /** During constant folding it may become possible to infer the shape for a node. To avoid running a full Resolve allow an individual node to have the shape inferencing re-run. */ @@ -1201,7 +1210,7 @@ class Graph { Graph& parent_graph, const Node& parent_node, const logging::Logger& logger, std::unique_ptr& graph); -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) const RuntimeOptimizationRecordContainer& RuntimeOptimizations() const { return runtime_optimizations_; } @@ -1223,7 +1232,7 @@ class Graph { RuntimeOptimizationReplayContext& MutableRuntimeOptimizationReplayCtx() { return runtime_optimization_replay_context_; } -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) // This friendship relationship should only be used to call Graph::Graph and // Graph::LoadGraph All other access should be via the public API. @@ -1375,16 +1384,10 @@ class Graph { void ToGraphProtoInternal(ONNX_NAMESPACE::GraphProto& graph_proto) const; - template - static auto GetProducerNodeImpl( - TInstance& instance, const std::string& node_arg_name) -> decltype(instance.GetNode(0)) { - auto iter = instance.node_arg_to_producer_node_.find(node_arg_name); - if (iter != instance.node_arg_to_producer_node_.end()) { - auto node_index = iter->second; - return instance.GetNode(node_index); - } - return nullptr; - } +#endif // !defined(ORT_MINIMAL_BUILD) + +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + Status PopulateNodeArgToProducerConsumerLookupsFromNodes(); template static auto GetConsumerNodesImpl( @@ -1400,7 +1403,17 @@ class Graph { return results; } -#endif // !defined(ORT_MINIMAL_BUILD) + template + static auto GetProducerNodeImpl( + TInstance& instance, const std::string& node_arg_name) -> decltype(instance.GetNode(0)) { + auto iter = instance.node_arg_to_producer_node_.find(node_arg_name); + if (iter != instance.node_arg_to_producer_node_.end()) { + auto node_index = iter->second; + return instance.GetNode(node_index); + } + return nullptr; + } +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) #if !defined(ORT_MINIMAL_BUILD) || defined(ORT_EXTENDED_MINIMAL_BUILD) gsl::not_null AllocateNode(); @@ -1440,7 +1453,7 @@ class Graph { std::hash, std::equal_to> sparse_tensor_names_; -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) // Runtime optimization storage. // Note: runtime_optimizations_ == *runtime_optimizations_ptr_ and must be initialized std::unique_ptr runtime_optimizations_ptr_; @@ -1500,7 +1513,7 @@ class Graph { // All node args owned by <*this> graph. Key is node arg name. std::unordered_map> node_args_; -#if !defined(ORT_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) int name_generator_ = 0; // Strings which have been used as node names. @@ -1516,8 +1529,7 @@ class Graph { // node arg to its consumer nodes std::unordered_map> node_arg_to_consumer_nodes_; - -#endif // !defined(ORT_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) const std::unordered_map domain_to_version_; diff --git a/include/onnxruntime/core/graph/node_arg.h b/include/onnxruntime/core/graph/node_arg.h index 80f5dda2dcfde..7c575fed952f7 100644 --- a/include/onnxruntime/core/graph/node_arg.h +++ b/include/onnxruntime/core/graph/node_arg.h @@ -63,7 +63,8 @@ class NodeArg { @returns true if NodeArg is a normal tensor with a non-empty shape or a scalar with an empty shape. Otherwise, returns false. */ bool HasTensorOrScalarShape() const; -#if !defined(ORT_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + /** Sets the shape. @remarks Shape can only be set if the TypeProto was provided to the ctor, or #SetType has been called, as the shape information is stored as part of TypeProto. */ @@ -73,6 +74,10 @@ class NodeArg { @remarks If there is a mismatch during shape inferencing that can't be resolved the shape info may be removed. */ void ClearShape(); +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + +#if !defined(ORT_MINIMAL_BUILD) + /** Override current type from input_type if override_types is set to true, return failure status otherwise. @param input_tensor_elem_type Tensor element type parsed input_type @param current_tensor_elem_type Tensor element type parsed from existing type @@ -112,10 +117,10 @@ class NodeArg { private: ORT_DISALLOW_COPY_AND_ASSIGNMENT(NodeArg); -#if !defined(ORT_MINIMAL_BUILD) void SetType(const std::string* p_type); +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) void SetType(const ONNX_NAMESPACE::TypeProto& type_proto); -#endif +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) // Node arg PType. const std::string* type_; diff --git a/include/onnxruntime/core/optimizer/graph_transformer_utils.h b/include/onnxruntime/core/optimizer/graph_transformer_utils.h index 1c8628fd8fc2e..633e64b31ed74 100644 --- a/include/onnxruntime/core/optimizer/graph_transformer_utils.h +++ b/include/onnxruntime/core/optimizer/graph_transformer_utils.h @@ -15,7 +15,7 @@ #include "core/optimizer/rewrite_rule.h" #endif -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) #include "core/optimizer/selectors_actions/selector_action_transformer_apply_contexts.h" #endif @@ -52,7 +52,7 @@ std::vector> GenerateTransformers( #endif // !defined(ORT_MINIMAL_BUILD) -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) /** Generates all predefined transformers which support runtime optimizations for this level. Any transformers or rewrite rules named in rules_and_transformers_to_disable will be excluded. @@ -66,7 +66,7 @@ std::vector> GenerateTransformersForRuntimeOpt const SatApplyContextVariant& apply_context, const std::unordered_set& rules_and_transformers_to_disable = {}); -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) } // namespace optimizer_utils } // namespace onnxruntime diff --git a/onnxruntime/core/framework/session_state.cc b/onnxruntime/core/framework/session_state.cc index e6709305a8979..7d91f038297ae 100644 --- a/onnxruntime/core/framework/session_state.cc +++ b/onnxruntime/core/framework/session_state.cc @@ -982,9 +982,9 @@ Status SessionState::LoadFromOrtFormat(const fbs::SessionState& fbs_session_stat const bool original_nodes_should_exist = compiled_kernel_hashes.empty() -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) && graph_.RuntimeOptimizationReplayCtx().num_replayed_optimizations == 0 -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) ; // process the nodes that existed when the model was created @@ -1003,7 +1003,7 @@ Status SessionState::LoadFromOrtFormat(const fbs::SessionState& fbs_session_stat ORT_RETURN_IF_ERROR(add_kernel_by_hash(*node, node_kernel_info.kernel_def_hash)); } -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) // process the nodes that were added by replaying any loaded runtime optimizations for (const auto& [node_index, kernel_def_hash] : graph_.RuntimeOptimizationReplayCtx().produced_node_index_to_kernel_def_hash) { @@ -1013,7 +1013,7 @@ Status SessionState::LoadFromOrtFormat(const fbs::SessionState& fbs_session_stat ORT_RETURN_IF_ERROR(add_kernel_by_hash(*node, kernel_def_hash)); } -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) // lookup the hashes for any nodes we compiled. the nodes indexes for compiled nodes are not in node_indices // as they were created at runtime. @@ -1239,7 +1239,7 @@ Status SessionState::FinalizeSessionStateImpl(const std::basic_string valid_outer_scope_node_args; diff --git a/onnxruntime/core/framework/tensorprotoutils.h b/onnxruntime/core/framework/tensorprotoutils.h index 6a53974dfce2a..8b8a3d6ed0ecd 100644 --- a/onnxruntime/core/framework/tensorprotoutils.h +++ b/onnxruntime/core/framework/tensorprotoutils.h @@ -195,7 +195,7 @@ inline bool HasElementType(const ONNX_NAMESPACE::TypeProto& type_proto) { #if !defined(DISABLE_OPTIONAL_TYPE) if (HasOptionalTensorType(type_proto) && - HasShape(GetOptionalTypeProto(type_proto).tensor_type())) { + HasElemType(GetOptionalTypeProto(type_proto).tensor_type())) { return true; } #endif @@ -203,36 +203,77 @@ inline bool HasElementType(const ONNX_NAMESPACE::TypeProto& type_proto) { return false; } +// Try to get the element data type. +// The element data type value corresponds to TensorProto_DataType. It is applicable to types with shapes. +inline bool TryGetElementDataType(const ONNX_NAMESPACE::TypeProto& type_proto, int32_t& element_data_type) { + if (HasTensorType(type_proto) && HasElemType(type_proto.tensor_type())) { + element_data_type = type_proto.tensor_type().elem_type(); + return true; + } + +#if !defined(DISABLE_SPARSE_TENSORS) + if (HasSparseTensorType(type_proto) && HasElemType(type_proto.sparse_tensor_type())) { + element_data_type = type_proto.sparse_tensor_type().elem_type(); + return true; + } +#endif // !defined(DISABLE_SPARSE_TENSORS) + +#if !defined(DISABLE_OPTIONAL_TYPE) + if (HasOptionalTensorType(type_proto) && + HasElemType(GetOptionalTypeProto(type_proto).tensor_type())) { + element_data_type = GetOptionalTypeProto(type_proto).tensor_type().elem_type(); + return true; + } +#endif + + element_data_type = ONNX_NAMESPACE::TensorProto::UNDEFINED; + return false; +} + inline bool HasShape(const ONNX_NAMESPACE::TypeProto& type_proto) { if (HasTensorType(type_proto) && HasShape(type_proto.tensor_type())) { return true; } + #if !defined(DISABLE_SPARSE_TENSORS) if (HasSparseTensorType(type_proto) && HasShape(type_proto.sparse_tensor_type())) { return true; } #endif + +#if !defined(DISABLE_OPTIONAL_TYPE) + if (HasOptionalTensorType(type_proto) && HasShape(GetOptionalTypeProto(type_proto).tensor_type())) { + return true; + } +#endif + return false; } -inline const ONNX_NAMESPACE::TensorShapeProto& GetShape(const ONNX_NAMESPACE::TypeProto& type_proto) { +inline const ONNX_NAMESPACE::TensorShapeProto* TryGetShape(const ONNX_NAMESPACE::TypeProto& type_proto) { if (HasTensorType(type_proto) && HasShape(type_proto.tensor_type())) { - return type_proto.tensor_type().shape(); + return &type_proto.tensor_type().shape(); } #if !defined(DISABLE_SPARSE_TENSORS) if (HasSparseTensorType(type_proto) && HasShape(type_proto.sparse_tensor_type())) { - return type_proto.sparse_tensor_type().shape(); + return &type_proto.sparse_tensor_type().shape(); } #endif #if !defined(DISABLE_OPTIONAL_TYPE) if (HasOptionalTensorType(type_proto) && HasShape(GetOptionalTypeProto(type_proto).tensor_type())) { - return GetOptionalTypeProto(type_proto).tensor_type().shape(); + return &GetOptionalTypeProto(type_proto).tensor_type().shape(); } #endif - ORT_THROW("TypeProto must have shape for this to run"); + return nullptr; +} + +inline const ONNX_NAMESPACE::TensorShapeProto& GetShape(const ONNX_NAMESPACE::TypeProto& type_proto) { + const auto* shape = TryGetShape(type_proto); + ORT_ENFORCE(shape != nullptr, "TypeProto must have shape for this to run"); + return *shape; } inline bool HasRawData(const ONNX_NAMESPACE::TensorProto& ten_proto) { diff --git a/onnxruntime/core/graph/graph.cc b/onnxruntime/core/graph/graph.cc index 5f0a6a6973cee..ea2c91f14b169 100644 --- a/onnxruntime/core/graph/graph.cc +++ b/onnxruntime/core/graph/graph.cc @@ -290,7 +290,7 @@ bool NodeArg::HasTensorOrScalarShape() const { } } -#if !defined(ORT_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) void NodeArg::SetShape(const TensorShapeProto& shape) { const auto type_case = node_arg_info_.type().value_case(); switch (type_case) { @@ -354,6 +354,10 @@ void NodeArg::ClearShape() { } } +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + +#if !defined(ORT_MINIMAL_BUILD) + common::Status NodeArg::OverrideTypesHelper(const ONNX_NAMESPACE::TypeProto& input_type, int32_t input_tensor_elem_type, int32_t current_tensor_elem_type, @@ -383,8 +387,7 @@ common::Status NodeArg::OverrideTypesHelper(const ONNX_NAMESPACE::TypeProto& inp common::Status NodeArg::UpdateTypeAndShape(const ONNX_NAMESPACE::TypeProto& input_type, bool strict, bool override_types, const logging::Logger& logger) { if (!utils::HasType(node_arg_info_)) { - *node_arg_info_.mutable_type() = input_type; - type_ = DataTypeUtils::ToType(node_arg_info_.type()); + SetType(input_type); return Status::OK(); } @@ -504,12 +507,16 @@ void NodeArg::SetType(DataType p_type) { *(node_arg_info_.mutable_type()) = DataTypeUtils::ToTypeProto(p_type); } +#endif // !defined(ORT_MINIMAL_BUILD) + +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + void NodeArg::SetType(const TypeProto& type_proto) { type_ = DataTypeUtils::ToType(type_proto); *(node_arg_info_.mutable_type()) = type_proto; } -#endif // !defined(ORT_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) bool NodeArg::Exists() const noexcept { return exists_; @@ -938,13 +945,15 @@ ADD_ATTR_IMPL(SparseTensorProto, AttributeProto_AttributeType::AttributeProto_At ADD_LIST_ATTR_IMPL(SparseTensorProto, AttributeProto_AttributeType::AttributeProto_AttributeType_SPARSE_TENSORS, sparse_tensors) #endif -#if !defined(ORT_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) bool Node::ClearAttribute(const std::string& attr_name) { graph_->SetGraphResolveNeeded(); graph_->SetGraphProtoSyncNeeded(); return attributes_.erase(attr_name) > 0; } +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) Status Node::UpdateInputArgCount() { // The node refers to a primitive operator. // Infer and verify node input arg type information. @@ -1101,7 +1110,7 @@ Graph::Graph(const Model& owning_model, const logging::Logger& logger) : owning_model_(owning_model), graph_proto_(graph_proto), -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) runtime_optimizations_ptr_(std::make_unique()), runtime_optimizations_(*runtime_optimizations_ptr_), #endif @@ -1526,7 +1535,6 @@ void Graph::RemoveEdge(NodeIndex src_node_index, NodeIndex dst_node_index, int s GSL_SUPPRESS(es .84) // ignoring return value from unordered_map::insert causes noisy complaint Status Graph::BuildConnections(std::unordered_set& outer_scope_node_args_consumed) { const std::unordered_set& outer_scope_node_args = resolve_context_.outer_scope_node_args; - std::unordered_set inner_nodes; std::unordered_set node_args_consumed_by_subgraphs; @@ -1588,8 +1596,6 @@ Status Graph::BuildConnections(std::unordered_set& outer_scope_node Node& output_node = *entry->second.first; AddEdge(output_node.Index(), node->Index(), entry->second.second, input_slot_index); - inner_nodes.insert(&output_node); - // If this Graph was built manually, remove the implicit input from the graph outputs // if it is present there and not explicitly listed in the ordered graph outputs // (as that implies we should leave it as an output). @@ -1605,23 +1611,8 @@ Status Graph::BuildConnections(std::unordered_set& outer_scope_node } // now build connections within this Graph instance - node_arg_to_producer_node_.clear(); - node_arg_to_consumer_nodes_.clear(); - for (auto& node : Nodes()) { - // Need mutable input defs to be able to set any outer scope NodeArg implicit inputs - auto& input_args = node.MutableInputDefs(); - auto& output_args = node.MutableOutputDefs(); - - for (const auto* implicit_input : node.ImplicitInputDefs()) { - node_arg_to_consumer_nodes_[implicit_input->Name()].insert(node.Index()); - } - - for (const auto* output_arg : output_args) { - if (output_arg->Exists()) { - node_arg_to_producer_node_.insert({output_arg->Name(), node.Index()}); - } - } + const auto input_args = node.InputDefs(); if (!input_args.empty()) { // This node needs inputs. @@ -1634,7 +1625,6 @@ Status Graph::BuildConnections(std::unordered_set& outer_scope_node continue; } - node_arg_to_consumer_nodes_[input_arg->Name()].insert(node.Index()); const auto& input_arg_name = input_arg->Name(); auto output_arg_iter = resolve_context_.output_args.find(input_arg_name); if (resolve_context_.output_args.end() != output_arg_iter) { @@ -1642,8 +1632,6 @@ Status Graph::BuildConnections(std::unordered_set& outer_scope_node // Create relationship between this node (node), and the node providing the output (output_node). Node& output_node = *output_arg_iter->second.first; AddEdge(output_node.Index(), node.Index(), output_arg_iter->second.second, input_slot_index); - - inner_nodes.insert(&output_node); } else { // the value is either an input, an initializer, or coming from outer scope. we only need to take action // if coming from outer scope, so first check if this is a subgraph (otherwise there is no outer scope). @@ -1687,10 +1675,12 @@ Status Graph::BuildConnections(std::unordered_set& outer_scope_node } } + ORT_RETURN_IF_ERROR(PopulateNodeArgToProducerConsumerLookupsFromNodes()); + // finally check any node args consumed by subgraphs to see if they're available locally. // if not we add them to the list of outer scope values consumed. for (const auto& name : node_args_consumed_by_subgraphs) { - if (node_arg_to_producer_node_.count(name) == 0 && + if (node_arg_to_producer_node_.find(name) == node_arg_to_producer_node_.cend() && resolve_context_.inputs_and_initializers.find(name) == resolve_context_.inputs_and_initializers.cend()) { ORT_IGNORE_RETURN_VALUE(outer_scope_node_args_consumed.insert(name)); } @@ -2151,7 +2141,7 @@ Status Graph::InferAndVerifySubgraphTypes(const Node& node, Graph& subgraph, // The NodeArg's that implicit_input_defs point to would have any type/shape inferencing applied to them // by now. As the subgraph is referring to the outer scope NodeArg, we simply replace any information in // the subgraph with the details from the outer scope NodeArg. - auto implicit_input_defs = node.GetDefinitions().implicit_input_defs; + const auto& implicit_input_defs = node.GetDefinitions().implicit_input_defs; for (const auto* implicit_node_arg : implicit_input_defs) { auto subgraph_nodearg = subgraph.GetNodeArg(implicit_node_arg->Name()); @@ -3087,23 +3077,6 @@ Node& Graph::AddNode(const NodeProto& node_proto, node_proto.domain()); } -std::string Graph::GenerateNodeArgName(const std::string& base_name) { - std::string new_name = base_name; - // Check if new_name has been used in as any of node_args_' names. - // Check if new_name has been generated by this function. - // If both are not, add new_name into name set and return the new_name - // as the generated name. Otherwise, keep generating new names. - while (node_args_.find(new_name) != node_args_.end() || - generated_node_arg_names_.find(new_name) != generated_node_arg_names_.end()) { - std::ostringstream str; - str << base_name << "_token_" << name_generator_++; - new_name = str.str(); - } - - generated_node_arg_names_.insert(new_name); - return new_name; -} - static flatbuffers::Offset>> SaveInputsOutputsToOrtFormat(flatbuffers::FlatBufferBuilder& builder, const std::vector& src) { std::vector> vec(src.size()); @@ -3181,7 +3154,7 @@ common::Status Graph::SaveToOrtFormat(flatbuffers::FlatBufferBuilder& builder, auto nodes = builder.CreateVector(nodes_vec); auto node_edges = builder.CreateVector(node_edges_vec); -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) auto runtime_optimizations = flatbuffers::Offset{}; // null value if (!RuntimeOptimizations().IsEmpty()) { flatbuffers::Offset @@ -3202,12 +3175,31 @@ common::Status Graph::SaveToOrtFormat(flatbuffers::FlatBufferBuilder& builder, #if !defined(DISABLE_SPARSE_TENSORS) gb.add_sparse_initializers(sparse_initializers); #endif -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) gb.add_runtime_optimizations(runtime_optimizations); #endif fbs_graph = gb.Finish(); return Status::OK(); } +#endif // !defined(ORT_MINIMAL_BUILD) + +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) +std::string Graph::GenerateNodeArgName(const std::string& base_name) { + std::string new_name = base_name; + // Check if new_name has been used in as any of node_args_' names. + // Check if new_name has been generated by this function. + // If both are not, add new_name into name set and return the new_name + // as the generated name. Otherwise, keep generating new names. + while (node_args_.find(new_name) != node_args_.end() || + generated_node_arg_names_.find(new_name) != generated_node_arg_names_.end()) { + std::ostringstream str; + str << base_name << "_token_" << name_generator_++; + new_name = str.str(); + } + + generated_node_arg_names_.insert(new_name); + return new_name; +} std::string Graph::GenerateNodeName(const std::string& base_name) { // Define name-checking function for node name. @@ -3247,7 +3239,7 @@ std::string Graph::GenerateNodeName(const std::string& base_name) { return new_name; } -#endif // !defined(ORT_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) #if !defined(ORT_MINIMAL_BUILD) || defined(ORT_EXTENDED_MINIMAL_BUILD) Node& Graph::AddNode(const std::string& name, @@ -3805,6 +3797,25 @@ bool Graph::SetOpSchemaFromRegistryForNode(Node& node) { } #endif // !defined(ORT_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) +Status Graph::PopulateNodeArgToProducerConsumerLookupsFromNodes() { + node_arg_to_producer_node_.clear(); + node_arg_to_consumer_nodes_.clear(); + + for (const auto& node : Nodes()) { + node.ForEachDef([&](const NodeArg& node_arg, bool is_input) { + if (is_input) { + node_arg_to_consumer_nodes_[node_arg.Name()].insert(node.Index()); + } else { + node_arg_to_producer_node_.insert({node_arg.Name(), node.Index()}); + } + }); + } + + return Status::OK(); +} +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + #if !defined(ORT_MINIMAL_BUILD) || defined(ORT_EXTENDED_MINIMAL_BUILD) // calling private ctor GSL_SUPPRESS(r .11) @@ -4130,12 +4141,14 @@ void Graph::SetOutputs(const std::vector& outputs) { GraphResolveNeeded(true); } +#endif // !defined(ORT_MINIMAL_BUILD) + +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) void Graph::SetNodeArgType(NodeArg& arg, const ONNX_NAMESPACE::TypeProto& type_proto) { arg.SetType(type_proto); GraphResolveNeeded(true); } - -#endif // !defined(ORT_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) Graph::~Graph() { // nothing to do, but we put it here so we don't need to fully define types in Graph that are held in unique_ptr @@ -4264,7 +4277,7 @@ Graph::Graph(const Model& owning_model, const logging::Logger& logger) : owning_model_(owning_model), graph_proto_(&deserialized_proto_data_), -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) runtime_optimizations_ptr_(std::make_unique()), runtime_optimizations_(*runtime_optimizations_ptr_), #endif @@ -4411,14 +4424,17 @@ common::Status Graph::LoadFromOrtFormat(const onnxruntime::fbs::Graph& fbs_graph ORT_RETURN_IF_ERROR(add_node_args(fbs_graph.outputs(), graph_outputs_)); -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + // populate NodeArg lookups after loading Nodes and NodeArgs + ORT_RETURN_IF_ERROR(PopulateNodeArgToProducerConsumerLookupsFromNodes()); + // runtime optimizations if (const auto* fbs_runtime_optimizations = fbs_graph.runtime_optimizations()) { if (const auto* fbs_runtime_optimization_records = fbs_runtime_optimizations->records()) { ORT_RETURN_IF_ERROR(MutableRuntimeOptimizations().LoadFromOrtFormat(*fbs_runtime_optimization_records)); } } -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) return Status::OK(); } diff --git a/onnxruntime/core/graph/graph_utils.cc b/onnxruntime/core/graph/graph_utils.cc index db3cdcf3c40a8..2ace90ed1faad 100644 --- a/onnxruntime/core/graph/graph_utils.cc +++ b/onnxruntime/core/graph/graph_utils.cc @@ -190,13 +190,9 @@ static void MoveAllNodeOutputs(Graph& graph, Node& src_node, Node& target_node) #endif // !defined(ORT_MINIMAL_BUILD) -//---------------------------- -//--- end of local helpers --- -//---------------------------- - -#if !defined(ORT_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) -int GetIndexFromName(const Node& node, const std::string& name, bool is_input) { +static int GetIndexFromName(const Node& node, const std::string& name, bool is_input) { const auto& node_args = is_input ? node.InputDefs() : node.OutputDefs(); auto itr = std::find_if(node_args.begin(), node_args.end(), [&name](const NodeArg* node_arg) { return node_arg->Name() == name; }); @@ -206,14 +202,18 @@ int GetIndexFromName(const Node& node, const std::string& name, bool is_input) { return static_cast(index); } +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + +//---------------------------- +//--- end of local helpers --- +//---------------------------- + +#if !defined(ORT_MINIMAL_BUILD) + int GetNodeInputIndexFromInputName(const Node& node, const std::string& input_name) { return GetIndexFromName(node, input_name, true); } -int GetNodeOutputIndexFromOutputName(const Node& node, const std::string& output_name) { - return GetIndexFromName(node, output_name, false); -} - bool IsSupportedOptypeVersionAndDomain(const Node& node, const std::string& op_type, const std::initializer_list& versions, @@ -251,12 +251,6 @@ bool IsSupportedProvider(const Node& node, compatible_providers.find(node.GetExecutionProviderType()) == compatible_providers.end()); } -const ONNX_NAMESPACE::AttributeProto* GetNodeAttribute(const Node& node, const std::string& attr_name) { - const auto& attrs = node.GetAttributes(); - const auto iter = attrs.find(attr_name); - return iter == attrs.end() ? nullptr : &iter->second; -} - /** Checks for nodes with >= 1 outputs, if only one of the outputs is input to downstream Operators. Returns the name of the single used output in output_name. */ static bool IsOnlyOneOutputUsed(const Graph& graph, const Node& node, const std::string*& output_name) { @@ -489,26 +483,6 @@ const Node* FirstParentByType(const Node& node, const std::string& parent_type) return nullptr; } -NodeArg& AddInitializer(Graph& graph, const ONNX_NAMESPACE::TensorProto& new_initializer) { - // sanity check as AddInitializedTensor silently ignores attempts to add a duplicate initializer - const ONNX_NAMESPACE::TensorProto* existing = nullptr; - ORT_ENFORCE(!graph.GetInitializedTensor(new_initializer.name(), existing), - "Initializer with same name exists. Name:", new_initializer.name()); - - graph.AddInitializedTensor(new_initializer); - - ONNX_NAMESPACE::TypeProto new_type; - auto* typeproto_tensor = new_type.mutable_tensor_type(); - typeproto_tensor->set_elem_type(new_initializer.data_type()); - - auto* shape = typeproto_tensor->mutable_shape(); - for (auto dim : new_initializer.dims()) { - shape->add_dim()->set_dim_value(dim); - } - - return graph.GetOrCreateNodeArg(new_initializer.name(), &new_type); -} - void ReplaceDownstreamNodeInput(Graph& graph, Node& node, int output_idx, Node& replacement, int replacement_output_idx) { // get the output edges from node for output_idx std::vector output_edges = GraphEdge::GetNodeOutputEdges(node, output_idx); @@ -880,5 +854,39 @@ void GraphEdge::RemoveGraphEdges(Graph& graph, const std::vector& edg #endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_EXTENDED_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + +const ONNX_NAMESPACE::AttributeProto* GetNodeAttribute(const Node& node, const std::string& attr_name) { + const auto& attrs = node.GetAttributes(); + const auto iter = attrs.find(attr_name); + return iter == attrs.end() ? nullptr : &iter->second; +} + +NodeArg& AddInitializer(Graph& graph, const ONNX_NAMESPACE::TensorProto& new_initializer) { + // sanity check as AddInitializedTensor silently ignores attempts to add a duplicate initializer + const ONNX_NAMESPACE::TensorProto* existing = nullptr; + ORT_ENFORCE(!graph.GetInitializedTensor(new_initializer.name(), existing), + "Initializer with same name exists. Name:", new_initializer.name()); + + graph.AddInitializedTensor(new_initializer); + + ONNX_NAMESPACE::TypeProto new_type; + auto* typeproto_tensor = new_type.mutable_tensor_type(); + typeproto_tensor->set_elem_type(new_initializer.data_type()); + + auto* shape = typeproto_tensor->mutable_shape(); + for (auto dim : new_initializer.dims()) { + shape->add_dim()->set_dim_value(dim); + } + + return graph.GetOrCreateNodeArg(new_initializer.name(), &new_type); +} + +int GetNodeOutputIndexFromOutputName(const Node& node, const std::string& output_name) { + return GetIndexFromName(node, output_name, false); +} + +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + } // namespace graph_utils } // namespace onnxruntime diff --git a/onnxruntime/core/graph/graph_utils.h b/onnxruntime/core/graph/graph_utils.h index 2b0302aa26e71..466d31a59a1a8 100644 --- a/onnxruntime/core/graph/graph_utils.h +++ b/onnxruntime/core/graph/graph_utils.h @@ -16,6 +16,23 @@ namespace onnxruntime { namespace graph_utils { +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + +/** Returns the attribute of a Node with a given name. */ +const ONNX_NAMESPACE::AttributeProto* GetNodeAttribute(const Node& node, const std::string& attr_name); + +/** Add a new initializer to 'graph'. +Checks that new_initializer does not already exist in 'graph' before adding it. +@returns The NodeArg for the new initializer. +@remarks No matching graph input is created, so the initializer will be constant. +*/ +NodeArg& AddInitializer(Graph& graph, const ONNX_NAMESPACE::TensorProto& new_initializer); + +/** Gets the index of an output arg with the specified output arg name. */ +int GetNodeOutputIndexFromOutputName(const Node& node, const std::string& output_name); + +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) + #if !defined(ORT_MINIMAL_BUILD) /** Checks if the operator's type, version, and domain of the given node match the given values. */ bool IsSupportedOptypeVersionAndDomain(const Node& node, @@ -55,13 +72,6 @@ bool IsInitializer(const Graph& graph, const std::string& name, bool check_outer */ bool IsConstantInitializer(const Graph& graph, const std::string& name, bool check_outer_scope = true); -/** Add a new initializer to 'graph'. -Checks that new_initializer does not already exist in 'graph' before adding it. -@returns The NodeArg for the new initializer. -@remarks No matching graph input is created, so the initializer will be constant. -*/ -NodeArg& AddInitializer(Graph& graph, const ONNX_NAMESPACE::TensorProto& new_initializer); - /** Checks if the given NodeArg is constant, i.e., it appears in the graph's initializers but not in its inputs. */ bool NodeArgIsConstant(const Graph& graph, const NodeArg& node_arg); @@ -73,12 +83,6 @@ bool AllNodeInputsAreConstant(const Graph& graph, const Node& node, InitializedT /** Gets the index of an input arg with the specified input arg name. */ int GetNodeInputIndexFromInputName(const Node& node, const std::string& input_name); -/** Gets the index of an output arg with the specified output arg name. */ -int GetNodeOutputIndexFromOutputName(const Node& node, const std::string& output_name); - -/** Returns the attribute of a Node with a given name. */ -const ONNX_NAMESPACE::AttributeProto* GetNodeAttribute(const Node& node, const std::string& attr_name); - /** Retrieves the values for a repeated attribute of a node and place them to the values vector. */ template bool GetRepeatedNodeAttributeValues(const Node& node, diff --git a/onnxruntime/core/graph/runtime_optimization_record_container.cc b/onnxruntime/core/graph/runtime_optimization_record_container.cc index 1a0223292b9bd..35707db8e8795 100644 --- a/onnxruntime/core/graph/runtime_optimization_record_container.cc +++ b/onnxruntime/core/graph/runtime_optimization_record_container.cc @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) #include "core/graph/runtime_optimization_record_container.h" @@ -183,4 +183,4 @@ Status RuntimeOptimizationRecordContainer::LoadFromOrtFormat( } // namespace onnxruntime -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) diff --git a/onnxruntime/core/graph/runtime_optimization_record_container.h b/onnxruntime/core/graph/runtime_optimization_record_container.h index 3b0866e72cf6d..35d2509c5b2af 100644 --- a/onnxruntime/core/graph/runtime_optimization_record_container.h +++ b/onnxruntime/core/graph/runtime_optimization_record_container.h @@ -3,7 +3,7 @@ #pragma once -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) #include #include @@ -60,4 +60,4 @@ class RuntimeOptimizationRecordContainer { } // namespace onnxruntime -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) diff --git a/onnxruntime/core/optimizer/graph_transformer_utils.cc b/onnxruntime/core/optimizer/graph_transformer_utils.cc index d4c4fa61fb82b..ad1da8a266642 100644 --- a/onnxruntime/core/optimizer/graph_transformer_utils.cc +++ b/onnxruntime/core/optimizer/graph_transformer_utils.cc @@ -259,7 +259,7 @@ std::vector> GenerateTransformers( #endif // !defined(ORT_MINIMAL_BUILD) -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) std::vector> GenerateTransformersForRuntimeOptimizations( TransformerLevel level, @@ -290,6 +290,6 @@ std::vector> GenerateTransformersForRuntimeOpt return transformers; } -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) } // namespace onnxruntime::optimizer_utils diff --git a/onnxruntime/core/optimizer/nhwc_transformer.cc b/onnxruntime/core/optimizer/nhwc_transformer.cc index 725f8e3c3a235..36ed8b38e980e 100644 --- a/onnxruntime/core/optimizer/nhwc_transformer.cc +++ b/onnxruntime/core/optimizer/nhwc_transformer.cc @@ -21,7 +21,7 @@ Status NhwcTransformer::ApplyImpl(Graph& graph, bool& modified, int graph_level, ORT_RETURN_IF_ERROR(Recurse(node, modified, graph_level, logger)); } - auto api_graph = MakeApiGraph(graph, cpu_allocator_, logger, kCpuExecutionProvider); + auto api_graph = MakeApiGraph(graph, cpu_allocator_, kCpuExecutionProvider); modified = false; for (std::unique_ptr& node : api_graph->Nodes()) { diff --git a/onnxruntime/core/optimizer/selectors_actions/selector_action_transformer.cc b/onnxruntime/core/optimizer/selectors_actions/selector_action_transformer.cc index 892ac73853481..c027002db1b87 100644 --- a/onnxruntime/core/optimizer/selectors_actions/selector_action_transformer.cc +++ b/onnxruntime/core/optimizer/selectors_actions/selector_action_transformer.cc @@ -176,7 +176,7 @@ Status SelectorActionTransformer::ApplySelectorsAndActions( #endif // !defined(ORT_MINIMAL_BUILD) -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) static Status RegisterProducedNodesWithGraph(NodeIndex pre_action_max_num_nodes, NodeIndex post_action_max_num_nodes, const RuntimeOptimizationRecord& record, @@ -253,17 +253,17 @@ Status SelectorActionTransformer::ApplySavedRuntimeOptimizations( return Status::OK(); } -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) Status SelectorActionTransformer::ApplyImpl(Graph& graph, bool& modified, int graph_level, const logging::Logger& logger) const { if (std::holds_alternative(apply_context_)) { -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) return ApplySavedRuntimeOptimizations(graph, modified, graph_level, logger); -#else // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#else // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) return ORT_MAKE_STATUS(ONNXRUNTIME, FAIL, "Loading runtime optimizations is not enabled in this build."); -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) } assert(std::holds_alternative(apply_context_) || diff --git a/onnxruntime/core/optimizer/selectors_actions/selector_action_transformer.h b/onnxruntime/core/optimizer/selectors_actions/selector_action_transformer.h index 2b8504c2c1cc8..339c432939d1a 100644 --- a/onnxruntime/core/optimizer/selectors_actions/selector_action_transformer.h +++ b/onnxruntime/core/optimizer/selectors_actions/selector_action_transformer.h @@ -130,11 +130,11 @@ class SelectorActionTransformer : public GraphTransformer { #endif // !defined(ORT_MINIMAL_BUILD) -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) // apply optimizations by replaying saved runtime optimizations Status ApplySavedRuntimeOptimizations(Graph& graph, bool& modified, int graph_level, const logging::Logger& logger) const; -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) SelectorActionRegistry selector_action_registry_; diff --git a/onnxruntime/core/optimizer/transpose_optimizer/api.h b/onnxruntime/core/optimizer/transpose_optimizer/api.h index 98f6c833dc540..61445c101f230 100644 --- a/onnxruntime/core/optimizer/transpose_optimizer/api.h +++ b/onnxruntime/core/optimizer/transpose_optimizer/api.h @@ -382,8 +382,8 @@ class GraphRef { /// /// Copies shape and dtype value info from one output to another, potentially including data that cannot be encoded - /// in the ValueInfo class (like symbolic shape information). Destination dtype must be compatible with source dtype - /// if known. + /// in the ValueInfo class (like symbolic shape information). If already set, the destination dtype should be equal + /// to the source dtype. /// /// /// diff --git a/onnxruntime/core/optimizer/transpose_optimizer/api_impl.cc b/onnxruntime/core/optimizer/transpose_optimizer/api_impl.cc index ab1d3d13d276f..a5bec56a395b7 100644 --- a/onnxruntime/core/optimizer/transpose_optimizer/api_impl.cc +++ b/onnxruntime/core/optimizer/transpose_optimizer/api_impl.cc @@ -21,7 +21,7 @@ class ApiValueInfo final : public api::ValueInfoRef { NodeArg& node_arg_; public: - explicit ApiValueInfo(NodeArg& node_arg) : node_arg_(node_arg){} + explicit ApiValueInfo(NodeArg& node_arg) : node_arg_(node_arg) {} std::string_view Name() const override; std::optional> Shape() const override; api::DataType DType() const override; @@ -41,7 +41,7 @@ class ApiTensor final : public api::TensorRef { AllocatorPtr cpu_allocator_; public: - explicit ApiTensor(const onnx::TensorProto& tensor_proto, const Path& model_path, AllocatorPtr cpu_allocator) + explicit ApiTensor(const onnx::TensorProto& tensor_proto, const Path& model_path, AllocatorPtr cpu_allocator) : tensor_proto_(tensor_proto), model_path_(model_path), cpu_allocator_(std::move(cpu_allocator)) {} const onnx::TensorProto& TensorProto() { @@ -63,7 +63,7 @@ class ApiNode final : public api::NodeRef { Graph& graph_; public: - explicit ApiNode(onnxruntime::Node& node, Graph& graph) : node_(node), graph_(graph){} + explicit ApiNode(onnxruntime::Node& node, Graph& graph) : node_(node), graph_(graph) {} onnxruntime::Node& Node() { return node_; @@ -93,13 +93,11 @@ class ApiGraph final : public api::GraphRef { private: onnxruntime::Graph& graph_; AllocatorPtr cpu_allocator_; - const logging::Logger& logger_; const char* new_node_ep_; public: - explicit ApiGraph(onnxruntime::Graph& graph, AllocatorPtr cpu_allocator, const logging::Logger& logger, - const char* new_node_ep) : graph_(graph), cpu_allocator_(std::move(cpu_allocator)), - logger_(logger), new_node_ep_(new_node_ep){} + explicit ApiGraph(onnxruntime::Graph& graph, AllocatorPtr cpu_allocator, const char* new_node_ep) + : graph_(graph), cpu_allocator_(std::move(cpu_allocator)), new_node_ep_(new_node_ep) {} onnxruntime::Graph& Graph() { return graph_; @@ -115,7 +113,7 @@ class ApiGraph final : public api::GraphRef { void TransposeInitializer(std::string_view name, const std::vector& perm) override; void ReshapeInitializer(std::string_view name, const std::vector& shape) override; std::unique_ptr AddNode(std::string_view op_type, const std::vector& inputs, - size_t num_outputs = 1, std::string_view domain = "") override; + size_t num_outputs = 1, std::string_view domain = "") override; void RemoveNode(api::NodeRef& node) override; void RemoveInitializer(std::string_view name) override; std::string_view AddInitializer(api::DataType dtype, const std::vector& shape, @@ -139,11 +137,11 @@ const onnx::TensorShapeProto* GetNodeArgShape(const NodeArg* node_arg) { } const auto* type = node_arg->TypeAsProto(); - if (type == nullptr || !utils::HasShape(*type)) { + if (type == nullptr) { return nullptr; } - return &utils::GetShape(*type); + return utils::TryGetShape(*type); } std::optional> ApiValueInfo::Shape() const { @@ -352,7 +350,6 @@ void ApiNode::SetInput(size_t i, std::string_view name) { // Append 1. Technically wrong if last input is variadic (but it never is) args_count.push_back(1); } - } NodeArg* old_node_arg = mutable_input_defs[i]; @@ -677,23 +674,35 @@ void ApiGraph::MoveOutput(api::NodeRef& src_node, size_t src_idx, api::NodeRef& } void ApiGraph::CopyValueInfo(std::string_view src_name, std::string_view dst_name) { - NodeArg* src_arg = graph_.GetNodeArg(std::string(src_name)); - if (src_arg != nullptr) { - NodeArg& dst_arg = graph_.GetOrCreateNodeArg(std::string(dst_name), src_arg->TypeAsProto()); - const TensorShapeProto* shape = src_arg->Shape(); - if (shape == nullptr) { - dst_arg.ClearShape(); - } else { - dst_arg.SetShape(*shape); - } + const NodeArg* src_arg = graph_.GetNodeArg(std::string(src_name)); + if (!src_arg) { + return; + } - ORT_THROW_IF_ERROR(dst_arg.UpdateTypeAndShape(*src_arg, /*strict*/ false, /*override_types*/ false, logger_)); + const TypeProto* src_type = src_arg->TypeAsProto(); + if (!src_type) { + return; } + + NodeArg& dst_arg = graph_.GetOrCreateNodeArg(std::string(dst_name), nullptr); + + if (auto* dst_type = dst_arg.TypeAsProto(); dst_type != nullptr) { + int32_t src_data_element_type; + utils::TryGetElementDataType(*src_type, src_data_element_type); + int32_t dst_data_element_type; + const bool dst_data_element_type_present = utils::TryGetElementDataType(*dst_type, dst_data_element_type); + + ORT_ENFORCE(dst_type->value_case() == src_type->value_case() && + (!dst_data_element_type_present || dst_data_element_type == src_data_element_type), + "Existing destination type is not compatible with source type."); + } + + graph_.SetNodeArgType(dst_arg, *src_type); } std::unique_ptr MakeApiGraph(onnxruntime::Graph& graph, AllocatorPtr cpu_allocator, - const logging::Logger& logger, const char* new_node_ep) { - return std::make_unique(graph, std::move(cpu_allocator), logger, new_node_ep); + const char* new_node_ep) { + return std::make_unique(graph, std::move(cpu_allocator), new_node_ep); } onnxruntime::Graph& GraphFromApiGraph(onnx_layout_transformation::api::GraphRef& graph) { diff --git a/onnxruntime/core/optimizer/transpose_optimizer/api_impl.h b/onnxruntime/core/optimizer/transpose_optimizer/api_impl.h index 0b1734384cc41..e84d1a7d2a229 100644 --- a/onnxruntime/core/optimizer/transpose_optimizer/api_impl.h +++ b/onnxruntime/core/optimizer/transpose_optimizer/api_impl.h @@ -18,13 +18,11 @@ namespace onnxruntime { /// /// ORT Graph to wrap with API /// Allocator used for reshaping/transposing tensors -/// Logger /// New nodes are assigned to this EP, or left unassigned if nullptr /// api::GraphRef for use with transpose optimizer std::unique_ptr MakeApiGraph(onnxruntime::Graph& graph, - AllocatorPtr cpu_allocator, - const logging::Logger& logger, - const char* new_node_ep); + AllocatorPtr cpu_allocator, + const char* new_node_ep); /// /// Reveals underlying ORT graph from an api::GraphRef diff --git a/onnxruntime/core/optimizer/transpose_optimizer/ort_transpose_optimizer.cc b/onnxruntime/core/optimizer/transpose_optimizer/ort_transpose_optimizer.cc index 13d1b873250ee..80a1472cdea81 100644 --- a/onnxruntime/core/optimizer/transpose_optimizer/ort_transpose_optimizer.cc +++ b/onnxruntime/core/optimizer/transpose_optimizer/ort_transpose_optimizer.cc @@ -17,7 +17,7 @@ using namespace onnx_layout_transformation; namespace onnxruntime { Status TransposeOptimizer::ApplyImpl(Graph& graph, bool& modified, int graph_level, const logging::Logger& logger) const { - auto api_graph = MakeApiGraph(graph, cpu_allocator_, logger, /*new_node_ep*/ nullptr); + auto api_graph = MakeApiGraph(graph, cpu_allocator_, /*new_node_ep*/ nullptr); if (onnx_layout_transformation::Optimize(*api_graph, /*allow_extended_ops*/ false)) { modified = true; } diff --git a/onnxruntime/core/session/inference_session.cc b/onnxruntime/core/session/inference_session.cc index e36808dba2778..71aa9bc499fbb 100644 --- a/onnxruntime/core/session/inference_session.cc +++ b/onnxruntime/core/session/inference_session.cc @@ -120,11 +120,10 @@ Status VerifyEachNodeIsAssignedToAnEpImpl(const Graph& graph, bool is_verbose, #endif // !defined(ORT_MINIMAL_BUILD) // recurse into subgraphs - const auto subgraphs = node.GetSubgraphs(); - for (const auto& subgraph : subgraphs) { - const auto status = VerifyEachNodeIsAssignedToAnEpImpl(*subgraph, is_verbose, node_placements); - if (!status.IsOK()) { - return status; + if (node.ContainsSubgraph()) { + const auto subgraphs = node.GetSubgraphs(); + for (const auto& subgraph : subgraphs) { + ORT_RETURN_IF_ERROR(VerifyEachNodeIsAssignedToAnEpImpl(*subgraph, is_verbose, node_placements)); } } } @@ -1149,7 +1148,7 @@ Status PartitionOrtFormatModel(onnxruntime::Graph& graph, return Status::OK(); } -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) Status ReplaySavedRuntimeOptimizations( onnxruntime::Graph& graph, const logging::Logger& logger, const SessionOptions& session_options) { bool modified = false; @@ -1167,7 +1166,7 @@ Status ReplaySavedRuntimeOptimizations( return Status::OK(); } -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) #endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_EXTENDED_MINIMAL_BUILD) Status AssignNodesToEpsFromHashesImpl(Graph& graph, const fbs::SessionState& fbs_session_state, @@ -1207,12 +1206,12 @@ Status AssignNodesToEpsFromHashesImpl(Graph& graph, const fbs::SessionState& fbs ORT_RETURN_IF_ERROR(set_node_ep(node_kernel_info.node_index, node_kernel_info.kernel_def_hash)); } -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) for (const auto& [node_index, kernel_def_hash] : graph.RuntimeOptimizationReplayCtx().produced_node_index_to_kernel_def_hash) { ORT_RETURN_IF_ERROR(set_node_ep(node_index, kernel_def_hash)); } -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) return Status::OK(); } @@ -1398,9 +1397,9 @@ common::Status InferenceSession::Initialize() { *session_state_)); } -#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#if !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) ORT_RETURN_IF_ERROR_SESSIONID_(ReplaySavedRuntimeOptimizations(graph, *session_logger_, session_options_)); -#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD) +#endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD) #endif // !defined(ORT_MINIMAL_BUILD) || defined(ORT_EXTENDED_MINIMAL_BUILD) ORT_RETURN_IF_ERROR(AssignNodesToEpsFromHashes(graph, *serialized_session_state, kernel_registry_manager_, diff --git a/tools/ci_build/github/azure-pipelines/linux-cpu-minimal-build-ci-pipeline.yml b/tools/ci_build/github/azure-pipelines/linux-cpu-minimal-build-ci-pipeline.yml index a51fe2d60b270..644e5b40bf7a2 100644 --- a/tools/ci_build/github/azure-pipelines/linux-cpu-minimal-build-ci-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/linux-cpu-minimal-build-ci-pipeline.yml @@ -171,7 +171,7 @@ jobs: --build_shared_lib \ --parallel \ --minimal_build extended \ - --cmake_extra_defines onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD=ON + --cmake_extra_defines onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD=ON workingDirectory: $(Build.SourcesDirectory) - task: CmdLine@2 @@ -259,7 +259,7 @@ jobs: --include_ops_by_config /home/onnxruntimedev/.test_data/include_no_operators.config \ --cmake_extra_defines onnxruntime_DISABLE_SPARSE_TENSORS=ON \ onnxruntime_DISABLE_OPTIONAL_TYPE=ON \ - onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_REPLAY_IN_MINIMAL_BUILD=OFF \ + onnxruntime_ENABLE_RUNTIME_OPTIMIZATION_IN_MINIMAL_BUILD=OFF \ onnxruntime_BUILD_UNIT_TESTS=OFF workingDirectory: $(Build.SourcesDirectory) From 68262cce86bff8805b0bae9b26030845e7e87d38 Mon Sep 17 00:00:00 2001 From: Guoyu Wang <62914304+gwang-msft@users.noreply.github.com> Date: Mon, 31 Jan 2022 14:36:31 -0800 Subject: [PATCH 06/56] [NNAPI QDQ] Add QDQ Conv support (#10418) * Add qdq conv to NNAPI * fix build warning * addressed CR comments * fix a minor bug in my previous merge --- .../nnapi/nnapi_builtin/builders/helper.cc | 86 +++++++++++-------- .../nnapi/nnapi_builtin/builders/helper.h | 17 ++-- .../nnapi_builtin/builders/model_builder.cc | 52 ++++++----- .../nnapi_builtin/builders/op_builder.cc | 13 ++- .../builders/op_support_checker.cc | 16 ++-- .../providers/shared/node_unit/node_unit.cc | 19 ++-- .../test/providers/nnapi/nnapi_basic_test.cc | 15 ---- 7 files changed, 117 insertions(+), 101 deletions(-) diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc index 339f1e1f65273..eecf188822479 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc @@ -48,24 +48,31 @@ std::string GetErrorCause(int error_code) { } } -QLinearOpType GetQLinearOpType(const onnxruntime::Node& node) { - const auto& op_type = node.OpType(); - if (op_type == "DequantizeLinear") - return QLinearOpType::DequantizeLinear; - else if (op_type == "QuantizeLinear") - return QLinearOpType::QuantizeLinear; - else if (op_type == "QLinearConv") - return QLinearOpType::QLinearConv; - else if (op_type == "QLinearMatMul") - return QLinearOpType::QLinearMatMul; - else if (op_type == "QLinearAdd") - return QLinearOpType::QLinearAdd; - else if (op_type == "QLinearSigmoid") - return QLinearOpType::QLinearSigmoid; - else if (op_type == "QLinearAveragePool") - return QLinearOpType::QLinearAveragePool; - - return QLinearOpType::Unknown; +QuantizedOpType GetQuantizedOpType(const NodeUnit& node_unit) { + const auto& op_type = node_unit.OpType(); + if (node_unit.UnitType() == NodeUnit::Type::SingleNode) { + if (op_type == "DequantizeLinear") + return QuantizedOpType::DequantizeLinear; + else if (op_type == "QuantizeLinear") + return QuantizedOpType::QuantizeLinear; + else if (op_type == "QLinearConv") + return QuantizedOpType::QLinearConv; + else if (op_type == "QLinearMatMul") + return QuantizedOpType::QLinearMatMul; + else if (op_type == "QLinearAdd") + return QuantizedOpType::QLinearAdd; + else if (op_type == "QLinearSigmoid") + return QuantizedOpType::QLinearSigmoid; + else if (op_type == "QLinearAveragePool") + return QuantizedOpType::QLinearAveragePool; + } else if (node_unit.UnitType() == NodeUnit::Type::QDQGroup) { + if (op_type == "Conv") + return QuantizedOpType::QDQConv; + } else { + // throw? + } + + return QuantizedOpType::Unknown; } ConvType GetConvType(const NodeUnit& node_unit, const InitializedTensorSet& initializers) { @@ -89,10 +96,15 @@ ConvType GetConvType(const NodeUnit& node_unit, const InitializedTensorSet& init return ConvType::Grouped; } -bool IsQLinearBinaryOp(QLinearOpType qlinear_op_type) { - return qlinear_op_type == QLinearOpType::QLinearConv || - qlinear_op_type == QLinearOpType::QLinearMatMul || - qlinear_op_type == QLinearOpType::QLinearAdd; +bool IsQuantizedConv(QuantizedOpType quant_op_type) { + return (quant_op_type == QuantizedOpType::QLinearConv) || + (quant_op_type == QuantizedOpType::QDQConv); +} + +bool IsQuantizedBinaryOp(QuantizedOpType quant_op_type) { + return quant_op_type == QuantizedOpType::QLinearMatMul || + quant_op_type == QuantizedOpType::QLinearAdd || + IsQuantizedConv(quant_op_type); } bool HasValidUnaryOpQuantizedInputs(const NodeUnit& node_unit) { @@ -111,9 +123,9 @@ bool HasValidUnaryOpQuantizedInputs(const NodeUnit& node_unit) { } bool HasValidBinaryOpQuantizedInputs(const NodeUnit& node_unit) { - auto op_type = GetQLinearOpType(node_unit.GetNode()); + auto quant_op_type = GetQuantizedOpType(node_unit); int32_t a_input_type, b_input_type; - if (!IsQLinearBinaryOp(op_type)) { + if (!IsQuantizedBinaryOp(quant_op_type)) { LOGS_DEFAULT(VERBOSE) << "[" << node_unit.OpType() << "] is not a binary qlinear op"; return false; } @@ -126,14 +138,14 @@ bool HasValidBinaryOpQuantizedInputs(const NodeUnit& node_unit) { // QlinearConv supports u8u8 or u8s8 // QLinearMatMul/Add only support u8u8 - bool is_qlinear_conv = op_type == QLinearOpType::QLinearConv; + bool is_quant_conv = IsQuantizedConv(quant_op_type); bool has_valid_qlinear_conv_weight = (b_input_type == ONNX_NAMESPACE::TensorProto_DataType_UINT8 || b_input_type == ONNX_NAMESPACE::TensorProto_DataType_INT8); if (a_input_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8 || - (!is_qlinear_conv && a_input_type != b_input_type) || - (is_qlinear_conv && !has_valid_qlinear_conv_weight)) { + (!is_quant_conv && a_input_type != b_input_type) || + (is_quant_conv && !has_valid_qlinear_conv_weight)) { LOGS_DEFAULT(VERBOSE) << "[" << node_unit.OpType() << "] A Input type: [" << a_input_type << "] B Input type: [" << b_input_type @@ -147,9 +159,9 @@ bool HasValidBinaryOpQuantizedInputs(const NodeUnit& node_unit) { bool HasValidQuantizationScales(const InitializedTensorSet& initializers, const NodeUnit& node_unit, const std::vector& indices, const OpSupportCheckParams& params, bool is_input) { const auto& op_type = node_unit.OpType(); - auto qlinear_op_type = GetQLinearOpType(node_unit.GetNode()); - bool is_qlinear_conv = (qlinear_op_type == QLinearOpType::QLinearConv); - bool is_qlinear_matmul = (qlinear_op_type == QLinearOpType::QLinearMatMul); + auto quant_op_type = GetQuantizedOpType(node_unit); + bool is_quant_conv = IsQuantizedConv(quant_op_type); + bool is_quant_matmul = (quant_op_type == QuantizedOpType::QLinearMatMul); const auto& io_defs = is_input ? node_unit.Inputs() : node_unit.Outputs(); for (const auto idx : indices) { if (idx >= io_defs.size()) { @@ -174,7 +186,7 @@ bool HasValidQuantizationScales(const InitializedTensorSet& initializers, const } // If this op is Qlinear[Conv/MatMul], we want to check u8s8 support for weight tensor (or B tensor for QlinearMatMul) - bool is_conv_matmul_weight = is_input && (is_qlinear_conv || is_qlinear_matmul) && idx == 1; + bool is_conv_matmul_weight = is_input && (is_quant_conv || is_quant_matmul) && idx == 1; bool is_conv_matmul_u8s8_weight = false; if (is_conv_matmul_weight) { @@ -194,7 +206,7 @@ bool HasValidQuantizationScales(const InitializedTensorSet& initializers, const // For u8s8 Qlinear[Conv/MatMul], we support // 1. Per-tensor, the weight will be transformed to uint8 later // 2. Per-channel, only from Android API level 29 - if (is_qlinear_matmul) { + if (is_quant_matmul) { LOGS_DEFAULT(VERBOSE) << "QLinearMatMul does not support per-channel quantization"; return false; } @@ -221,9 +233,9 @@ bool HasValidQuantizationScales(const InitializedTensorSet& initializers, const bool HasValidQuantizationZeroPoints(const InitializedTensorSet& initializers, const NodeUnit& node_unit, const std::vector& indices, bool is_input) { const auto& op_type = node_unit.OpType(); - auto qlinear_op_type = GetQLinearOpType(node_unit.GetNode()); - bool is_qlinear_conv = (qlinear_op_type == QLinearOpType::QLinearConv); - bool is_qlinear_matmul = (qlinear_op_type == QLinearOpType::QLinearMatMul); + auto quant_op_type = GetQuantizedOpType(node_unit); + bool is_quant_conv = IsQuantizedConv(quant_op_type); + bool is_quant_matmul = (quant_op_type == QuantizedOpType::QLinearMatMul); const auto& io_defs = is_input ? node_unit.Inputs() : node_unit.Outputs(); for (const auto idx : indices) { @@ -251,7 +263,7 @@ bool HasValidQuantizationZeroPoints(const InitializedTensorSet& initializers, co return false; } - bool is_conv_matmul_weight = is_input && (is_qlinear_conv || is_qlinear_matmul) && idx == 1; + bool is_conv_matmul_weight = is_input && (is_quant_conv || is_quant_matmul) && idx == 1; bool is_conv_matmul_u8s8_weight = false; if (is_conv_matmul_weight) { @@ -279,7 +291,7 @@ bool HasValidQuantizationZeroPoints(const InitializedTensorSet& initializers, co } if (zero_dim != 1) { - if (is_qlinear_matmul) { + if (is_quant_matmul) { LOGS_DEFAULT(VERBOSE) << "QLinearMatMul does not support per-channel quantization"; return false; } diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h index c3729fb1c8f10..fe0b1ea51b437 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h @@ -73,8 +73,8 @@ struct OpSupportCheckParams; std::string GetErrorCause(int error_code); -enum class QLinearOpType : uint8_t { - Unknown, // Unknown or not a linear quantized op +enum class QuantizedOpType : uint8_t { + Unknown, // Unknown or not a quantized NodeUnit DequantizeLinear, QuantizeLinear, QLinearConv, @@ -85,6 +85,8 @@ enum class QLinearOpType : uint8_t { // Not yet supported // QLinearMul, // QLinearReduceMean, + QDQConv, + // TODO, add other QDQ NodeUnit types }; enum class ConvType : uint8_t { @@ -93,15 +95,18 @@ enum class ConvType : uint8_t { Grouped, }; -QLinearOpType GetQLinearOpType(const onnxruntime::Node& node); +QuantizedOpType GetQuantizedOpType(const NodeUnit& node_unit); // Return the type of the conv ops, // This function assumes the input is a 2d conv node ConvType GetConvType(const NodeUnit& node_unit, const InitializedTensorSet& initializers); -// This qlinear op is an operator takes 2 inputs and produces 1 output -// Such as QLinearConv, QLinearMatMul, QLinearAdd, ... -bool IsQLinearBinaryOp(QLinearOpType qlinear_op_type); +// If this is a quantized Conv (QLinearConv or QDQConv) +bool IsQuantizedConv(QuantizedOpType quant_op_type); + +// This quantized op is an operator or qdq node unit takes 2 inputs and produces 1 output +// Such as QLinearConv, QLinearMatMul, QLinearAdd, QDQConv,... +bool IsQuantizedBinaryOp(QuantizedOpType quant_op_type); // Check if a qlinear unary op has valid inputs, Qlinear[Sigmoid/AveragePool] bool HasValidUnaryOpQuantizedInputs(const NodeUnit& node_unit); diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/model_builder.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/model_builder.cc index d599d573514e7..0037e1a1d487d 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/model_builder.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/model_builder.cc @@ -158,14 +158,10 @@ void ModelBuilder::PreprocessNodeUnits() { // Help to get all quantized operators' input and the NodeUnit(s) using the input void ModelBuilder::GetAllQuantizedOpInputs() { for (const auto& node_unit : node_unit_holder_) { - // TODO, hookup getting quantized inputs with QDQ NodeUnits and remove the ORT_ENFORCE - ORT_ENFORCE(node_unit->UnitType() == NodeUnit::Type::SingleNode, "QDQ NodeUnit is not yet implemented"); + auto quant_op_type = GetQuantizedOpType(*node_unit); - auto qlinear_op_type = GetQLinearOpType(node_unit->GetNode()); - - // Not a qlinear op - // TODO, add handling for QDQ NodeUnit - if (qlinear_op_type == QLinearOpType::Unknown) + // Not a qlinear op or qdq node group + if (quant_op_type == QuantizedOpType::Unknown) continue; const auto add_quantized_input = @@ -174,12 +170,12 @@ void ModelBuilder::GetAllQuantizedOpInputs() { all_quantized_op_inputs[input_name].push_back(&node_unit); }; - // All qlinear ops EXCEPT QuantizeLinear has quantized input - if (qlinear_op_type != QLinearOpType::QuantizeLinear) { + // All quantized ops EXCEPT QuantizeLinear has quantized input + if (quant_op_type != QuantizedOpType::QuantizeLinear) { add_quantized_input(*node_unit, 0); } - if (IsQLinearBinaryOp(qlinear_op_type)) { + if (IsQuantizedBinaryOp(quant_op_type)) { add_quantized_input(*node_unit, 1); } @@ -494,14 +490,29 @@ Status ModelBuilder::AddOperandFromPersistMemoryBuffer( Status ModelBuilder::AddOperations() { const auto& node_indices = graph_viewer_.GetNodesInTopologicalOrder(); - std::unordered_set processed_node_units; - processed_node_units.reserve(node_unit_holder_.size()); - for (size_t i = 0; i < node_indices.size(); i++) { - const auto* node(graph_viewer_.GetNode(node_indices[i])); + for (const auto node_idx : node_indices) { + LOGS_DEFAULT(VERBOSE) << "Adding node [" << node_idx << "]"; + const auto* node(graph_viewer_.GetNode(node_idx)); const NodeUnit& node_unit = GetNodeUnit(node); - // Since a NodeUnit may contain multiple nodes, avoid processing the same NodeUnit multiple times - if (Contains(processed_node_units, &node_unit)) + // Since we may have NodeUnit with multiple nodes, insert NodeUnit with the first occurrence of + // its node(s) in topological order may cause the incorrect topological order while inserting + // NodeUNits, for example, + // Q1 + // | + // DQ1 DQ2 + // \ | + // CONV + // | + // Q2 + // In the above graph, we will have 2 NodeUnits, NU1 [Q1] and NU2 [DQ1, DQ2, CONV, Q2] + // The Q1 and DQ2 have the same topological order, if we insert DQ2 (as part of NU2) when we visit DQ2 + // first in the topological order, the input from Q1 required by NU2 is not yet inserted, this will + // cause failure finding the inputs for NU2 + // + // So we only insert the NodeUnit once when we hit the target node, to ensure the topological order + // of the NodeUnits + if (node != &node_unit.GetNode()) continue; if (const auto* op_builder = GetOpBuilder(node_unit)) { @@ -510,8 +521,6 @@ Status ModelBuilder::AddOperations() { return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Node [", node_unit.Name(), "], type [", node_unit.OpType(), "] is not supported"); } - - processed_node_units.insert(&node_unit); } return Status::OK(); @@ -535,6 +544,8 @@ Status ModelBuilder::AddOperation(int op, const std::vector& input_ind "op = " + std::to_string(op)); num_nnapi_ops_++; + + LOGS_DEFAULT(VERBOSE) << "Added NNAPI Operation Type [" << op << "]"; return Status::OK(); } @@ -640,8 +651,9 @@ int32_t ModelBuilder::FindActivation(const NodeUnit& node_unit) { // TODO, add support of activation fusion for quantized node group (qdq or qlinear) // We do not support activation fusion for quantized operators for now - auto qlinear_op_type = GetQLinearOpType(node_unit.GetNode()); - if (qlinear_op_type != QLinearOpType::Unknown) + // (usually the activations are fused already in the quantization) + auto quant_op_type = GetQuantizedOpType(node_unit); + if (quant_op_type != QuantizedOpType::Unknown) return fuse_code; for (auto it = output_node.OutputEdgesBegin(), end = output_node.OutputEdgesEnd(); it != end; ++it) { diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc index 84022ea774e57..6272153cd2baa 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc @@ -1260,8 +1260,7 @@ class ConvOpBuilder : public BaseOpBuilder { }; /* static */ bool ConvOpBuilder::IsQuantizedOp(const NodeUnit& node_unit) { - // TODO, add support for QDQ NodeUnit - return node_unit.OpType() == "QLinearConv"; + return IsQuantizedConv(GetQuantizedOpType(node_unit)); } /* static */ void @@ -1296,7 +1295,7 @@ Status ConvOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const N const auto& initializers(model_builder.GetInitializerTensors()); NodeAttrHelper helper(node_unit); const auto inputs = node_unit.Inputs(); - bool is_qlinear_conv = IsQuantizedOp(node_unit); + bool is_quant_conv = IsQuantizedOp(node_unit); // onnx strides are in the order height, width // while nnapi strides are in the order width, height @@ -1341,7 +1340,7 @@ Status ConvOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const N // this is for per-channel quantization weights optional> w_scales; bool is_per_tensor_u8s8 = false; - if (is_qlinear_conv) { + if (is_quant_conv) { ORT_RETURN_IF_ERROR(GetConvMatMulOpQuantizationScaleAndZeroPoint(model_builder, node_unit, x_scale, w_scale, y_scale, x_zero_point, w_zero_point, y_zero_point, @@ -1379,7 +1378,7 @@ Status ConvOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const N // Get weight operand type // Per-channel quantized weight is handled differently OperandType onnx_weight_operand_type = - (is_qlinear_conv && w_scales.has_value()) + (is_quant_conv && w_scales.has_value()) ? OperandType{onnx_weight_type, onnx_weight_shape, SymmPerChannelQuantParams{w_scales.value(), depthwise_conv_2d ? 3u : 0u}} // channelDim is 3 for depthwise-conv @@ -1392,7 +1391,7 @@ Status ConvOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const N ORT_RETURN_IF_ERROR(AddInitializerInNewLayout(model_builder, weight, onnx_weight_operand_type, L_1230, is_per_tensor_u8s8)); } - if (is_qlinear_conv) { + if (is_quant_conv) { // Verify if the scale and zero point matchs from onnx input/weight and nnapi input/weight ORT_RETURN_IF_ERROR(IsValidInputQuantizedType(model_builder, input, x_scale, x_zero_point)); ORT_RETURN_IF_ERROR(IsValidConvWeightQuantizedType(model_builder, weight, w_scale, w_zero_point, w_scales)); @@ -1420,7 +1419,7 @@ Status ConvOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const N } else { return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Unknown weight type ", TypeToStr(weight_type)); } - } else if (is_qlinear_conv) { + } else if (is_quant_conv) { // QLinearConv's bias type need special handling to add scale for quantization input const auto& bias_tensor = *model_builder.GetInitializerTensors().at(bias); ORT_RETURN_IF_NOT(bias_tensor.data_type() == ONNX_NAMESPACE::TensorProto_DataType_INT32, diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc index 5949e67d6b559..3857de16f30ea 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc @@ -728,6 +728,8 @@ class ConvOpSupportChecker : public BaseOpSupportChecker { } bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; + bool IsNodeUnitTypeSupported(const NodeUnit& /* node_unit */) const override { return true; } + static bool IsQuantizedOp(const NodeUnit& node_unit); }; /* static */ void ConvOpSupportChecker::CreateSharedOpSupportChecker( @@ -740,8 +742,12 @@ class ConvOpSupportChecker : public BaseOpSupportChecker { }); } +/* static */ bool ConvOpSupportChecker::IsQuantizedOp(const NodeUnit& node_unit) { + return IsQuantizedConv(GetQuantizedOpType(node_unit)); +} + bool ConvOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { - if (node_unit.OpType() != "QLinearConv") + if (!IsQuantizedOp(node_unit)) return BaseOpSupportChecker::HasSupportedInputsImpl(node_unit); // QLinearConv only supports input of uint8 for now @@ -754,10 +760,10 @@ bool ConvOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) con bool ConvOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, const OpSupportCheckParams& params) const { const auto& op_type = node_unit.OpType(); - const bool is_qlinear_conv = (op_type == "QLinearConv"); + bool is_quant_conv = IsQuantizedOp(node_unit); // We don't support nhwc com.microsoft.QLinearConv for now - if (is_qlinear_conv && node_unit.Domain() == kMSDomain) { + if (is_quant_conv && node_unit.Domain() == kMSDomain) { LOGS_DEFAULT(VERBOSE) << "com.microsoft.QLinearConv is not supported"; return false; } @@ -791,7 +797,7 @@ bool ConvOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initial return false; } - if (is_qlinear_conv) { + if (is_quant_conv) { // For QLinearConv, we only support uint8 output now int32_t output_type; if (!GetType(node_unit.Outputs()[0].node_arg, output_type)) @@ -1192,8 +1198,6 @@ int UnaryOpSupportChecker::GetMinSupportedOpSet(const NodeUnit& node_unit) const if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, false /* is_input */)) return false; - return false; - // NNAPI requires the scale be 1.f/256 and zero point to be 0 // See https://android.googlesource.com/platform/frameworks/ml/+/refs/heads/android10-c2f2-release/nn/common/operations/Activation.cpp#180 float output_scale = 0.0f; diff --git a/onnxruntime/core/providers/shared/node_unit/node_unit.cc b/onnxruntime/core/providers/shared/node_unit/node_unit.cc index a98336c6fe331..f78e2a550c8fc 100644 --- a/onnxruntime/core/providers/shared/node_unit/node_unit.cc +++ b/onnxruntime/core/providers/shared/node_unit/node_unit.cc @@ -10,9 +10,6 @@ namespace onnxruntime { namespace { -// The QLinearOpType GetQLinearOpType, is very similar to the one in NNAPI -// However, the NNAPI ones are only the subset of the ones here, -// TODO, make these shared enum class QLinearOpType : uint8_t { Unknown, // Unknown or not a linear quantized op DequantizeLinear, @@ -81,13 +78,15 @@ bool IsVariadicQLinearOp(QLinearOpType type) { return type == QLinearOpType::QLinearConcat; } -const std::vector GetQDQOutputNodes(const GraphViewer& graph_viewer, const QDQ::NodeGroup& node_group) { - std::vector output_nodes; - output_nodes.reserve(node_group.q_nodes.size()); - for (const auto& node_idx : node_group.q_nodes) { - output_nodes.push_back(graph_viewer.GetNode(node_idx)); +const std::vector GetQDQIONodes(const GraphViewer& graph_viewer, + const QDQ::NodeGroup& node_group, bool is_input) { + std::vector io_nodes; + const auto& src_nodes = is_input ? node_group.dq_nodes : node_group.q_nodes; + io_nodes.reserve(src_nodes.size()); + for (const auto& node_idx : src_nodes) { + io_nodes.push_back(graph_viewer.GetNode(node_idx)); } - return output_nodes; + return io_nodes; } // Get the input or output NodeUnitIODef(s) for the given QDQ NodeGroup @@ -154,7 +153,7 @@ NodeUnit::NodeUnit(const Node& node) } NodeUnit::NodeUnit(const GraphViewer& graph_viewer, const QDQ::NodeGroup& node_group) - : output_nodes_{GetQDQOutputNodes(graph_viewer, node_group)}, + : output_nodes_{GetQDQIONodes(graph_viewer, node_group, false /* is_input */)}, target_node_(*graph_viewer.GetNode(node_group.target_node)), type_(Type::QDQGroup), inputs_{GetQDQIODefs(target_node_, node_group, true /* is_input */)}, diff --git a/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc b/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc index c5e2c4378096e..4ac0c67e9e6dc 100644 --- a/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc +++ b/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc @@ -239,21 +239,6 @@ TEST(NnapiExecutionProviderTest, TestNoShapeInputModel) { << "No node should be taken by the NNAPI EP"; } -// For now since we don't support QDQ in NNAPI, even the infrastructure is there -// Need to verify a model with QDQ groups only will not be supported by NNAPI at all -// This may need to be changed when we gradually add support for different ops for QDQ -TEST(NnapiExecutionProviderTest, TestQDQConvModel) { - const ORTCHAR_T* model_file_name = ORT_TSTR("testdata/transform/qdq_conv.onnx"); - // test load only - SessionOptions so; - InferenceSessionWrapper session_object{so, GetEnvironment()}; - ASSERT_STATUS_OK(session_object.RegisterExecutionProvider(std::make_unique(0))); - ASSERT_STATUS_OK(session_object.Load(model_file_name)); - ASSERT_STATUS_OK(session_object.Initialize()); - ASSERT_EQ(CountAssignedNodes(session_object.GetGraph(), kNnapiExecutionProvider), 0) - << "No nodes should have been taken by the NNAPI EP"; -} - #if defined(__ANDROID__) TEST(NnapiExecutionProviderTest, TestQDQModel) { onnxruntime::Model model("nnapi_qdq_test_graph", false, DefaultLoggingManager().DefaultLogger()); From ef7b4dc05cae1084546ff7caba048a2f908ac1d8 Mon Sep 17 00:00:00 2001 From: Yi-Hong Lyu Date: Tue, 1 Feb 2022 08:22:16 +0800 Subject: [PATCH 07/56] Add test quantization of ArgMax for TensorRT (#10325) Make sure quantize_statict would insert DQ -> Q before ArgMax. --- .../test/python/quantization/test_op_argmax.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/onnxruntime/test/python/quantization/test_op_argmax.py b/onnxruntime/test/python/quantization/test_op_argmax.py index cb0a243c7e6e3..86bb187cfa54f 100644 --- a/onnxruntime/test/python/quantization/test_op_argmax.py +++ b/onnxruntime/test/python/quantization/test_op_argmax.py @@ -80,6 +80,7 @@ def quantize_argmax_test(self, activation_type, weight_type, extra_options = {}) weight_type_str = 'u8' if (weight_type == QuantType.QUInt8) else 's8' model_uint8_path = 'argmax_{}{}.onnx'.format(activation_type_str, weight_type_str) model_uint8_qdq_path = 'argmax_{}{}_qdq.onnx'.format(activation_type_str, weight_type_str) + model_uint8_qdq_trt_path = 'argmax_{}{}_qdq_trt.onnx'.format(activation_type_str, weight_type_str) # Verify QOperator mode data_reader = self.input_feeds(1, {'input': [1, 256, 128, 128]}) @@ -105,6 +106,17 @@ def quantize_argmax_test(self, activation_type, weight_type, extra_options = {}) data_reader.rewind() check_model_correctness(self, model_fp32_path, model_uint8_qdq_path, data_reader.get_next()) + # Verify QDQ mode for TensorRT + data_reader.rewind() + quantize_static(model_fp32_path, model_uint8_qdq_trt_path, data_reader, quant_format=QuantFormat.QDQ, + activation_type=activation_type, weight_type=weight_type, extra_options=extra_options, + op_types_to_quantize=['ArgMax']) + qdqnode_counts = {'QuantizeLinear': 1, 'DequantizeLinear': 1, 'ArgMax': 1} + check_op_type_count(self, model_uint8_qdq_trt_path, **qdqnode_counts) + qnode_io_qtypes = {'QuantizeLinear' : [['i', 2, activation_proto_qtype], ['o', 0, activation_proto_qtype]]} + check_qtype_by_node_type(self, model_uint8_qdq_trt_path, qnode_io_qtypes) + data_reader.rewind() + check_model_correctness(self, model_fp32_path, model_uint8_qdq_trt_path, data_reader.get_next()) def test_quantize_argmax(self): self.quantize_argmax_test(QuantType.QUInt8, QuantType.QUInt8) From a7c67860a532b3fc8e579d9b5407be432f07cd35 Mon Sep 17 00:00:00 2001 From: Chi Lo <54722500+chilo-ms@users.noreply.github.com> Date: Tue, 1 Feb 2022 15:56:33 -0800 Subject: [PATCH 08/56] Reduce test time for TensorRT EP CI (#10408) * expand model tests name * skip cpu/cuda for trt when running onnxruntime_test_all * only run trt ep for c++ unit test * Update CMAKE_CUDA_ARCHITECTURES for T4 * Use new t4 agent pool * Update YAML for run T4 on Windows * revert code * Update CMAKE_CUDA_ARCHITECTURES * fix wrong value * Remove cpu/cuda directly in model tests * add only CMAKE_CUDA_ARCHITECTURES=75 * remove expanding model test name to see difference * revert code * Add fallback execution provider for unit test * Add fallback execution provider for unit test (cont) * add conditional to add fackback cuda ep * Reduction op takes much longer time for TRT 8.2, so we test smaller range of inputs * use M60 * revert code * revert code * add comments * Modify code and add comment * modify comment * update comment * add comment --- cmake/onnxruntime_unittests.cmake | 16 +++++++++-- .../cpu/reduction/reduction_ops_test.cc | 28 ++++++++++++++++--- .../test/providers/provider_test_utils.cc | 13 +++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/cmake/onnxruntime_unittests.cmake b/cmake/onnxruntime_unittests.cmake index eafb83a8f31fa..17647c91941dc 100644 --- a/cmake/onnxruntime_unittests.cmake +++ b/cmake/onnxruntime_unittests.cmake @@ -15,7 +15,7 @@ endif() set(disabled_warnings) function(AddTest) - cmake_parse_arguments(_UT "DYN" "TARGET" "LIBS;SOURCES;DEPENDS" ${ARGN}) + cmake_parse_arguments(_UT "DYN" "TARGET" "LIBS;SOURCES;DEPENDS;TEST_ARGS" ${ARGN}) list(REMOVE_DUPLICATES _UT_SOURCES) if (${CMAKE_SYSTEM_NAME} STREQUAL "iOS") @@ -96,7 +96,7 @@ function(AddTest) target_compile_options(${_UT_TARGET} PRIVATE "-Wno-error=uninitialized") endif() - set(TEST_ARGS) + set(TEST_ARGS ${_UT_TEST_ARGS}) if (onnxruntime_GENERATE_TEST_REPORTS) # generate a report file next to the test program if (onnxruntime_BUILD_WEBASSEMBLY) @@ -685,6 +685,17 @@ if (onnxruntime_BUILD_WEBASSEMBLY) endif() endif() +set(test_all_args) +if (onnxruntime_USE_TENSORRT) + # TRT EP CI takes much longer time when updating to TRT 8.2 + # So, we only run trt ep and exclude other eps to reduce CI test time. + # + # The test names of model tests were using sequential number in the past. + # This PR https://github.com/microsoft/onnxruntime/pull/10220 (Please see ExpandModelName function in model_tests.cc for more details) + # made test name contain the "ep" and "model path" information, so we can easily filter the tests using cuda ep or other ep with *cpu__* or *xxx__*. + list(APPEND test_all_args "--gtest_filter=-*cpu__*:*cuda__*" ) +endif () + AddTest( TARGET onnxruntime_test_all SOURCES ${all_tests} ${onnxruntime_unittest_main_src} @@ -692,6 +703,7 @@ AddTest( onnx_test_runner_common ${onnxruntime_test_providers_libs} ${onnxruntime_test_common_libs} onnx_test_data_proto nlohmann_json::nlohmann_json DEPENDS ${all_dependencies} + TEST_ARGS ${test_all_args} ) if (MSVC) # The warning means the type of two integral values around a binary operator is narrow than their result. diff --git a/onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc b/onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc index c0298f74aed55..0c8edf85e8ebf 100644 --- a/onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc +++ b/onnxruntime/test/providers/cpu/reduction/reduction_ops_test.cc @@ -1557,9 +1557,15 @@ void test_apex_reduce_sum( } TEST(ReductionOpTest, ReduceSum_apex_matrix_large) { +#ifdef USE_TENSORRT + // Reduction op takes much longer time for TRT 8.2, so we test smaller range of inputs. + int64_t threshold = 4096; +#else + int64_t threshold = 32768; +#endif for (int64_t m = 1; m < 2049; m *= 8) { for (int64_t n = 2; n < 2049; n *= 8) { - if (m * n > 32768) { + if (m * n > threshold) { continue; } test_apex_reduce_sum(m, n); @@ -1587,7 +1593,13 @@ TEST(ReductionOpTest, ReduceSum_batch_by_two) { } TEST(ReductionOpTest, ReduceSum_batch_by_seq_by_128) { - for (int i = 1; i < 16; i += 1) { +#ifdef USE_TENSORRT + // Reduction op takes much longer time for TRT 8.2, so we test smaller range of inputs. + int i_max = 8; +#else + int i_max = 16; +#endif + for (int i = 1; i < i_max; i += 1) { test_apex_reduce_sum(i * 128, 128); test_apex_reduce_sum(i * 512, 128); test_apex_reduce_sum(i * 128, 768); @@ -1616,8 +1628,16 @@ TEST(ReductionOpTest, ReduceSum_bert_selected_batch_size) { TEST(ReductionOpTest, ReduceSum_apex_more) { std::srand(0); - for (int64_t m = 1; m < 16; ++m) { - for (int64_t n = 1; n < 16; ++n) { +#ifdef USE_TENSORRT + // Reduction op takes much longer time for TRT 8.2, so we test smaller range of inputs. + int64_t m_max = 8; + int64_t n_max = 8; +#else + int64_t m_max = 16; + int64_t n_max = 16; +#endif + for (int64_t m = 1; m < m_max; ++m) { + for (int64_t n = 1; n < n_max; ++n) { const auto m_ = 2 * m; const auto n_ = 2 * n; test_apex_reduce_sum(m_, n_); diff --git a/onnxruntime/test/providers/provider_test_utils.cc b/onnxruntime/test/providers/provider_test_utils.cc index 0bc17e79eff5e..29148bcf8e68e 100644 --- a/onnxruntime/test/providers/provider_test_utils.cc +++ b/onnxruntime/test/providers/provider_test_utils.cc @@ -994,6 +994,12 @@ void OpTester::Run( std::vector output_names; FillFeedsAndOutputNames(feeds, output_names); // Run the model +#ifdef USE_TENSORRT + // only run trt ep to reduce test time + static const std::string all_provider_types[] = { + kTensorrtExecutionProvider, + }; +#else static const std::string all_provider_types[] = { kCpuExecutionProvider, kCudaExecutionProvider, @@ -1008,6 +1014,7 @@ void OpTester::Run( kRocmExecutionProvider, kCoreMLExecutionProvider, }; +#endif bool has_run = false; @@ -1168,8 +1175,14 @@ void OpTester::Run( cur_provider = "not set"; } +#ifdef USE_TENSORRT + // We are allowing tests to be run with only TensorRT EP, but TensorRT EP may not support all tests and may be in excluded providers list. + // So, no registered EPs were able to run the model is okay for this situation. + ORT_UNUSED_PARAMETER(has_run); +#else EXPECT_TRUE(has_run) << "No registered execution providers were able to run the model."; +#endif } } ORT_CATCH(const std::exception& ex) { From a1d9a71b8ba9426e3448ab02aa00de82403bd113 Mon Sep 17 00:00:00 2001 From: Olivia Jain Date: Tue, 1 Feb 2022 16:01:34 -0800 Subject: [PATCH 09/56] Improve Perf System (#10404) * move table names to one location * remove session metadata * reload trt inputs * fix posting names * Update linux-gpu-tensorrt-daily-perf-pipeline.yml for Azure Pipelines * remove comments * Split up anubis job and perf run * add trt environ variables * No embedded links --- .../python/tools/tensorrt/perf/benchmark.py | 23 +++++++++--- .../tools/tensorrt/perf/benchmark_wrapper.py | 14 +++---- .../python/tools/tensorrt/perf/perf.sh | 2 + .../python/tools/tensorrt/perf/perf_utils.py | 14 +++++++ .../python/tools/tensorrt/perf/post.py | 37 +++++++------------ .../linux-gpu-tensorrt-anubis-pipeline.yaml | 6 +++ ...linux-gpu-tensorrt-daily-perf-pipeline.yml | 2 +- 7 files changed, 60 insertions(+), 38 deletions(-) create mode 100644 tools/ci_build/github/azure-pipelines/linux-gpu-tensorrt-anubis-pipeline.yaml diff --git a/onnxruntime/python/tools/tensorrt/perf/benchmark.py b/onnxruntime/python/tools/tensorrt/perf/benchmark.py index 9510125b9f6f0..4ce586e6fbdfb 100644 --- a/onnxruntime/python/tools/tensorrt/perf/benchmark.py +++ b/onnxruntime/python/tools/tensorrt/perf/benchmark.py @@ -64,9 +64,14 @@ def run_trt_standalone(trtexec, model_name, model_path, ort_inputs, all_inputs_s # load inputs input_shape = [] loaded_inputs = [] + + output = get_output(["find", "-L", os.getcwd(), "-name", "test_data*", "-type", "d"]) + test_data_dir = split_and_sort_output(output)[0] + for i in range(len(ort_inputs)): name = ort_inputs[i].name - loaded_input = name + ':' + str(i) + '.bin' + loaded_input = name + ':' + test_data_dir + '/' + str(i) + '.bin' + logger.info(loaded_input) shape = [] for j in all_inputs_shape[i]: shape.append(str(j)) @@ -79,7 +84,7 @@ def run_trt_standalone(trtexec, model_name, model_path, ort_inputs, all_inputs_s inputs_arg = '--loadInputs=' + ','.join(loaded_inputs) result = {} command = [trtexec, onnx_model_path, "--duration=50", "--percentile=90", "--workspace=4096"] - #command.extend([inputs_arg]) TODO: rebind IO inputs in TRT 8.2 + command.extend([inputs_arg]) # add benchmarking flags model = onnx.load(model_path) @@ -998,11 +1003,17 @@ def run_onnxruntime(args, models): model_path = model_info["model_path"] test_data_dir = model_info["test_data_path"] - fp16 = False - os.environ["ORT_TENSORRT_FP16_ENABLE"] = "1" if "Fp16" in ep else "0" logger.info("[Initialize] model = {}, ep = {} ...".format(name, ep)) + + # Set environment variables for ort-trt benchmarking + if "ORT-TRT" in ep: + os.environ["ORT_TENSORRT_FP16_ENABLE"] = "1" if "Fp16" in ep else "0" + os.environ["ORT_TENSORRT_ENGINE_CACHE_ENABLE"] = "1" + os.environ["ORT_TENSORRT_MAX_WORKSPACE_SIZE"] = "4294967296" - # use float16.py for cuda fp16 only + fp16 = False + + # use float16.py for cuda fp16 only if cuda_fp16 == ep: # handle model @@ -1041,7 +1052,7 @@ def run_onnxruntime(args, models): if is_standalone(ep): providers = ep_to_provider_list[trt] else: - providers = ep_to_provider_list[ep] + providers = ep_to_provider_list[ep] options = onnxruntime.SessionOptions() options.graph_optimization_level = onnxruntime.GraphOptimizationLevel.ORT_ENABLE_ALL diff --git a/onnxruntime/python/tools/tensorrt/perf/benchmark_wrapper.py b/onnxruntime/python/tools/tensorrt/perf/benchmark_wrapper.py index 29d5a0d42e472..86186a8037b6b 100644 --- a/onnxruntime/python/tools/tensorrt/perf/benchmark_wrapper.py +++ b/onnxruntime/python/tools/tensorrt/perf/benchmark_wrapper.py @@ -47,13 +47,13 @@ def main(): model_to_fail_ep = {} - benchmark_fail_csv = 'fail.csv' - benchmark_metrics_csv = 'metrics.csv' - benchmark_success_csv = 'success.csv' - benchmark_latency_csv = 'latency.csv' - benchmark_status_csv = 'status.csv' - benchmark_session_csv = 'session.csv' - specs_csv = 'specs.csv' + benchmark_fail_csv = fail_name + csv_ending + benchmark_metrics_csv = metrics_name + csv_ending + benchmark_success_csv = success_name + csv_ending + benchmark_latency_csv = latency_name + csv_ending + benchmark_status_csv = status_name + csv_ending + benchmark_session_csv = session_name + csv_ending + specs_csv = specs_name + csv_ending for model, model_info in models.items(): logger.info("\n" + "="*40 + "="*len(model)) diff --git a/onnxruntime/python/tools/tensorrt/perf/perf.sh b/onnxruntime/python/tools/tensorrt/perf/perf.sh index a30028bfdb558..6dcb6c1c51e1a 100755 --- a/onnxruntime/python/tools/tensorrt/perf/perf.sh +++ b/onnxruntime/python/tools/tensorrt/perf/perf.sh @@ -29,6 +29,7 @@ fi FAIL_MODEL_FILE=".fail_model_map" LATENCY_FILE=".latency_map" METRICS_FILE=".metrics_map" +SESSION_FILE=".session_map" PROFILE="*onnxruntime_profile*" # files to download info @@ -39,6 +40,7 @@ cleanup_files() { rm -f $FAIL_MODEL_FILE rm -f $LATENCY_FILE rm -f $METRICS_FILE + rm -f $SESSION_FILE rm -f $FLOAT_16 rm -rf result/$OPTION find -name $PROFILE -delete diff --git a/onnxruntime/python/tools/tensorrt/perf/perf_utils.py b/onnxruntime/python/tools/tensorrt/perf/perf_utils.py index 5182147fa3b19..fb142b54cdb87 100644 --- a/onnxruntime/python/tools/tensorrt/perf/perf_utils.py +++ b/onnxruntime/python/tools/tensorrt/perf/perf_utils.py @@ -25,11 +25,25 @@ standalone_trt_fp16 = "TRTFp16" acl = "ORT-ACLFp32" +# table names +metrics_name = 'metrics' +success_name = 'success' +fail_name = 'fail' +memory_name = 'memory' +latency_name = 'latency' +status_name = 'status' +latency_over_time_name = 'latency_over_time' +specs_name = 'specs' +session_name = 'session' + +time_string_format = '%Y-%m-%d %H:%M:%S' + # column names model_title = 'Model' group_title = 'Group' # endings +csv_ending = '.csv' avg_ending = ' \nmean (ms)' percentile_ending = ' \n90th percentile (ms)' memory_ending = ' \npeak memory usage (MiB)' diff --git a/onnxruntime/python/tools/tensorrt/perf/post.py b/onnxruntime/python/tools/tensorrt/perf/post.py index 037be08571114..7a0ae034b2053 100644 --- a/onnxruntime/python/tools/tensorrt/perf/post.py +++ b/onnxruntime/python/tools/tensorrt/perf/post.py @@ -18,17 +18,6 @@ cluster_ingest = "https://ingest-onnxruntimedashboarddb.southcentralus.kusto.windows.net" database = "ep_perf_dashboard" -# table names -fail = 'fail' -memory = 'memory' -latency = 'latency' -status = 'status' -latency_over_time = 'latency_over_time' -specs = 'specs' -session = 'session' - -time_string_format = '%Y-%m-%d %H:%M:%S' - def parse_arguments(): parser = argparse.ArgumentParser() parser.add_argument( @@ -142,7 +131,7 @@ def main(): folders = os.listdir(result_file) os.chdir(result_file) - tables = [fail, memory, latency, status, latency_over_time, specs, session] + tables = [fail_name, memory_name, latency_name, status_name, latency_over_time_name, specs_name, session_name] table_results = {} for table_name in tables: table_results[table_name] = pd.DataFrame() @@ -152,18 +141,18 @@ def main(): csv_filenames = os.listdir() for csv in csv_filenames: table = parse_csv(csv) - if session in csv: - table_results[session] = table_results[session].append(get_session(table, model_group), ignore_index=True) - if specs in csv: - table_results[specs] = table_results[specs].append(get_specs(table, args.branch, args.commit_hash, date_time), ignore_index=True) - if fail in csv: - table_results[fail] = table_results[fail].append(get_failures(table, model_group), ignore_index=True) - if latency in csv: - table_results[memory] = table_results[memory].append(get_memory(table, model_group), ignore_index=True) - table_results[latency] = table_results[latency].append(get_latency(table, model_group), ignore_index=True) - table_results[latency_over_time] = table_results[latency_over_time].append(get_latency_over_time(args.commit_hash, args.report_url, args.branch, table_results[latency]), ignore_index=True) - if status in csv: - table_results[status] = table_results[status].append(get_status(table, model_group), ignore_index=True) + if session_name in csv: + table_results[session_name] = table_results[session_name].append(get_session(table, model_group), ignore_index=True) + if specs_name in csv: + table_results[specs_name] = table_results[specs_name].append(get_specs(table, args.branch, args.commit_hash, date_time), ignore_index=True) + if fail_name in csv: + table_results[fail_name] = table_results[fail_name].append(get_failures(table, model_group), ignore_index=True) + if latency_name in csv: + table_results[memory_name] = table_results[memory_name].append(get_memory(table, model_group), ignore_index=True) + table_results[latency_name] = table_results[latency_name].append(get_latency(table, model_group), ignore_index=True) + table_results[latency_over_time_name] = table_results[latency_over_time_name].append(get_latency_over_time(args.commit_hash, args.report_url, args.branch, table_results[latency_name]), ignore_index=True) + if status_name in csv: + table_results[status_name] = table_results[status_name].append(get_status(table, model_group), ignore_index=True) os.chdir(result_file) for table in tables: print('writing ' + table + ' to database') diff --git a/tools/ci_build/github/azure-pipelines/linux-gpu-tensorrt-anubis-pipeline.yaml b/tools/ci_build/github/azure-pipelines/linux-gpu-tensorrt-anubis-pipeline.yaml new file mode 100644 index 0000000000000..2763f597b9d11 --- /dev/null +++ b/tools/ci_build/github/azure-pipelines/linux-gpu-tensorrt-anubis-pipeline.yaml @@ -0,0 +1,6 @@ +jobs: +- template: linux-gpu-tensorrt-daily-perf-pipeline.yml + parameters: + PostToDashboard: 'false' + ModelGroups: [] + PublishWheel: 'true' \ No newline at end of file diff --git a/tools/ci_build/github/azure-pipelines/linux-gpu-tensorrt-daily-perf-pipeline.yml b/tools/ci_build/github/azure-pipelines/linux-gpu-tensorrt-daily-perf-pipeline.yml index 1282b6e669fe6..a7caf2b764cef 100644 --- a/tools/ci_build/github/azure-pipelines/linux-gpu-tensorrt-daily-perf-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/linux-gpu-tensorrt-daily-perf-pipeline.yml @@ -172,7 +172,7 @@ jobs: scriptType: bash inlineScript: | short_hash=$(git rev-parse --short HEAD^) && - python3 $(Build.SourcesDirectory)/onnxruntime/python/tools/tensorrt/perf/post.py -r $(Build.SourcesDirectory)/Artifact/result -c $short_hash -u "https://dev.azure.com/onnxruntime/onnxruntime/_build/results?buildId=$(Build.BuildId)" -t ${{ parameters.TrtVersion }} -b $(branch) + python3 $(Build.SourcesDirectory)/onnxruntime/python/tools/tensorrt/perf/post.py -r $(Build.SourcesDirectory)/Artifact/result -c $short_hash -u "$(reportUrl)?buildId=$(Build.BuildId)" -t ${{ parameters.TrtVersion }} -b $(branch) - template: templates/component-governance-component-detection-steps.yml From 062129a5c45cec01de0b5c92371993d3ed30412f Mon Sep 17 00:00:00 2001 From: Shucai Xiao Date: Tue, 1 Feb 2022 18:11:39 -0600 Subject: [PATCH 10/56] Update rocm_ep and migraphx_ep to rocm4.5.2 and fix dockerfiles to build docker images correctly (#10445) * fix build errors for the migraphx and rocm dockerfile * add the numpy package in the migraphx and rocm dockerfile --- dockerfiles/Dockerfile.migraphx | 20 +++++---- dockerfiles/Dockerfile.rocm | 22 +++++----- dockerfiles/scripts/install_rocm_deps.sh | 55 +++++++++++++----------- 3 files changed, 54 insertions(+), 43 deletions(-) diff --git a/dockerfiles/Dockerfile.migraphx b/dockerfiles/Dockerfile.migraphx index 7106735a47b8a..60d8eee6cf174 100644 --- a/dockerfiles/Dockerfile.migraphx +++ b/dockerfiles/Dockerfile.migraphx @@ -21,7 +21,7 @@ ENV LANG C.UTF-8 # Install rocm RUN apt-get update && apt-get install -y gnupg2 --no-install-recommends curl && \ curl -sL http://repo.radeon.com/rocm/rocm.gpg.key | apt-key add - && \ - sh -c 'echo deb [arch=amd64] http://repo.radeon.com/rocm/apt/4.5/ ubuntu main > /etc/apt/sources.list.d/rocm.list' + sh -c 'echo deb [arch=amd64] http://repo.radeon.com/rocm/apt/4.5.2/ ubuntu main > /etc/apt/sources.list.d/rocm.list' RUN apt-get update &&\ apt-get install -y sudo git bash build-essential rocm-dev libpython3.6-dev python3-pip miopen-hip \ @@ -32,24 +32,28 @@ https://github.com/Kitware/CMake/releases/download/v3.21.0/cmake-3.21.0-linux-x8 tar -zxf /tmp/cmake-3.21.0-linux-x86_64.tar.gz --strip=1 -C /usr # Install rbuild -RUN pip3 install https://github.com/RadeonOpenCompute/rbuild/archive/master.tar.gz +RUN pip3 install https://github.com/RadeonOpenCompute/rbuild/archive/master.tar.gz numpy yapf==0.28.0 ENV PATH /opt/miniconda/bin:/code/cmake-3.21.0-linux-x86_64/bin:${PATH} # Install MIGraphX from source RUN mkdir -p /migraphx RUN cd /migraphx && git clone --depth=1 --branch migraphx_for_ort https://github.com/ROCmSoftwarePlatform/AMDMIGraphX src -RUN cd /migraphx && rbuild package --cxx /opt/rocm-4.5.0/llvm/bin/clang++ -d /migraphx/deps -B /migraphx/build -S /migraphx/src/ -DPYTHON_EXECUTABLE=/usr/bin/python3 +RUN cd /migraphx && rbuild package --cxx /opt/rocm-4.5.2/llvm/bin/clang++ -d /migraphx/deps -B /migraphx/build -S /migraphx/src/ -DPYTHON_EXECUTABLE=/usr/bin/python3 RUN dpkg -i /migraphx/build/*.deb RUN rm -rf /migraphx +# Install rocm ep dependencies +RUN apt-get update &&\ + apt-get install -y rocrand rccl hipsparse hipfft hipcub hipblas rocthrust + WORKDIR /code # Prepare onnxruntime repository & build onnxruntime RUN git clone --single-branch --branch ${ONNXRUNTIME_BRANCH} --recursive ${ONNXRUNTIME_REPO} onnxruntime &&\ /bin/sh onnxruntime/dockerfiles/scripts/install_common_deps.sh &&\ - cd onnxruntime &&\ - /bin/sh ./build.sh --config Release --build_wheel --update --build --parallel --cmake_extra_defines ONNXRUNTIME_VERSION=$(cat ./VERSION_NUMBER) --use_migraphx &&\ - pip install /code/onnxruntime/build/Linux/Release/dist/*.whl &&\ - cd .. &&\ - rm -rf onnxruntime cmake-3.21.0-linux-x86_64 + cd onnxruntime &&\ + /bin/sh ./build.sh --cmake_extra_defines ONNXRUNTIME_VERSION=`cat ./VERSION_NUMBER` --config Release --parallel \ + --skip_tests --build_wheel --use_rocm --rocm_version=4.5.2 --rocm_home /opt/rocm --use_migraphx &&\ + pip install /code/onnxruntime/build/Linux/Release/dist/*.whl + diff --git a/dockerfiles/Dockerfile.rocm b/dockerfiles/Dockerfile.rocm index f323f50945a21..68412b0104c3c 100644 --- a/dockerfiles/Dockerfile.rocm +++ b/dockerfiles/Dockerfile.rocm @@ -20,20 +20,23 @@ ENV LANG C.UTF-8 # Install rocm RUN apt-get update && apt-get install -y gnupg2 --no-install-recommends curl && \ curl -sL http://repo.radeon.com/rocm/rocm.gpg.key | apt-key add - && \ - sh -c 'echo deb [arch=amd64] http://repo.radeon.com/rocm/apt/4.0/ xenial main > /etc/apt/sources.list.d/rocm.list' + sh -c 'echo deb [arch=amd64] http://repo.radeon.com/rocm/apt/4.5.2/ ubuntu main > /etc/apt/sources.list.d/rocm.list' RUN apt-get update &&\ - apt-get install -y --no-install-recommends sudo git bash build-essential cmake libelf1 rocm-dkms libpython3.6-dev python3-pip miopen-hip rocblas\ - libnuma-dev kmod half hipsparse rocfft hipblas + apt-get install -y sudo git bash build-essential rocm-dev libpython3.6-dev python3-pip miopen-hip rocblas half aria2 libnuma-dev + +RUN aria2c -q -d /tmp -o cmake-3.20.0-linux-x86_64.tar.gz \ +https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0-linux-x86_64.tar.gz &&\ +tar -zxf /tmp/cmake-3.20.0-linux-x86_64.tar.gz --strip=1 -C /usr # Install yapf -RUN pip3 install yapf==0.28.0 +RUN pip3 install yapf==0.28.0 numpy -ENV PATH /opt/miniconda/bin:/code/cmake-3.21.0-linux-x86_64/bin:${PATH} +ENV PATH /opt/miniconda/bin:/code/cmake-3.20.0-linux-x86_64/bin:${PATH} # Install dependencies -COPY ./scripts/install_rocm_deps.sh / -RUN chmod +x /install_rocm_deps.sh && /install_rocm_deps.sh && rm /install_rocm_deps.sh +RUN apt-get update &&\ + apt-get install -y rocrand rccl hipsparse hipfft hipcub hipblas rocthrust WORKDIR /code @@ -42,8 +45,7 @@ RUN git clone --single-branch --branch ${ONNXRUNTIME_BRANCH} --recursive ${ONNXR /bin/sh onnxruntime/dockerfiles/scripts/install_common_deps.sh &&\ cd onnxruntime &&\ /bin/sh ./build.sh --config Release --build_wheel --update --build --parallel --cmake_extra_defines\ - ONNXRUNTIME_VERSION=$(cat ./VERSION_NUMBER) --use_rocm --rocm_home=/opt/rocm &&\ + ONNXRUNTIME_VERSION=$(cat ./VERSION_NUMBER) --use_rocm --rocm_home=/opt/rocm &&\ pip install /code/onnxruntime/build/Linux/Release/dist/*.whl &&\ - cd .. &&\ - rm -rf onnxruntime cmake-3.21.0-linux-x86_64 + cd .. diff --git a/dockerfiles/scripts/install_rocm_deps.sh b/dockerfiles/scripts/install_rocm_deps.sh index eed8125b741db..fd445be87479b 100644 --- a/dockerfiles/scripts/install_rocm_deps.sh +++ b/dockerfiles/scripts/install_rocm_deps.sh @@ -12,49 +12,53 @@ apt-get update && apt-get install -y --no-install-recommends \ python3-dev # rocm-cmake -wget --quiet https://github.com/RadeonOpenCompute/rocm-cmake/archive/rocm-3.8.0.tar.gz -tar -xzvf rocm-3.8.0.tar.gz -rm rocm-3.8.0.tar.gz -cd rocm-cmake-rocm-3.8.0 +rocm_cmake_version=4.5.2 +wget --quiet https://github.com/RadeonOpenCompute/rocm-cmake/archive/refs/tags/rocm-${rocm_cmake_version}.tar.gz +tar -xzvf rocm-${rocm_cmake_version}.tar.gz +rm rocm-${rocm_cmake_version}.tar.gz +cd rocm-cmake-rocm-${rocm_cmake_version} mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=$prefix .. make -j8 make install cd ../.. -rm -rf rocm-cmake-rocm-3.8.0 +rm -rf rocm-cmake-rocm-${rocm_cmake_version} # rccl -wget --quiet https://github.com/ROCmSoftwarePlatform/rccl/archive/rocm-4.0.0.tar.gz -tar -xzvf rocm-4.0.0.tar.gz -rm rocm-4.0.0.tar.gz -cd rccl-rocm-4.0.0 +rccl_version=4.5.2 +wget --quiet https://github.com/ROCmSoftwarePlatform/rccl/archive/refs/tags/rocm-${rccl_version}.tar.gz +tar -xzvf rocm-${rccl_version}.tar.gz +rm rocm-${rccl_version}.tar.gz +cd rccl-rocm-${rccl_version} mkdir build cd build CXX=/opt/rocm/bin/hipcc cmake -DCMAKE_INSTALL_PREFIX=$prefix .. make -j8 make install cd ../.. -rm -rf rccl-rocm-4.0.0 +rm -rf rccl-rocm-${rccl_version} #rocrand -wget --quiet https://github.com/ROCmSoftwarePlatform/rocRAND/archive/rocm-4.0.0.tar.gz -tar -xzvf rocm-4.0.0.tar.gz -rm rocm-4.0.0.tar.gz -cd rocRAND-rocm-4.0.0 +rocrand_version=4.5.2 +wget --quiet https://github.com/ROCmSoftwarePlatform/rocRAND/archive/refs/tags/rocm-${rocrand_version}.tar.gz +tar -xzvf rocm-${rocrand_version}.tar.gz +rm rocm-${rocrand_version}.tar.gz +cd rocRAND-rocm-${rocrand_version} mkdir build cd build CXX=/opt/rocm/bin/hipcc cmake -DCMAKE_INSTALL_PREFIX=$prefix .. make -j8 make install cd ../.. -rm -rf rocRAND-rocm-4.0.0 +rm -rf rocRAND-rocm-${rocrand_version} #hipcub -wget --quiet https://github.com/ROCmSoftwarePlatform/hipCUB/archive/rocm-4.0.0.tar.gz -tar -xzvf rocm-4.0.0.tar.gz -rm rocm-4.0.0.tar.gz -cd hipCUB-rocm-4.0.0 +hipcub_version=4.5.2 +wget --quiet https://github.com/ROCmSoftwarePlatform/hipCUB/archive/refs/tags/rocm-${hipcub_version}.tar.gz +tar -xzvf rocm-${hipcub_version}.tar.gz +rm rocm-${hipcub_version}.tar.gz +cd hipCUB-rocm-${hipcub_version} mkdir build cd build CXX=/opt/rocm/bin/hipcc cmake -DCMAKE_INSTALL_PREFIX=$prefix .. @@ -62,18 +66,19 @@ make -j8 make package make install cd ../.. -rm -rf hipCUB-rocm-4.0.0 +rm -rf hipCUB-rocm-${hipcub_version} #rocprim -wget --quiet https://github.com/ROCmSoftwarePlatform/rocPRIM/archive/rocm-4.0.0.tar.gz -tar -xzvf rocm-4.0.0.tar.gz -rm rocm-4.0.0.tar.gz -cd rocPRIM-rocm-4.0.0 +rocprim_version=4.5.2 +wget --quiet https://github.com/ROCmSoftwarePlatform/rocPRIM/archive/refs/tags/rocm-${rocprim_version}.tar.gz +tar -xzvf rocm-${rocprim_version}.tar.gz +rm rocm-${rocprim_version}.tar.gz +cd rocPRIM-rocm-${rocprim_version} mkdir build cd build CXX=/opt/rocm/bin/hipcc cmake -DCMAKE_INSTALL_PREFIX=$prefix .. make -j8 make install cd ../.. -rm -rf rocPRIM-rocm-4.0.0 +rm -rf rocPRIM-rocm-${rocprim_version} From 3c967601921093ebffcdbed0a1baf1dc9f8b8f3d Mon Sep 17 00:00:00 2001 From: Weixing Zhang Date: Tue, 1 Feb 2022 16:12:01 -0800 Subject: [PATCH 11/56] support rocm/migraphx EP in perftest tool (#10449) Co-authored-by: Weixing Zhang --- onnxruntime/test/perftest/command_args_parser.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/onnxruntime/test/perftest/command_args_parser.cc b/onnxruntime/test/perftest/command_args_parser.cc index 2667060331eb6..2c5e0fa2e575d 100644 --- a/onnxruntime/test/perftest/command_args_parser.cc +++ b/onnxruntime/test/perftest/command_args_parser.cc @@ -33,8 +33,8 @@ namespace perftest { "\t-A: Disable memory arena\n" "\t-I: Generate tensor input binding (Free dimensions are treated as 1.)\n" "\t-c [parallel runs]: Specifies the (max) number of runs to invoke simultaneously. Default:1.\n" - "\t-e [cpu|cuda|dnnl|tensorrt|openvino|nuphar|dml|acl]: Specifies the provider 'cpu','cuda','dnnl','tensorrt', " - "'openvino', 'nuphar', 'dml', 'acl', 'nnapi' or 'coreml'. " + "\t-e [cpu|cuda|dnnl|tensorrt|openvino|nuphar|dml|acl|rocm|migraphx]: Specifies the provider 'cpu','cuda','dnnl','tensorrt', " + "'openvino', 'nuphar', 'dml', 'acl', 'nnapi', 'coreml', 'rocm' or 'migraphx'. " "Default:'cpu'.\n" "\t-b [tf|ort]: backend to use. Default:ort\n" "\t-r [repeated_times]: Specifies the repeated times if running in 'times' test mode.Default:1000.\n" @@ -178,6 +178,10 @@ static bool ParseDimensionOverride(std::basic_string& dim_identifier, test_config.machine_config.provider_type_name = onnxruntime::kAclExecutionProvider; } else if (!CompareCString(optarg, ORT_TSTR("armnn"))) { test_config.machine_config.provider_type_name = onnxruntime::kArmNNExecutionProvider; + } else if (!CompareCString(optarg, ORT_TSTR("rocm"))) { + test_config.machine_config.provider_type_name = onnxruntime::kRocmExecutionProvider; + } else if (!CompareCString(optarg, ORT_TSTR("migraphx"))) { + test_config.machine_config.provider_type_name = onnxruntime::kMIGraphXExecutionProvider; } else { return false; } From 91b8ad5ee73df834782b19093da7038f6e0ab6e1 Mon Sep 17 00:00:00 2001 From: Dmitri Smirnov Date: Tue, 1 Feb 2022 18:09:24 -0800 Subject: [PATCH 12/56] Allow users to bind arbitrary memory using raw pointers (#10428) Add binding external allocation Add negative tests Add missing return status check --- .../InferenceSession.shared.cs | 10 +- .../NativeOnnxTensorMemory.shared.cs | 17 ++- .../NativeOnnxValueHelper.shared.cs | 13 ++- .../OrtAllocator.shared.cs | 79 ++++++++++++- .../OrtIoBinding.shared.cs | 108 +++++++++++++----- .../OrtValue.shared.cs | 19 ++- .../OrtIoBindingAllocationTest.cs | 74 +++++++++++- .../TestDataLoader.cs | 3 +- 8 files changed, 274 insertions(+), 49 deletions(-) diff --git a/csharp/src/Microsoft.ML.OnnxRuntime/InferenceSession.shared.cs b/csharp/src/Microsoft.ML.OnnxRuntime/InferenceSession.shared.cs index 693f6ea2bd632..027cbfdc788c7 100644 --- a/csharp/src/Microsoft.ML.OnnxRuntime/InferenceSession.shared.cs +++ b/csharp/src/Microsoft.ML.OnnxRuntime/InferenceSession.shared.cs @@ -40,7 +40,7 @@ public class InferenceSession : IDisposable /// Dictionary that represents overridableInitializers metadata /// private Dictionary _overridableInitializerMetadata; - + private SessionOptions _builtInSessionOptions = null; private RunOptions _builtInRunOptions = null; private ModelMetadata _modelMetadata = null; @@ -998,9 +998,15 @@ internal static NodeMetadata GetMetadataFromTypeInfo(IntPtr typeInfo) NativeApiStatus.VerifySuccess(NativeMethods.OrtGetTensorElementType(tensorInfo, out el_type)); type = (TensorElementType)el_type; } + Type dotnetType = null; int width = 0; - TensorElementTypeConverter.GetTypeAndWidth(type, out dotnetType, out width); + if (!TensorElementTypeConverter.GetTypeAndWidth(type, out dotnetType, out width)) + { + throw new OnnxRuntimeException(ErrorCode.InvalidArgument, + "Unable to query type information for data type: " + type.ToString()); + } + UIntPtr numDimensions; NativeApiStatus.VerifySuccess(NativeMethods.OrtGetDimensionsCount(tensorInfo, out numDimensions)); diff --git a/csharp/src/Microsoft.ML.OnnxRuntime/NativeOnnxTensorMemory.shared.cs b/csharp/src/Microsoft.ML.OnnxRuntime/NativeOnnxTensorMemory.shared.cs index 61ac3324b6b06..b2439c32b0708 100644 --- a/csharp/src/Microsoft.ML.OnnxRuntime/NativeOnnxTensorMemory.shared.cs +++ b/csharp/src/Microsoft.ML.OnnxRuntime/NativeOnnxTensorMemory.shared.cs @@ -54,7 +54,7 @@ protected virtual void Dispose(bool disposing) // dispose managed state (managed objects). if (disposing) { - if(_disposables != null) + if (_disposables != null) { _disposables.Dispose(); _disposables = null; @@ -106,10 +106,19 @@ public NativeOnnxTensorMemory(OrtValue ortValue) NativeApiStatus.VerifySuccess(NativeMethods.OrtGetTensorElementType(typeAndShape, out el_type)); elemType = (TensorElementType)el_type; } - TensorElementTypeConverter.GetTypeAndWidth(elemType, out type, out width); + + if (!TensorElementTypeConverter.GetTypeAndWidth(elemType, out type, out width)) + { + throw new OnnxRuntimeException(ErrorCode.InvalidArgument, + "Unable to query type information for data type: " + elemType.ToString()); + } if (typeof(T) != type) - throw new NotSupportedException(nameof(NativeOnnxTensorMemory) + " does not support T = " + nameof(T)); + { + var message = String.Format("The NativeOnnxTensorMemory type being instantiated for T = : {0} while supplied OrtValue contains T = {1}", + typeof(T), type); + throw new OnnxRuntimeException(ErrorCode.InvalidArgument, message); + } ElementType = elemType; ElementWidth = width; @@ -136,7 +145,7 @@ public NativeOnnxTensorMemory(OrtValue ortValue) Dimensions[i] = (int)shape[i]; } - if (typeof(T) != typeof(string)) + if (elemType != TensorElementType.String) { NativeApiStatus.VerifySuccess(NativeMethods.OrtGetTensorMutableData(ortValue.Handle, out _dataBufferPointer)); } diff --git a/csharp/src/Microsoft.ML.OnnxRuntime/NativeOnnxValueHelper.shared.cs b/csharp/src/Microsoft.ML.OnnxRuntime/NativeOnnxValueHelper.shared.cs index ee57a02b8120b..67781b82f5f1f 100644 --- a/csharp/src/Microsoft.ML.OnnxRuntime/NativeOnnxValueHelper.shared.cs +++ b/csharp/src/Microsoft.ML.OnnxRuntime/NativeOnnxValueHelper.shared.cs @@ -108,19 +108,22 @@ internal static IntPtr[] ConvertNamesToUtf8(IReadOnlyCollection names, Nam internal static class TensorElementTypeConverter { - public static void GetTypeAndWidth(TensorElementType elemType, out Type type, out int width) + public static bool GetTypeAndWidth(TensorElementType elemType, out Type type, out int width) { - TensorElementTypeInfo result = TensorBase.GetElementTypeInfo(elemType); - if(result != null) + bool result = true; + TensorElementTypeInfo typeInfo = TensorBase.GetElementTypeInfo(elemType); + if(typeInfo != null) { - type = result.TensorType; - width = result.TypeSize; + type = typeInfo.TensorType; + width = typeInfo.TypeSize; } else { type = null; width = 0; + result = false; } + return result; } } } diff --git a/csharp/src/Microsoft.ML.OnnxRuntime/OrtAllocator.shared.cs b/csharp/src/Microsoft.ML.OnnxRuntime/OrtAllocator.shared.cs index a396df41ec580..c420b706e28f2 100644 --- a/csharp/src/Microsoft.ML.OnnxRuntime/OrtAllocator.shared.cs +++ b/csharp/src/Microsoft.ML.OnnxRuntime/OrtAllocator.shared.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using Microsoft.ML.OnnxRuntime.Tensors; using System; using System.Runtime.InteropServices; using System.Text; @@ -61,7 +62,7 @@ internal IntPtr Pointer } #region SafeHandle - + /// /// Overrides SafeHandle.IsInvalid /// @@ -257,7 +258,7 @@ public OrtAllocatorType GetAllocatorType() public override bool Equals(object obj) { var other = obj as OrtMemoryInfo; - if(other == null) + if (other == null) { return false; } @@ -271,7 +272,7 @@ public override bool Equals(object obj) /// true if instances are equal according to OrtCompareMemoryInfo. public bool Equals(OrtMemoryInfo other) { - if(this == other) + if (this == other) { return true; } @@ -310,6 +311,78 @@ protected override bool ReleaseHandle() #endregion } + /// + /// This class represents an arbitrary buffer of memory + /// allocated and owned by the user. It can be either a CPU, GPU or other device memory + /// that can be suitably represented by IntPtr. + /// This is just a composite of the buffer related information. + /// The memory is assumed to be pinned if necessary and usable immediately + /// in the native code. + /// + public class OrtExternalAllocation + { + /// + /// Constructor + /// + /// use to accurately describe a piece of memory that this is wrapping + /// shape of this buffer + /// element type + /// the actual pointer to memory + /// size of the allocation in bytes + public OrtExternalAllocation(OrtMemoryInfo memInfo, long[] shape, Tensors.TensorElementType elementType, IntPtr pointer, long sizeInBytes) + { + Type type; + int width; + if (!TensorElementTypeConverter.GetTypeAndWidth(elementType, out type, out width)) + { + throw new OnnxRuntimeException(ErrorCode.InvalidArgument, + "Unable to query type information for data type: " + elementType.ToString()); + } + + if (elementType == TensorElementType.String) + { + throw new OnnxRuntimeException(ErrorCode.InvalidArgument, + "Strings are not supported by this API"); + } + + var shapeSize = ArrayUtilities.GetSizeForShape(shape); + var requiredBufferSize = shapeSize * width; + if (requiredBufferSize > sizeInBytes) + { + var message = String.Format("Shape of {0} elements requires a buffer of at least {1} bytes. Provided: {2} bytes", + shapeSize, requiredBufferSize, sizeInBytes); + throw new OnnxRuntimeException(ErrorCode.InvalidArgument, message); + } + + Info = memInfo; + Shape = shape; + ElementType = elementType; + Pointer = pointer; + Size = sizeInBytes; + } + + /// + /// OrtMemoryInfo + /// + public OrtMemoryInfo Info { get; private set; } + /// + /// Shape + /// + public long[] Shape { get; private set; } + /// + /// Data type + /// + public Tensors.TensorElementType ElementType { get; private set; } + /// + /// Actual memory ptr + /// + public IntPtr Pointer { get; private set; } + /// + /// Size of the allocation in bytes + /// + public long Size { get; private set; } + } + /// /// This class represents memory allocation made by a specific onnxruntime /// allocator. Use OrtAllocator.Allocate() to obtain an instance of this class. diff --git a/csharp/src/Microsoft.ML.OnnxRuntime/OrtIoBinding.shared.cs b/csharp/src/Microsoft.ML.OnnxRuntime/OrtIoBinding.shared.cs index 40549a684856c..382ffe7929de7 100644 --- a/csharp/src/Microsoft.ML.OnnxRuntime/OrtIoBinding.shared.cs +++ b/csharp/src/Microsoft.ML.OnnxRuntime/OrtIoBinding.shared.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using Microsoft.ML.OnnxRuntime.Tensors; using System; using System.Runtime.InteropServices; using System.Text; @@ -55,9 +56,7 @@ internal IntPtr Handle /// Bind a piece of pre-allocated native memory as a OrtValue Tensor with a given shape /// to an input with a given name. The model will read the specified input from that memory /// possibly avoiding the need to copy between devices. OrtMemoryAllocation continues to own - /// the chunk of native memory and should be alive until the end of execution. - /// The size of the allocation can not be less than required. - /// by the Tensor of the given size. + /// the chunk of native memory, and the allocation should be alive until the end of execution. /// /// of the input /// Tensor element type @@ -65,11 +64,20 @@ internal IntPtr Handle /// native memory allocation public void BindInput(string name, Tensors.TensorElementType elementType, long[] shape, OrtMemoryAllocation allocation) { - using (var ortValue = OrtValue.CreateTensorValueWithData(allocation.Info, - elementType, - shape, - allocation.Pointer, allocation.Size)) - BindInputOrOutput(name, ortValue.Handle, true); + BindOrtAllocation(name, elementType, shape, allocation, true); + } + + /// + /// Bind externally (not from OrtAllocator) allocated memory as input. + /// The model will read the specified input from that memory + /// possibly avoiding the need to copy between devices. The user code continues to own + /// the chunk of externally allocated memory, and the allocation should be alive until the end of execution. + /// + /// name + /// non ort allocated memory + public void BindInput(string name, OrtExternalAllocation allocation) + { + BindExternalAllocation(name, allocation, true); } /// @@ -80,7 +88,7 @@ public void BindInput(string name, Tensors.TensorElementType elementType, long[] /// public void BindInput(string name, FixedBufferOnnxValue fixedValue) { - if(fixedValue.OnnxValueType != OnnxValueType.ONNX_TYPE_TENSOR) + if (fixedValue.OnnxValueType != OnnxValueType.ONNX_TYPE_TENSOR) { throw new OnnxRuntimeException(ErrorCode.InvalidArgument, "Binding works only with Tensors"); } @@ -93,13 +101,12 @@ public void BindInput(string name, FixedBufferOnnxValue fixedValue) /// public void SynchronizeBoundInputs() { - NativeMethods.OrtSynchronizeBoundInputs(handle); + NativeApiStatus.VerifySuccess(NativeMethods.OrtSynchronizeBoundInputs(handle)); } /// /// Bind model output to an OrtValue as Tensor with a given type and shape. An instance of OrtMemoryAllocaiton - /// owns the memory and should be alive for the time of execution.The size of the allocation can not be less than required - /// by the Tensor of the given size. + /// owns the memory and should be alive for the time of execution. /// /// of the output /// tensor element type @@ -107,11 +114,20 @@ public void SynchronizeBoundInputs() /// allocated memory public void BindOutput(string name, Tensors.TensorElementType elementType, long[] shape, OrtMemoryAllocation allocation) { - using (var ortValue = OrtValue.CreateTensorValueWithData(allocation.Info, - elementType, - shape, - allocation.Pointer, allocation.Size)) - BindInputOrOutput(name, ortValue.Handle, false); + BindOrtAllocation(name, elementType, shape, allocation, false); + } + + /// + /// Bind externally (not from OrtAllocator) allocated memory as output. + /// The model will read the specified input from that memory + /// possibly avoiding the need to copy between devices. The user code continues to own + /// the chunk of externally allocated memory, and the allocation should be alive until the end of execution. + /// + /// name + /// non ort allocated memory + public void BindOutput(string name, OrtExternalAllocation allocation) + { + BindExternalAllocation(name, allocation, false); } /// @@ -139,7 +155,7 @@ public void BindOutputToDevice(string name, OrtMemoryInfo memInfo) { var utf8NamePinned = GCHandle.Alloc(NativeOnnxValueHelper.StringToZeroTerminatedUtf8(name), GCHandleType.Pinned); using (var pinnedName = new PinnedGCHandle(utf8NamePinned)) - NativeApiStatus.VerifySuccess(NativeMethods.OrtBindOutputToDevice(handle, pinnedName.Pointer, memInfo.Pointer)); + NativeApiStatus.VerifySuccess(NativeMethods.OrtBindOutputToDevice(handle, pinnedName.Pointer, memInfo.Pointer)); } /// @@ -148,9 +164,46 @@ public void BindOutputToDevice(string name, OrtMemoryInfo memInfo) /// public void SynchronizeBoundOutputs() { - NativeMethods.OrtSynchronizeBoundOutputs(handle); + NativeApiStatus.VerifySuccess(NativeMethods.OrtSynchronizeBoundOutputs(handle)); } + /// + /// Bind allocation obtained from an Ort allocator + /// + /// name + /// data type + /// tensor shape + /// ort allocation + /// whether this is input or output + private void BindOrtAllocation(string name, Tensors.TensorElementType elementType, long[] shape, + OrtMemoryAllocation allocation, bool isInput) + { + using (var ortValue = OrtValue.CreateTensorValueWithData(allocation.Info, + elementType, + shape, + allocation.Pointer, allocation.Size)) + BindInputOrOutput(name, ortValue.Handle, isInput); + } + + + /// + /// Bind external allocation as input or output. + /// The allocation is owned by the user code. + /// + /// name + /// non ort allocated memory + /// whether this is an input or output + private void BindExternalAllocation(string name, OrtExternalAllocation allocation, bool isInput) + { + using (var ortValue = OrtValue.CreateTensorValueWithData(allocation.Info, + allocation.ElementType, + allocation.Shape, + allocation.Pointer, + allocation.Size)) + BindInputOrOutput(name, ortValue.Handle, isInput); + } + + /// /// Internal helper /// @@ -185,7 +238,7 @@ public string[] GetOutputNames() var allocator = OrtAllocator.DefaultInstance; NativeApiStatus.VerifySuccess(NativeMethods.OrtGetBoundOutputNames(handle, allocator.Pointer, out buffer, out lengths, out count)); - if(count.Equals(UIntPtr.Zero)) + if (count.Equals(UIntPtr.Zero)) { return new string[0]; } @@ -196,9 +249,9 @@ public string[] GetOutputNames() int outputCount = (int)count; var lens = new int[outputCount]; int totalLength = 0; - for(int i = 0; i < outputCount; ++i) + for (int i = 0; i < outputCount; ++i) { - var len =(int)Marshal.ReadIntPtr(lengths, IntPtr.Size * i); + var len = (int)Marshal.ReadIntPtr(lengths, IntPtr.Size * i); lens[i] = len; totalLength += len; } @@ -208,7 +261,7 @@ public string[] GetOutputNames() string[] result = new string[outputCount]; int readOffset = 0; - for(int i = 0; i < outputCount; ++i) + for (int i = 0; i < outputCount; ++i) { var strLen = lens[i]; result[i] = Encoding.UTF8.GetString(stringData, readOffset, strLen); @@ -229,23 +282,24 @@ public IDisposableReadOnlyCollection GetOutputValues() var allocator = OrtAllocator.DefaultInstance; NativeApiStatus.VerifySuccess(NativeMethods.OrtGetBoundOutputValues(handle, allocator.Pointer, out ortValues, out count)); - if(count.Equals(UIntPtr.Zero)) + if (count.Equals(UIntPtr.Zero)) { return new DisposableList(); } - using(var ortValuesAllocation = new OrtMemoryAllocation(allocator, ortValues, 0)) + using (var ortValuesAllocation = new OrtMemoryAllocation(allocator, ortValues, 0)) { int outputCount = (int)count; var ortList = new DisposableList(outputCount); try { - for(int i = 0; i < outputCount; ++i) + for (int i = 0; i < outputCount; ++i) { IntPtr ortValue = Marshal.ReadIntPtr(ortValues, IntPtr.Size * i); ortList.Add(new OrtValue(ortValue)); } - } catch(Exception) + } + catch (Exception) { ortList.Dispose(); throw; diff --git a/csharp/src/Microsoft.ML.OnnxRuntime/OrtValue.shared.cs b/csharp/src/Microsoft.ML.OnnxRuntime/OrtValue.shared.cs index 49f9cb33f0686..08609bb4826a6 100644 --- a/csharp/src/Microsoft.ML.OnnxRuntime/OrtValue.shared.cs +++ b/csharp/src/Microsoft.ML.OnnxRuntime/OrtValue.shared.cs @@ -94,16 +94,25 @@ public static OrtValue CreateTensorValueWithData(OrtMemoryInfo memInfo, TensorEl { Type type; int width; - TensorElementTypeConverter.GetTypeAndWidth(elementType, out type, out width); - if(width < 1) + if (!TensorElementTypeConverter.GetTypeAndWidth(elementType, out type, out width)) { - throw new OnnxRuntimeException(ErrorCode.InvalidArgument, "Unsupported data type (such as string)"); + throw new OnnxRuntimeException(ErrorCode.InvalidArgument, + "Unable to query type information for data type: " + elementType.ToString()); + } + + if (elementType == TensorElementType.String) + { + throw new OnnxRuntimeException(ErrorCode.InvalidArgument, + "Cannot map managed strings buffer to native OrtValue"); } var shapeSize = ArrayUtilities.GetSizeForShape(shape); - if((shapeSize * width) > bufferLength) + var requiredBufferSize = shapeSize * width; + if (requiredBufferSize > bufferLength) { - throw new OnnxRuntimeException(ErrorCode.InvalidArgument, "Can not bind the shape to smaller buffer"); + var message = String.Format("Shape of: {0} elements requires a buffer of at least {1} bytes. Provided: {2} bytes", + shapeSize, requiredBufferSize, bufferLength); + throw new OnnxRuntimeException(ErrorCode.InvalidArgument, message); } IntPtr ortValueHandle = IntPtr.Zero; diff --git a/csharp/test/Microsoft.ML.OnnxRuntime.Tests.Common/OrtIoBindingAllocationTest.cs b/csharp/test/Microsoft.ML.OnnxRuntime.Tests.Common/OrtIoBindingAllocationTest.cs index 7c9fcfe34819c..c6312b65f751b 100644 --- a/csharp/test/Microsoft.ML.OnnxRuntime.Tests.Common/OrtIoBindingAllocationTest.cs +++ b/csharp/test/Microsoft.ML.OnnxRuntime.Tests.Common/OrtIoBindingAllocationTest.cs @@ -2,8 +2,10 @@ // Licensed under the MIT License. using Microsoft.ML.OnnxRuntime.Tensors; +using Microsoft.Win32.SafeHandles; using System; using System.Linq; +using System.Runtime.InteropServices; using Xunit; using static Microsoft.ML.OnnxRuntime.Tests.InferenceTest; @@ -23,15 +25,36 @@ private static void PopulateNativeBufferFloat(OrtMemoryAllocation buffer, float[ Assert.True(false); } + PopulateNativeBuffer(buffer.Pointer, elements); + } + + private static void PopulateNativeBuffer(IntPtr buffer, float[] elements) + { unsafe { - float* p = (float*)buffer.Pointer; + float* p = (float*)buffer; for (int i = 0; i < elements.Length; ++i) { *p++ = elements[i]; } } } + /// + /// Use to free globally allocated memory + /// + class OrtSafeMemoryHandle : SafeHandle + { + public OrtSafeMemoryHandle(IntPtr allocPtr) : base(allocPtr, true) { } + + public override bool IsInvalid => handle == IntPtr.Zero; + + protected override bool ReleaseHandle() + { + Marshal.FreeHGlobal(handle); + handle = IntPtr.Zero; + return true; + } + } [Fact(DisplayName = "TestIOBindingWithOrtAllocation")] public void TestIOBindingWithOrtAllocation() @@ -61,8 +84,17 @@ public void TestIOBindingWithOrtAllocation() var ortAllocationInput = allocator.Allocate((uint)inputData.Length * sizeof(float)); dispList.Add(ortAllocationInput); var inputShape = Array.ConvertAll(inputMeta[inputName].Dimensions, d => d); + var shapeSize = ArrayUtilities.GetSizeForShape(inputShape); + Assert.Equal(shapeSize, inputData.Length); PopulateNativeBufferFloat(ortAllocationInput, inputData); + // Create an external allocation for testing OrtExternalAllocation + var cpuMemInfo = OrtMemoryInfo.DefaultInstance; + var sizeInBytes = shapeSize * sizeof(float); + IntPtr allocPtr = Marshal.AllocHGlobal((int)sizeInBytes); + dispList.Add(new OrtSafeMemoryHandle(allocPtr)); + PopulateNativeBuffer(allocPtr, inputData); + var ortAllocationOutput = allocator.Allocate((uint)outputData.Length * sizeof(float)); dispList.Add(ortAllocationOutput); @@ -102,6 +134,46 @@ public void TestIOBindingWithOrtAllocation() Assert.Equal(outputData, tensor.ToArray(), new FloatComparer()); } } + // 3. Test external allocation + { + var externalInputAllocation = new OrtExternalAllocation(cpuMemInfo, inputShape, + Tensors.TensorElementType.Float, allocPtr, sizeInBytes); + + ioBinding.BindInput(inputName, externalInputAllocation); + ioBinding.BindOutput(outputName, Tensors.TensorElementType.Float, outputShape, ortAllocationOutput); + ioBinding.SynchronizeBoundInputs(); + using (var outputs = session.RunWithBindingAndNames(runOptions, ioBinding)) + { + ioBinding.SynchronizeBoundOutputs(); + Assert.Equal(1, outputs.Count); + var output = outputs.ElementAt(0); + Assert.Equal(outputName, output.Name); + var tensor = output.AsTensor(); + Assert.True(tensor.IsFixedSize); + Assert.Equal(outputData, tensor.ToArray(), new FloatComparer()); + } + } + // 4. Some negative tests for external allocation + { + // Small buffer size + Action smallBuffer = delegate () + { + new OrtExternalAllocation(cpuMemInfo, inputShape, + Tensors.TensorElementType.Float, allocPtr, sizeInBytes - 10); + }; + + Assert.Throws(smallBuffer); + + Action stringType = delegate () + { + new OrtExternalAllocation(cpuMemInfo, inputShape, + Tensors.TensorElementType.String, allocPtr, sizeInBytes); + }; + + Assert.Throws(stringType); + + } + } } } diff --git a/csharp/test/Microsoft.ML.OnnxRuntime.Tests.Common/TestDataLoader.cs b/csharp/test/Microsoft.ML.OnnxRuntime.Tests.Common/TestDataLoader.cs index e4ff2bf9c71da..8b556e68c1af5 100644 --- a/csharp/test/Microsoft.ML.OnnxRuntime.Tests.Common/TestDataLoader.cs +++ b/csharp/test/Microsoft.ML.OnnxRuntime.Tests.Common/TestDataLoader.cs @@ -56,8 +56,7 @@ internal static void GetTypeAndWidth(Tensors.TensorElementType elemType, out Typ } else { - type = null; - width = 0; + throw new OnnxRuntimeException(ErrorCode.InvalidArgument, "Unable to get information for type: " + elemType.ToString()); } } From 73183616451655a0912b7d5068859036f804d035 Mon Sep 17 00:00:00 2001 From: Guoyu Wang <62914304+gwang-msft@users.noreply.github.com> Date: Tue, 1 Feb 2022 18:14:58 -0800 Subject: [PATCH 13/56] [NNAPI QDQ] Add QDQ Resize support (#10442) * Add NNAPI support of QDQ Resize * minor update to UT * fix build break * fix android UT failure * address cr comments --- .../nnapi/nnapi_builtin/builders/helper.cc | 2 + .../nnapi/nnapi_builtin/builders/helper.h | 1 + .../nnapi_builtin/builders/op_builder.cc | 19 +++++++++ .../builders/op_support_checker.cc | 34 ++++++++++++++++ onnxruntime/test/optimizer/qdq_test_utils.cc | 40 +++++++++++++++++++ onnxruntime/test/optimizer/qdq_test_utils.h | 13 ++++-- .../test/optimizer/qdq_transformer_test.cc | 27 ++----------- .../test/providers/nnapi/nnapi_basic_test.cc | 40 +++++++++++++++---- onnxruntime/test/util/test_utils.cc | 4 ++ 9 files changed, 145 insertions(+), 35 deletions(-) create mode 100644 onnxruntime/test/optimizer/qdq_test_utils.cc diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc index eecf188822479..ee220b2a7ee45 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc @@ -68,6 +68,8 @@ QuantizedOpType GetQuantizedOpType(const NodeUnit& node_unit) { } else if (node_unit.UnitType() == NodeUnit::Type::QDQGroup) { if (op_type == "Conv") return QuantizedOpType::QDQConv; + else if (op_type == "Resize") + return QuantizedOpType::QDQResize; } else { // throw? } diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h index fe0b1ea51b437..c5b3e1106d966 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h @@ -86,6 +86,7 @@ enum class QuantizedOpType : uint8_t { // QLinearMul, // QLinearReduceMean, QDQConv, + QDQResize, // TODO, add other QDQ NodeUnit types }; diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc index 6272153cd2baa..e29c3c6401a38 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc @@ -2258,10 +2258,20 @@ class ResizeOpBuilder : public BaseOpBuilder { private: Status AddToModelBuilderImpl(ModelBuilder& model_builder, const NodeUnit& node_unit) const override; + static bool IsQuantizedOp(const NodeUnit& node_unit) ORT_MUST_USE_RESULT; // TODO, see if we want to move this to BaseOpBuilder }; +/* static */ bool ResizeOpBuilder::IsQuantizedOp(const NodeUnit& node_unit) { + return GetQuantizedOpType(node_unit) == QuantizedOpType::QDQResize; +} + void ResizeOpBuilder::AddInitializersToSkip(ModelBuilder& model_builder, const NodeUnit& node_unit) const { const auto& inputs = node_unit.Inputs(); + if (IsQuantizedOp(node_unit)) { + AddQuantizationScaleAndZeroPointToSkip(model_builder, *inputs[0].quant_param); // x_scale, x_zp + AddQuantizationScaleAndZeroPointToSkip(model_builder, *node_unit.Outputs()[0].quant_param); // y_scale, y_zp + } + // We don't really use ROI here, so add them to skipped list model_builder.AddInitializerToSkip(inputs[1].node_arg.Name()); // ROI @@ -2296,6 +2306,15 @@ Status ResizeOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const } } + // Check if the quantization scale and ZP is correct + if (IsQuantizedOp(node_unit)) { + float x_scale = 0.0f; + int32_t x_zero_point = 0; + ORT_RETURN_IF_ERROR(GetQuantizationScaleAndZeroPoint( + initializers, node_unit.Inputs()[0], node_unit.ModelPath(), x_scale, x_zero_point)); + ORT_RETURN_IF_ERROR(IsValidInputQuantizedType(model_builder, input, x_scale, x_zero_point)); + } + bool is_linear_resize = helper.Get("mode", "nearest") == "linear"; int32_t operationCode = is_linear_resize ? ANEURALNETWORKS_RESIZE_BILINEAR diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc index 3857de16f30ea..a8b299e6d1ba8 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc @@ -1466,8 +1466,14 @@ class ResizeOpSupportChecker : public BaseOpSupportChecker { int GetMinSupportedOpSet(const NodeUnit& /* node_unit */) const override { return 11; } bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; + bool IsNodeUnitTypeSupported(const NodeUnit& /* node_unit */) const override { return true; } + static bool IsQuantizedOp(const NodeUnit& node_unit) ORT_MUST_USE_RESULT; // TODO, see if we want to move this to BaseOpBuilder }; +/* static */ bool ResizeOpSupportChecker::IsQuantizedOp(const NodeUnit& node_unit) { + return GetQuantizedOpType(node_unit) == QuantizedOpType::QDQResize; +} + bool ResizeOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, const OpSupportCheckParams& params) const { Shape input_shape; @@ -1587,6 +1593,34 @@ bool ResizeOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initi } } } + + if (IsQuantizedOp(node_unit)) { + // For QDQResize, we only support uint8 output now + // TODO, add int8 support to NNAPI, and maybe move all the output type check into a virtual function + // similar to HasSupportedInputsImpl + int32_t output_type; + if (!GetType(node_unit.Outputs()[0].node_arg, output_type)) + return false; + + if (output_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8) { + LOGS_DEFAULT(VERBOSE) << "[Resize] output type: [" << output_type + << "] is not supported for now"; + return false; + } + + // Check input scales and ZPs + if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, true /* is_input */)) + return false; + if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, true /* is_input */)) + return false; + + // Check output scale and ZP + if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, false /* is_input */)) + return false; + if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, false /* is_input */)) + return false; + } + return true; } diff --git a/onnxruntime/test/optimizer/qdq_test_utils.cc b/onnxruntime/test/optimizer/qdq_test_utils.cc new file mode 100644 index 0000000000000..08c1c751991b4 --- /dev/null +++ b/onnxruntime/test/optimizer/qdq_test_utils.cc @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "qdq_test_utils.h" + +namespace onnxruntime { +namespace test { + +GetQDQTestCaseFn BuildQDQResizeTestCase( + const std::vector& input_shape, + const std::vector& sizes_data, + const std::string& mode, + const std::string& coordinate_transformation_mode) { + return [input_shape, sizes_data, mode, coordinate_transformation_mode](ModelTestBuilder& builder) { + auto* input1_arg = builder.MakeInput(input_shape, + std::numeric_limits::min(), + std::numeric_limits::max()); + auto* roi = builder.MakeInitializer({0}, {}); + auto* scales = builder.MakeInitializer({0}, {}); + auto* sizes = builder.Make1DInitializer(sizes_data); + auto* output_arg = builder.MakeOutput(); + + // add DQ + auto* dq_output = builder.MakeIntermediate(); + builder.AddDequantizeLinearNode(input1_arg, .003f, 1, dq_output); + + // add Resize + auto* resize_output = builder.MakeIntermediate(); + Node& resize_node = builder.AddNode("Resize", {dq_output, roi, scales, sizes}, {resize_output}); + + resize_node.AddAttribute("mode", mode); + resize_node.AddAttribute("coordinate_transformation_mode", coordinate_transformation_mode); + + // add Q + builder.AddQuantizeLinearNode(resize_output, .003f, 1, output_arg); + }; +} + +} // namespace test +} // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/test/optimizer/qdq_test_utils.h b/onnxruntime/test/optimizer/qdq_test_utils.h index 2327ba74850b7..118ed8697dae0 100644 --- a/onnxruntime/test/optimizer/qdq_test_utils.h +++ b/onnxruntime/test/optimizer/qdq_test_utils.h @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +#pragma once + #include "graph_transform_test_builder.h" #include "core/optimizer/qdq_transformer/selectors_actions/qdq_selector_action_transformer.h" @@ -12,7 +14,7 @@ namespace onnxruntime { namespace test { -using GetQDQConvTestCaseFn = std::function; +using GetQDQTestCaseFn = std::function; template typename std::enable_if::value, NodeArg*>::type @@ -24,10 +26,8 @@ AddQDQNodePair(ModelTestBuilder& builder, NodeArg* q_input, float scale, T zp = return dq_output; } -// TODO: for now it just builds a conv qdq graph. -// can be modified and made it shared among different qdq test graphs associated with other operators template -GetQDQConvTestCaseFn BuildQDQConvTestCase(const std::vector& input_shape, const std::vector& weights_shape) { +GetQDQTestCaseFn BuildQDQConvTestCase(const std::vector& input_shape, const std::vector& weights_shape) { return [input_shape, weights_shape](ModelTestBuilder& builder) { auto* input_arg = builder.MakeInput(input_shape, -1.f, 1.f); auto* output_arg = builder.MakeOutput(); @@ -78,5 +78,10 @@ GetQDQConvTestCaseFn BuildQDQConvTestCase(const std::vector& input_shap }; } +GetQDQTestCaseFn BuildQDQResizeTestCase(const std::vector& input_shape, + const std::vector& sizes_data, + const std::string& mode = "nearest", + const std::string& coordinate_transformation_mode = "half_pixel"); + } // namespace test } // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/test/optimizer/qdq_transformer_test.cc b/onnxruntime/test/optimizer/qdq_transformer_test.cc index 10d3bec7df1dc..bca4eb737c81c 100644 --- a/onnxruntime/test/optimizer/qdq_transformer_test.cc +++ b/onnxruntime/test/optimizer/qdq_transformer_test.cc @@ -633,27 +633,6 @@ TEST(QDQTransformerTests, Transpose_No_Fusion) { TEST(QDQTransformerTests, Resize) { auto test_case = [&](const std::vector& input1_shape, const std::vector& sizes_shape) { - auto build_test_case = [&](ModelTestBuilder& builder) { - auto* input1_arg = builder.MakeInput(input1_shape, - std::numeric_limits::min(), - std::numeric_limits::max()); - auto* roi = builder.MakeInitializer({0}, {}); - auto* scales = builder.MakeInitializer({0}, {}); - auto* sizes = builder.MakeInitializer(sizes_shape, 1, 16); - auto* output_arg = builder.MakeOutput(); - - // add DQ - auto* dq_output = builder.MakeIntermediate(); - builder.AddDequantizeLinearNode(input1_arg, .003f, 1, dq_output); - - // add Resize - auto* resize_output = builder.MakeIntermediate(); - builder.AddNode("Resize", {dq_output, roi, scales, sizes}, {resize_output}); - - // add Q - builder.AddQuantizeLinearNode(resize_output, .003f, 1, output_arg); - }; - auto check_matmul_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["Resize"], 1); @@ -661,12 +640,14 @@ TEST(QDQTransformerTests, Resize) { EXPECT_EQ(op_to_count["DequantizeLinear"], 0); }; - TransformerTester(build_test_case, check_matmul_graph, + TransformerTester(BuildQDQResizeTestCase(input1_shape, sizes_shape), + check_matmul_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; - test_case({2, 13, 12, 37}, {4}); + RandomValueGenerator rand_gen{optional{2345}}; + test_case({2, 13, 12, 37}, rand_gen.Uniform(std::vector{4}, 1, 16)); } TEST(QDQTransformerTests, Resize_No_Fusion) { diff --git a/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc b/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc index 4ac0c67e9e6dc..d0cd2bb786653 100644 --- a/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc +++ b/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc @@ -239,14 +239,10 @@ TEST(NnapiExecutionProviderTest, TestNoShapeInputModel) { << "No node should be taken by the NNAPI EP"; } -#if defined(__ANDROID__) -TEST(NnapiExecutionProviderTest, TestQDQModel) { - onnxruntime::Model model("nnapi_qdq_test_graph", false, DefaultLoggingManager().DefaultLogger()); +static void RunQDQModelTest(const GetQDQTestCaseFn& build_test_case, const char* test_description) { + onnxruntime::Model model(test_description, false, DefaultLoggingManager().DefaultLogger()); Graph& graph = model.MainGraph(); ModelTestBuilder helper(graph); - - auto build_test_case = BuildQDQConvTestCase({1, 1, 5, 5} /*input_shape*/, - {1, 1, 3, 3} /*weights_shape*/); build_test_case(helper); helper.SetGraphOutputs(); ASSERT_STATUS_OK(model.MainGraph().Resolve()); @@ -255,13 +251,41 @@ TEST(NnapiExecutionProviderTest, TestQDQModel) { std::string model_data; model.ToProto().SerializeToString(&model_data); +#if defined(__ANDROID__) RunAndVerifyOutputsWithEP(model_data, "NnapiExecutionProviderTest.TestQDQModel", std::make_unique(0), helper.feeds_); +#else + // test load only + SessionOptions so; + InferenceSessionWrapper session_object{so, GetEnvironment()}; + ASSERT_STATUS_OK(session_object.RegisterExecutionProvider(std::make_unique(0))); + ASSERT_STATUS_OK(session_object.Load(model_data.data(), static_cast(model_data.size()))); + ASSERT_STATUS_OK(session_object.Initialize()); + ASSERT_GT(CountAssignedNodes(session_object.GetGraph(), kNnapiExecutionProvider), 0) + << "Some nodes should have been taken by the NNAPI EP"; +#endif +} + +TEST(NnapiExecutionProviderTest, TestQDQConv) { + RunQDQModelTest(BuildQDQConvTestCase( + {1, 1, 5, 5} /*input_shape*/, + {1, 1, 3, 3} /*weights_shape*/), + "nnapi_qdq_test_graph_conv"); +} - // TODO: can add test load only verfication here later +TEST(NnapiExecutionProviderTest, TestQDQResize) { + // NNAPI EP does not support the default setting of Resize Op + // Use bi-linear and asymmetric for NNAPI EP only + RunQDQModelTest(BuildQDQResizeTestCase({1, 3, 64, 64} /* input_shape */, + {1, 3, 32, 32} /* sizes_data */, + "linear" /* mode */, + "asymmetric" /* coordinate_transformation_mode */), + "nnapi_qdq_test_graph_resize"); } -#endif // defined(__ANDROID__) #endif // !(ORT_MINIMAL_BUILD) diff --git a/onnxruntime/test/util/test_utils.cc b/onnxruntime/test/util/test_utils.cc index 476fed4282cdc..220b1342f12d9 100644 --- a/onnxruntime/test/util/test_utils.cc +++ b/onnxruntime/test/util/test_utils.cc @@ -35,6 +35,10 @@ static void VerifyOutputs(const std::vector& output_names, EXPECT_THAT(ltensor.DataAsSpan(), ::testing::ContainerEq(rtensor.DataAsSpan())) << " mismatch for " << output_names[i]; break; + case ONNX_NAMESPACE::TensorProto_DataType_UINT8: + EXPECT_THAT(ltensor.DataAsSpan(), ::testing::ContainerEq(rtensor.DataAsSpan())) + << " mismatch for " << output_names[i]; + break; case ONNX_NAMESPACE::TensorProto_DataType_FLOAT: { constexpr float abs_err = 1e-5f; From 1aa078969163c9cb1c70f07a65362c2e781fbf12 Mon Sep 17 00:00:00 2001 From: Yufeng Li Date: Wed, 2 Feb 2022 10:35:29 -0800 Subject: [PATCH 14/56] add qdq support for QGemm (#10414) * add qgemm in quantization tool * add qdq support for QGemm * fix build break * fix OperatorKernels.md --- docs/OperatorKernels.md | 2 +- .../contrib_ops/cpu/cpu_contrib_kernels.cc | 2 + .../cpu/quantization/quant_gemm.cc | 23 ++- .../selectors_actions/qdq_actions.cc | 62 +++++++ .../selectors_actions/qdq_actions.h | 20 +++ .../qdq_selector_action_transformer.cc | 21 +++ .../selectors_actions/qdq_selectors.cc | 59 ++++++- .../selectors_actions/qdq_selectors.h | 22 ++- .../optimizer/selectors_actions/helpers.cc | 10 ++ .../optimizer/selectors_actions/helpers.h | 22 ++- .../tools/quantization/onnx_quantizer.py | 4 +- .../tools/quantization/operators/gemm.py | 117 ++++++++++++ .../tools/quantization/qdq_quantizer.py | 8 +- .../python/tools/quantization/quantize.py | 15 +- .../python/tools/quantization/registry.py | 3 + .../test/contrib_ops/quant_gemm_test.cc | 66 ++++--- .../test/optimizer/qdq_transformer_test.cc | 167 ++++++++++++++++++ .../providers/cpu/math/matmul_integer_test.cc | 16 +- .../test/python/quantization/test_op_gemm.py | 4 +- .../kernel_def_hashes/contrib.cpu.json | 4 + 20 files changed, 579 insertions(+), 68 deletions(-) create mode 100644 onnxruntime/python/tools/quantization/operators/gemm.py diff --git a/docs/OperatorKernels.md b/docs/OperatorKernels.md index 4d885fdb15530..b8a46956f3899 100644 --- a/docs/OperatorKernels.md +++ b/docs/OperatorKernels.md @@ -405,7 +405,7 @@ Do not modify directly.* |Pad|*in* data:**T**
*in* pads:**tensor(int64)**
*in* value:**T**
*out* output:**T**|1+|**T** = tensor(float)| |QAttention|*in* input:**T1**
*in* weight:**T2**
*in* bias:**T3**
*in* input_scale:**T3**
*in* weight_scale:**T3**
*in* mask_index:**T4**
*in* input_zero_point:**T1**
*in* weight_zero_point:**T2**
*in* past:**T3**
*out* output:**T3**
*out* present:**T3**|1+|**T1** = tensor(uint8)
**T2** = tensor(int8), tensor(uint8)
**T3** = tensor(float)
**T4** = tensor(int32)| |QEmbedLayerNormalization|*in* input_ids:**T1**
*in* segment_ids:**T1**
*in* word_embedding_quant:**T2**
*in* position_embedding_quant:**T2**
*in* segment_embedding:**T2**
*in* gamma_quant:**T2**
*in* beta_quant:**T2**
*in* mask:**T1**
*in* word_embedding_scale:**T**
*in* position_embedding_scale:**T**
*in* segment_embedding_scale:**T**
*in* gamma_scale:**T**
*in* beta_scale:**T**
*in* word_embedding_zero_point:**T2**
*in* position_embedding_zero_point:**T2**
*in* segment_embedding_zero_point:**T2**
*in* gamma_zero_point:**T2**
*in* beta_zero_point:**T2**
*out* layernorm_out:**T**
*out* mask_index_out:**T1**|1+|**T** = tensor(float)| -|QGemm|*in* A:**TA**
*in* a_scale:**T**
*in* a_zero_point:**TA**
*in* B:**TB**
*in* b_scale:**T**
*in* b_zero_point:**TB**
*in* C:**TC**
*in* y_scale:**T**
*in* y_zero_point:**TYZ**
*out* Y:**TY**|1+|**T** = tensor(float)
**TA** = tensor(uint8)
**TB** = tensor(int8), tensor(uint8)
**TC** = tensor(int32)
**TY** = tensor(float), tensor(uint8)
**TYZ** = tensor(uint8)| +|QGemm|*in* A:**TA**
*in* a_scale:**T**
*in* a_zero_point:**TA**
*in* B:**TB**
*in* b_scale:**T**
*in* b_zero_point:**TB**
*in* C:**TC**
*in* y_scale:**T**
*in* y_zero_point:**TYZ**
*out* Y:**TY**|1+|**T** = tensor(float)
**TA** = tensor(int8), tensor(uint8)
**TB** = tensor(int8), tensor(uint8)
**TC** = tensor(int32)
**TY** = tensor(float), tensor(int8), tensor(uint8)
**TYZ** = tensor(int8), tensor(uint8)| |QLinearAdd|*in* A:**T**
*in* A_scale:**tensor(float)**
*in* A_zero_point:**T**
*in* B:**T**
*in* B_scale:**tensor(float)**
*in* B_zero_point:**T**
*in* C_scale:**tensor(float)**
*in* C_zero_point:**T**
*out* C:**T**|1+|**T** = tensor(int8), tensor(uint8)| |QLinearConv|*in* x:**T1**
*in* x_scale:**tensor(float)**
*in* x_zero_point:**T1**
*in* w:**T2**
*in* w_scale:**tensor(float)**
*in* w_zero_point:**T2**
*in* y_scale:**tensor(float)**
*in* y_zero_point:**T3**
*in* B:**T4**
*out* y:**T3**|1+|**T1** = tensor(int8), tensor(uint8)
**T2** = tensor(int8), tensor(uint8)
**T3** = tensor(int8), tensor(uint8)
**T4** = tensor(int32)| |QLinearLeakyRelu|*in* X:**T**
*in* X_scale:**tensor(float)**
*in* X_zero_point:**T**
*in* Y_scale:**tensor(float)**
*in* Y_zero_point:**T**
*out* Y:**T**|1+|**T** = tensor(int8), tensor(uint8)| diff --git a/onnxruntime/contrib_ops/cpu/cpu_contrib_kernels.cc b/onnxruntime/contrib_ops/cpu/cpu_contrib_kernels.cc index e9d22000b07fb..08125ce51bca2 100644 --- a/onnxruntime/contrib_ops/cpu/cpu_contrib_kernels.cc +++ b/onnxruntime/contrib_ops/cpu/cpu_contrib_kernels.cc @@ -78,6 +78,7 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, int8_t, NhwcMaxPool); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, uint8_t, NhwcMaxPool); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, float, QEmbedLayerNormalization); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, int8_t, QGemm); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kMSDomain, 1, uint8_t, QGemm); // ******** End: Quantization ******************* // @@ -169,6 +170,7 @@ Status RegisterQuantizationKernels(KernelRegistry& kernel_registry) { BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, }; diff --git a/onnxruntime/contrib_ops/cpu/quantization/quant_gemm.cc b/onnxruntime/contrib_ops/cpu/quantization/quant_gemm.cc index 9bc7b8e76907e..8d83ab7f681db 100644 --- a/onnxruntime/contrib_ops/cpu/quantization/quant_gemm.cc +++ b/onnxruntime/contrib_ops/cpu/quantization/quant_gemm.cc @@ -44,8 +44,10 @@ class QGemm : protected GemmBase, public MatMulIntegerBase { AllocatorPtr allocator; ORT_RETURN_IF_ERROR(context->GetTempSpaceAllocator(&allocator)); + bool a_is_signed = a->IsDataType(); + const uint8_t* a_data = static_cast(a->DataRaw()); + BufferUniquePtr a_trans_buffer; - const uint8_t* a_data = a->template Data(); if (trans_A_ == CblasTrans) { a_data = quantization::TransPoseInputData(a_data, a_trans_buffer, allocator, K, M); } @@ -82,12 +84,12 @@ class QGemm : protected GemmBase, public MatMulIntegerBase { GemmBroadcastBias(M, N, 1.f, c->template Data(), &(c->Shape()), gemm_output_data); } - MLAS_GEMM_QUANT_SHAPE_PARAMS gemm_shape{M, N, K, false /*AIsSigned*/, b_is_signed, c != nullptr}; + MLAS_GEMM_QUANT_SHAPE_PARAMS gemm_shape{M, N, K, a_is_signed, b_is_signed, c != nullptr}; MLAS_GEMM_QUANT_DATA_PARAMS gemm_param; gemm_param.A = a_data; gemm_param.lda = gemm_shape.K; - gemm_param.ZeroPointA = *(a_zp->template Data()); + gemm_param.ZeroPointA = *(static_cast(a_zp->DataRaw())); gemm_param.B = b_data; gemm_param.ldb = gemm_shape.N; @@ -220,5 +222,20 @@ ONNX_OPERATOR_TYPED_KERNEL_EX( .TypeConstraint("TY", {DataTypeImpl::GetTensorType(), DataTypeImpl::GetTensorType()}), QGemm); +ONNX_OPERATOR_TYPED_KERNEL_EX( + QGemm, + kMSDomain, + 1, + int8_t, + kCpuExecutionProvider, + KernelDefBuilder() + .TypeConstraint("T", DataTypeImpl::GetTensorType()) + .TypeConstraint("TA", DataTypeImpl::GetTensorType()) + .TypeConstraint("TB", DataTypeImpl::GetTensorType()) + .TypeConstraint("TC", DataTypeImpl::GetTensorType()) + .TypeConstraint("TYZ", DataTypeImpl::GetTensorType()) + .TypeConstraint("TY", {DataTypeImpl::GetTensorType(), DataTypeImpl::GetTensorType()}), + QGemm); + } // namespace contrib } // namespace onnxruntime diff --git a/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_actions.cc b/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_actions.cc index 63741cfb9773f..f89f201fd7aab 100644 --- a/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_actions.cc +++ b/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_actions.cc @@ -223,5 +223,67 @@ Status MatMulReplaceWithQLinear::Run(Graph& graph, const NodesToOptimize& select } } +static std::vector GetGemmMoveInfo(bool does_q_node_exist) { + NTO::NodeLocation dq_A{NTO::NodeType::kInput, 0}; + NTO::NodeLocation dq_B{NTO::NodeType::kInput, 1}; + NTO::NodeLocation dq_bias{NTO::NodeType::kInput, 2}; + NTO::NodeLocation target{NTO::NodeType::kTarget, 0}; + NTO::NodeLocation q{NTO::NodeType::kOutput, 0}; + + std::vector moves{ + MoveAll(dq_A, ArgType::kInput), // append all inputs from DQ of A + MoveAll(dq_B, ArgType::kInput), // append all inputs from DQ of B + MoveAndAppend(dq_bias, ArgType::kInput, 0, ArgType::kInput, true, true)}; // (optional) append bias + + if (does_q_node_exist) { + moves.push_back(MoveAndAppend(q, ArgType::kInput, 1, ArgType::kInput)); // append scale (input 1) from Q + moves.push_back(MoveAndAppend(q, ArgType::kInput, 2, ArgType::kInput)); // append zp (input 2) from Q + moves.push_back(MoveAll(q, ArgType::kOutput)); // and use the outputs from Q + } else { + moves.push_back(MoveAll(target, ArgType::kOutput)); + } + + return moves; +} + +GemmReplaceWithQuant::GemmReplaceWithQuant() + : qgemm_with_float_as_output_replacer_(kMSDomain, GetGemmMoveInfo(false), "QGemm"), + qgemm_with_8bits_as_output_replacer_(kMSDomain, GetGemmMoveInfo(true), "QGemm") { +} + +Status GemmReplaceWithQuant::Run(Graph& graph, const NodesToOptimize& selected_nodes) const { + RemoveAttrBeta(selected_nodes); + bool is_output_float = selected_nodes.num_outputs == 0; + if (is_output_float) { + return qgemm_with_float_as_output_replacer_.Run(graph, selected_nodes); + } + + return qgemm_with_8bits_as_output_replacer_.Run(graph, selected_nodes); +} + +#if !defined(ORT_MINIMAL_BUILD) +Status GemmReplaceWithQuant::RunForSave(Graph& graph, + const NodesToOptimize& selected_nodes, + const SatRuntimeOptimizationSaveContext& save_context, + SavedState& saved_state, + bool& graph_modified) const { + RemoveAttrBeta(selected_nodes); + bool is_output_float = selected_nodes.num_outputs == 0; + if (is_output_float) { + return qgemm_with_float_as_output_replacer_.RunForSave(graph, + selected_nodes, + save_context, + saved_state, + graph_modified); + } + + return qgemm_with_8bits_as_output_replacer_.RunForSave(graph, + selected_nodes, + save_context, + saved_state, + graph_modified); +} +#endif // !defined(ORT_MINIMAL_BUILD) + } // namespace QDQ } // namespace onnxruntime diff --git a/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_actions.h b/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_actions.h index 2fa72a19c03b1..a81a4ec3ea0c0 100644 --- a/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_actions.h +++ b/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_actions.h @@ -67,5 +67,25 @@ struct MatMulReplaceWithQLinear : public Action { BinaryReplaceWithQLinear qlinear_matmul_replacer_; }; +struct GemmReplaceWithQuant : public Action { + GemmReplaceWithQuant(); + + Status Run(Graph&, const NodesToOptimize& selected_nodes) const override; + +#if !defined(ORT_MINIMAL_BUILD) + Status RunForSave(Graph& /*graph*/, const NodesToOptimize& /*selected_nodes*/, + const SatRuntimeOptimizationSaveContext& /*save_context*/, + SavedState& /*saved_state*/, bool& /*graph_modified*/) const override; +#endif // !defined(ORT_MINIMAL_BUILD) + + static inline void RemoveAttrBeta(const NodesToOptimize& selected_nodes) { + selected_nodes.Target().ClearAttribute("beta"); + } + + private: + QDQReplaceWithNew qgemm_with_float_as_output_replacer_; + QDQReplaceWithNew qgemm_with_8bits_as_output_replacer_; +}; + } // namespace QDQ } // namespace onnxruntime diff --git a/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selector_action_transformer.cc b/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selector_action_transformer.cc index 50bc405378fb0..ab1fcdcec3e73 100644 --- a/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selector_action_transformer.cc +++ b/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selector_action_transformer.cc @@ -167,6 +167,26 @@ void MatMulQDQRules(SelectorActionRegistry& qdq_selector_action_registry, bool i #endif } +void GemmQDQRules(SelectorActionRegistry& qdq_selector_action_registry) { + // 3 to 5 nodes. 0=DQ A, 1=DQ B, 2=DQ C(optional), 3=Gemm, 4=Q Y(optional) + // Replace with QGemm + // Delete all original nodes. + const std::string action_name{"Gemm"}; + + std::unique_ptr action = std::make_unique(); + +#if !defined(ORT_MINIMAL_BUILD) + std::unique_ptr selector = std::make_unique(); + qdq_selector_action_registry.RegisterSelectorAndAction(action_name, + {{"Gemm", {}}}, + std::move(selector), + std::move(action)); + +#else + qdq_selector_action_registry.RegisterAction(action_name, std::move(action)); +#endif +} + SelectorActionRegistry CreateSelectorActionRegistry(bool is_int8_allowed) { SelectorActionRegistry qdq_selector_action_registry; @@ -177,6 +197,7 @@ SelectorActionRegistry CreateSelectorActionRegistry(bool is_int8_allowed) { VariadicOpQDQRules(qdq_selector_action_registry); ConvQDQRules(qdq_selector_action_registry, is_int8_allowed); MatMulQDQRules(qdq_selector_action_registry, is_int8_allowed); + GemmQDQRules(qdq_selector_action_registry); return qdq_selector_action_registry; } diff --git a/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selectors.cc b/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selectors.cc index db0c1dfe58646..3722504695176 100644 --- a/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selectors.cc +++ b/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selectors.cc @@ -40,16 +40,23 @@ static std::vector FindQDQNodes(const GraphViewer& graph_viewer, co bool NodeGroupSelector::CheckQDQNodes(const GraphViewer& graph_viewer, const Node& node, const std::vector& dq_nodes, const std::vector& q_nodes, - int num_dq_inputs) const { + int num_dq_inputs, + bool is_empty_q_nodes_allowed) const { if (num_dq_inputs == -1) { num_dq_inputs = NumActualValues(node, true); } - int num_outputs = NumActualValues(node, false); // number of outputs that exist - // The input is a Graph Viewer, so cannot use graph_utils or optimizer_utils - return num_dq_inputs == gsl::narrow_cast(dq_nodes.size()) && - num_outputs == gsl::narrow_cast(q_nodes.size()) && + if (num_dq_inputs != gsl::narrow_cast(dq_nodes.size())) { + return false; + } + + if (q_nodes.empty()) { + return is_empty_q_nodes_allowed; + } + + int num_outputs = NumActualValues(node, false); // number of outputs that exist + return (num_outputs == gsl::narrow_cast(q_nodes.size())) && q_nodes.size() == node.GetOutputEdgesCount() && !graph_viewer.NodeProducesGraphOutput(node); } @@ -248,6 +255,48 @@ bool MatMulNodeGroupSelector::Check(const GraphViewer& graph_viewer, } } +bool GemmNodeGroupSelector::Check(const GraphViewer& graph_viewer, + const Node& node, + const std::vector& dq_nodes, + const std::vector& q_nodes) const { + if (!CheckQDQNodes(graph_viewer, node, dq_nodes, q_nodes, + -1 /*num_dq_inputs*/, true /*is_empty_q_nodes_allowed*/)) { + return false; + } + + // input and output types need to be same + int32_t dt_A = dq_nodes[0]->InputDefs()[0]->TypeAsProto()->tensor_type().elem_type(); + int32_t dt_B = dq_nodes[1]->InputDefs()[0]->TypeAsProto()->tensor_type().elem_type(); + + if (dt_A == ONNX_NAMESPACE::TensorProto_DataType::TensorProto_DataType_INT8) { + if (dt_A != dt_B) { // if A is signed int, B must be signed int + return false; + } + } + + if (!q_nodes.empty()) { + int32_t dt_Y = q_nodes[0]->OutputDefs()[0]->TypeAsProto()->tensor_type().elem_type(); + if (dt_A != dt_Y) { // activation and output must be same type + return false; + } + } + + if (dq_nodes.size() < 3) { // no bias + return true; + } + + if (node.GetAttributes().at("beta").f() != 1.0) { // beta needs to be 1.0 + return false; + } + + int32_t dt_bias = dq_nodes[2]->InputDefs()[0]->TypeAsProto()->tensor_type().elem_type(); + return dt_bias == ONNX_NAMESPACE::TensorProto_DataType::TensorProto_DataType_INT32; +} + +void GemmSelector::UpdateBuilder(NodesToOptimizeIndicesBuilder& builder) const { + builder.input_nodes.resize(3, NodesToOptimizeIndices::kEmptyNodeIndex); +} + } // namespace QDQ } // namespace onnxruntime diff --git a/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selectors.h b/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selectors.h index 7bef53e8c0465..ddafc20d0bb85 100644 --- a/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selectors.h +++ b/onnxruntime/core/optimizer/qdq_transformer/selectors_actions/qdq_selectors.h @@ -34,7 +34,8 @@ class NodeGroupSelector { bool CheckQDQNodes(const GraphViewer& graph_viewer, const Node& node, const std::vector& dq_nodes, const std::vector& q_nodes, - int num_dq_inputs = -1) const; + int num_dq_inputs = -1, + bool is_empty_q_nodes_allowed = false) const; private: // derived classes should implement this check @@ -120,6 +121,15 @@ class MatMulNodeGroupSelector : public NodeGroupSelector { bool matmulintegertofloat_allowed_; }; +// Input: DQ nodes for A, B and optional C +// Output: optional Q node for Y +class GemmNodeGroupSelector : public NodeGroupSelector { + private: + bool Check(const GraphViewer& graph_viewer, const Node& node, + const std::vector& dq_nodes, + const std::vector& q_nodes) const override; +}; + /* * NodeSelector instances for use in the QDQ::SelectorActionTransformer. */ @@ -190,6 +200,16 @@ class MatMulSelector : public BaseSelector { : BaseSelector(std::make_unique(int8_allowed, /*matmulintegertofloat_allowed*/ true)) {} }; +// Input: DQ nodes for A, B and optional C +// Output: optional Q node for Y +class GemmSelector : public BaseSelector { + public: + GemmSelector() + : BaseSelector(std::make_unique()) {} + + void UpdateBuilder(NodesToOptimizeIndicesBuilder&) const override; +}; + } // namespace QDQ } // namespace onnxruntime diff --git a/onnxruntime/core/optimizer/selectors_actions/helpers.cc b/onnxruntime/core/optimizer/selectors_actions/helpers.cc index c83f30f3fc474..41444ba8000b4 100644 --- a/onnxruntime/core/optimizer/selectors_actions/helpers.cc +++ b/onnxruntime/core/optimizer/selectors_actions/helpers.cc @@ -314,6 +314,16 @@ Status MoveInputOutput(Graph& graph, const NodesToOptimize& selected_nodes, Node if (src != nullptr) { ORT_RETURN_IF_ERROR(MoveInputOutputImpl(graph, move.value_move_info, *src, dest, only_update_dest_definitions)); + } else if (move.value_move_info.optional && + move.value_move_info.fill_optional_with_empty) { + auto& dest_defs = (move.value_move_info.dest_slot.in_out == ArgType::kInput) + ? dest.MutableInputDefs() + : dest.MutableOutputDefs(); + dest_defs.push_back(&graph.GetOrCreateNodeArg("", nullptr)); + + if (move.value_move_info.dest_slot.in_out == ArgType::kInput) { + dest.MutableInputArgsCount().push_back(1); + } } } } diff --git a/onnxruntime/core/optimizer/selectors_actions/helpers.h b/onnxruntime/core/optimizer/selectors_actions/helpers.h index c70fee9e9e668..a57ece5339112 100644 --- a/onnxruntime/core/optimizer/selectors_actions/helpers.h +++ b/onnxruntime/core/optimizer/selectors_actions/helpers.h @@ -160,18 +160,24 @@ struct ValueMoveInfo { } // append single value (may be variadic) from source to destination - ValueMoveInfo(InOutDefSlot src_slot_in, ArgType dest_slot_type, bool is_optional = false) + ValueMoveInfo(InOutDefSlot src_slot_in, + ArgType dest_slot_type, + bool is_optional = false, + bool fill_optional_with_empty = false) : src_slot(src_slot_in), dest_slot{dest_slot_type, -1}, copy_all{false}, append{true}, - optional{is_optional} {} + optional{is_optional}, + fill_optional_with_empty{fill_optional_with_empty} {} InOutDefSlot src_slot; InOutDefSlot dest_slot; - bool copy_all{false}; // ignore src_slot.idx and copy all values - bool append{false}; // ignore dest_slot.idx and append to existing values - bool optional{false}; // optional copy that can be skipped if source node is missing + bool copy_all{false}; // ignore src_slot.idx and copy all values + bool append{false}; // ignore dest_slot.idx and append to existing values + bool optional{false}; // optional copy that can be skipped if source node is missing + bool fill_optional_with_empty; // fill optional NodeArg by NodeArg with empty name. + // Only support in 'append single value' mode. private: ValueMoveInfo() = default; @@ -213,10 +219,12 @@ inline NodeAndMoveInfo MoveToSlot(const NodesToOptimize::NodeLocation& src_node, inline NodeAndMoveInfo MoveAndAppend(const NodesToOptimize::NodeLocation& src_node, ArgType src_direction, int src_slot, ArgType dest_direction, - bool optional = false) { + bool optional = false, + bool fill_optional_with_empty = false) { return NodeAndMoveInfo{src_node, ValueMoveInfo{ InOutDefSlot{src_direction, src_slot}, // move from this slot - dest_direction, optional}}; // append here + dest_direction, optional, + fill_optional_with_empty}}; // append here } // move all inputs/outputs from the source node to the target/replacement node diff --git a/onnxruntime/python/tools/quantization/onnx_quantizer.py b/onnxruntime/python/tools/quantization/onnx_quantizer.py index ed99ee1560752..6349bd8cd53eb 100644 --- a/onnxruntime/python/tools/quantization/onnx_quantizer.py +++ b/onnxruntime/python/tools/quantization/onnx_quantizer.py @@ -553,7 +553,7 @@ def find_quantized_value(self, input_name): return self.parent.find_quantized_value(input_name) return None - def quantize_bias_static(self, bias_name, input_name, weight_name): + def quantize_bias_static(self, bias_name, input_name, weight_name, beta = 1.0): ''' Quantized the bias. Zero Point == 0 and Scale == Input_Scale * Weight_Scale ''' @@ -584,7 +584,7 @@ def quantize_bias_static(self, bias_name, input_name, weight_name): input_scale = self.tensor_proto_to_array(inputscale_initializer) # calcuate scale for bias - bias_scale = input_scale * weight_scale + bias_scale = input_scale * weight_scale * beta # quantize bias quantized_data = (np.asarray(bias_data) / bias_scale).round().astype(np.int32) diff --git a/onnxruntime/python/tools/quantization/operators/gemm.py b/onnxruntime/python/tools/quantization/operators/gemm.py new file mode 100644 index 0000000000000..f297bfb428a19 --- /dev/null +++ b/onnxruntime/python/tools/quantization/operators/gemm.py @@ -0,0 +1,117 @@ +import onnx +import numpy as np +import logging +from .base_operator import QuantOperatorBase +from .qdq_base_operator import QDQOperatorBase +from ..quant_utils import find_by_name, get_mul_node, QuantizedValue, QuantizedValueType, attribute_to_kwarg, ms_domain +from onnx import onnx_pb as onnx_proto + + +def is_B_transposed(gemm_node): + transB_attribute = [attr for attr in gemm_node.attribute if attr.name == 'transB'] + if len(transB_attribute): + return 0 < onnx.helper.get_attribute_value(transB_attribute[0]) + + return False + +def get_beta(gemm_node): + beta_attribute = [attr for attr in gemm_node.attribute if attr.name == 'beta'] + if len(beta_attribute): + return onnx.helper.get_attribute_value(beta_attribute[0]) + + return 1.0 + +def set_default_beta(gemm_node): + beta_attribute = [attr for attr in gemm_node.attribute if attr.name == 'beta'] + if len(beta_attribute): + beta_attribute[0].f = 1.0 + + return 1.0 + +class QLinearGemm(QuantOperatorBase): + def __init__(self, onnx_quantizer, onnx_node): + super().__init__(onnx_quantizer, onnx_node) + + def quantize(self): + node = self.node + assert (node.op_type == "Gemm") + + data_found, output_scale_name, output_zp_name, _, _ = \ + self.quantizer._get_quantization_params(node.output[0]) + + if self.quantizer.is_input_a_weight(node.input[1]) and self.quantizer.is_per_channel(): + (quantized_input_names, zero_point_names, scale_names, nodes) = \ + self.quantizer.quantize_inputs(node, [0], reduce_range=self.quantizer.reduce_range) + quant_weight_tuple = self.quantizer.quantize_weight_per_channel(node.input[1], onnx_proto.TensorProto.INT8, + 0 if is_B_transposed(node) else 1) + quantized_input_names.append(quant_weight_tuple[0]) + zero_point_names.append(quant_weight_tuple[1]) + scale_names.append(quant_weight_tuple[2]) + else: + (quantized_input_names, zero_point_names, scale_names, nodes) = \ + self.quantizer.quantize_inputs(node, [0, 1], reduce_range=self.quantizer.reduce_range) + + if not data_found or quantized_input_names is None: + return super().quantize() + + quantized_bias_name = "" + if len(node.input) == 3: + if not self.quantizer.is_input_a_weight(node.input[2]): + return super().quantize() + + quantized_bias_name = self.quantizer.quantize_bias_static(node.input[2], node.input[0], node.input[1], get_beta(self.node)) + + qgemm_output = node.output[0] + "_quantized" + qgemm_name = qgemm_name = node.name + "_quant" if node.name != "" else "" + + kwargs = {} + for attribute in node.attribute: + if attribute.name != "beta": + kwargs.update(attribute_to_kwarg(attribute)) + kwargs["domain"] = ms_domain + + # generate input + qgemm_inputs = [] + for i in range(2): + qgemm_inputs.extend([quantized_input_names[i], scale_names[i], zero_point_names[i]]) + + qgemm_inputs.extend([quantized_bias_name, output_scale_name, output_zp_name]) + + qgemm_node = onnx.helper.make_node("QGemm", qgemm_inputs, [qgemm_output], + qgemm_name, **kwargs) + nodes.append(qgemm_node) + + # Create an entry for this quantized value + q_output = QuantizedValue(node.output[0], qgemm_output, output_scale_name, output_zp_name, + QuantizedValueType.Input) + self.quantizer.quantized_value_map[node.output[0]] = q_output + + self.quantizer.new_nodes += nodes + + +class QDQGemm(QDQOperatorBase): + def __init__(self, onnx_quantizer, onnx_node): + super().__init__(onnx_quantizer, onnx_node) + + def quantize(self): + node = self.node + assert (node.op_type == "Gemm") + + self.quantizer.quantize_tensor(node.input[0]) + if not self.disable_qdq_for_node_output: + self.quantizer.quantize_tensor(node.output[0]) + + if self.quantizer.is_per_channel(): + self.quantizer.quantize_tensor_per_channel(node.input[1], 0 if is_B_transposed(node) else 1) + else: + self.quantizer.quantize_tensor(node.input[1]) + + if len(node.input) == 3: + if self.quantizer.is_input_a_weight(node.input[2]): + self.quantizer.quantize_bias_tensor(node.input[2], node.input[0], node.input[1], get_beta(self.node)) + set_default_beta(self.node) + else: + logging.warning( + "Bias of Gemm node '{}' is not constant. Please exclude this node for better performance." + .format(self.node.name)) + diff --git a/onnxruntime/python/tools/quantization/qdq_quantizer.py b/onnxruntime/python/tools/quantization/qdq_quantizer.py index f5797282dda06..09a45799f4737 100644 --- a/onnxruntime/python/tools/quantization/qdq_quantizer.py +++ b/onnxruntime/python/tools/quantization/qdq_quantizer.py @@ -83,11 +83,11 @@ def quantize_tensor_per_channel(self, tensor_name, axis): tensor_name)) self.quantize_tensor(tensor_name) - def quantize_bias_tensor(self, bias_name, input_name, weight_name): + def quantize_bias_tensor(self, bias_name, input_name, weight_name, beta = 1.0): weight = find_by_name(bias_name, self.model.initializer()) if weight is not None: if weight.data_type == onnx_proto.TensorProto.FLOAT: - self.bias_to_quantize.append((bias_name, input_name, weight_name)) + self.bias_to_quantize.append((bias_name, input_name, weight_name, beta)) else: logging.warning("Expected {} to be a weight".format(bias_name)) @@ -222,11 +222,11 @@ def quantize_tensors(self): self.quantized_value_map[tensor_name] = quantized_value def quantize_bias_tensors(self): - for bias_name, input_name, weight_name in self.bias_to_quantize: + for bias_name, input_name, weight_name, beta in self.bias_to_quantize: if bias_name in self.quantized_value_map.keys(): continue # Quantize the input - self.quantize_bias_static(bias_name, input_name, weight_name) + self.quantize_bias_static(bias_name, input_name, weight_name, beta) self.model.remove_initializer(find_by_name(bias_name, self.model.initializer())) quant_value = self.quantized_value_map[bias_name] inputs = [quant_value.q_name, quant_value.scale_name, quant_value.zp_name] diff --git a/onnxruntime/python/tools/quantization/quantize.py b/onnxruntime/python/tools/quantization/quantize.py index a0a0b935226cd..826d53884facd 100644 --- a/onnxruntime/python/tools/quantization/quantize.py +++ b/onnxruntime/python/tools/quantization/quantize.py @@ -42,15 +42,16 @@ def optimize_model(model_path: Path): return optimized_model -def load_model(model_path: Path, optimize=True): - if optimize: - #optimize the original model - onnx_model = ONNXModel(optimize_model(Path(model_path))) - # to support GEMM +def load_model(model_path: Path, optimize=True, handle_gemm_with_matmul=True): + + model = optimize_model(Path(model_path)) if optimize else onnx.load(Path(model_path)) + + if handle_gemm_with_matmul: + onnx_model = ONNXModel(model) onnx_model.replace_gemm_with_matmul() return onnx_model.model - return onnx.load(Path(model_path)) + return model def quantize(model, @@ -211,7 +212,7 @@ def quantize_static(model_input, if not op_types_to_quantize or len(op_types_to_quantize) == 0: op_types_to_quantize = list(QLinearOpsRegistry.keys()) - model = load_model(Path(model_input), optimize_model) + model = load_model(Path(model_input), optimize_model, False) calibrator = create_calibrator(model, op_types_to_quantize, calibrate_method=calibrate_method) calibrator.collect_data(calibration_data_reader) diff --git a/onnxruntime/python/tools/quantization/registry.py b/onnxruntime/python/tools/quantization/registry.py index e63e1761f7143..d046cbc6dfa86 100644 --- a/onnxruntime/python/tools/quantization/registry.py +++ b/onnxruntime/python/tools/quantization/registry.py @@ -18,6 +18,7 @@ from .operators.resize import QResize, QDQResize from .operators.pooling import QLinearPool from .operators.concat import QLinearConcat, QDQConcat +from .operators.gemm import QLinearGemm, QDQGemm CommonOpsRegistry = { "Gather": GatherQuant, @@ -36,6 +37,7 @@ QLinearOpsRegistry = { "ArgMax": QArgMax, "Conv": QLinearConv, + "Gemm": QLinearGemm, "MatMul": QLinearMatMul, "Add": QLinearBinaryOp, "Mul": QLinearBinaryOp, @@ -58,6 +60,7 @@ QDQRegistry = { "Conv": QDQConv, + "Gemm": QDQGemm, "Clip": QDQRemovableActivation, "Relu": QDQRemovableActivation, "Reshape": QDQDirect8BitOp, diff --git a/onnxruntime/test/contrib_ops/quant_gemm_test.cc b/onnxruntime/test/contrib_ops/quant_gemm_test.cc index 897320b30eef7..c8dbea216ec2a 100644 --- a/onnxruntime/test/contrib_ops/quant_gemm_test.cc +++ b/onnxruntime/test/contrib_ops/quant_gemm_test.cc @@ -15,11 +15,12 @@ #include #include +#include namespace onnxruntime { namespace test { -template +template void RunQuantGemmU8X8Test(const int M, const int N, const int K, @@ -29,36 +30,42 @@ void RunQuantGemmU8X8Test(const int M, bool B_is_initializer, bool per_column = false) { static std::default_random_engine e(123); - static std::uniform_int_distribution n_unsigned(0, 127); - static std::uniform_int_distribution n_xint8(std::numeric_limits::min(), std::numeric_limits::max()); + static std::uniform_int_distribution random_A(std::numeric_limits::min(), + std::numeric_limits::max()); + + constexpr int overflow_adjust = std::is_signed_v ? 2 : 1; + constexpr int random_B_min = std::numeric_limits::min() / overflow_adjust; + constexpr int random_B_max = std::numeric_limits::min() / overflow_adjust; + static std::uniform_int_distribution random_B(random_B_min, + random_B_max); static std::uniform_real_distribution n_apha(1.0f, 2.0f); static std::uniform_real_distribution n_scale(0.003f, 0.004f); Eigen::MatrixXi matrix_a = Eigen::MatrixXi::Random(K, M) - .unaryExpr([](int) { return n_unsigned(e); }); - std::vector matrix_a_data; + .unaryExpr([](int) { return random_A(e); }); + std::vector matrix_a_data; if (is_A_trans) { Eigen::MatrixXi matrix_a_trans = matrix_a.transpose().eval(); - matrix_a_data = ToVector(matrix_a_trans.data(), M * K); + matrix_a_data = ToVector(matrix_a_trans.data(), M * K); } else { - matrix_a_data = ToVector(matrix_a.data(), M * K); + matrix_a_data = ToVector(matrix_a.data(), M * K); } - uint8_t a_zero_point = GetMiddle(matrix_a_data); + ActType a_zero_point = GetMiddle(matrix_a_data); Eigen::MatrixXi matrix_a_offset = matrix_a - a_zero_point * Eigen::MatrixXi::Ones(K, M); float a_scale = n_scale(e); Eigen::MatrixXi matrix_b = Eigen::MatrixXi::Random(N, K) - .unaryExpr([](int) { return n_xint8(e); }); - std::vector matrix_b_data; + .unaryExpr([](int) { return random_B(e); }); + std::vector matrix_b_data; if (is_B_trans) { Eigen::MatrixXi matrix_b_trans = matrix_b.transpose().eval(); - matrix_b_data = ToVector(matrix_b_trans.data(), N * K); + matrix_b_data = ToVector(matrix_b_trans.data(), N * K); } else { - matrix_b_data = ToVector(matrix_b.data(), N * K); + matrix_b_data = ToVector(matrix_b.data(), N * K); } - ScalarB b_zero_point = GetMiddle(matrix_b_data); + WeightType b_zero_point = GetMiddle(matrix_b_data); std::vector b_scale({n_scale(e)}); - std::vector b_zp_per_column({b_zero_point}); + std::vector b_zp_per_column({b_zero_point}); Eigen::MatrixXi b_zp_matrix = b_zero_point * Eigen::MatrixXi::Ones(N, K); Eigen::MatrixXf b_scale_matrix = b_scale[0] * Eigen::MatrixXf::Ones(N, M); if (per_column) { @@ -74,7 +81,7 @@ void RunQuantGemmU8X8Test(const int M, float alpha = n_apha(e); Eigen::MatrixXi matrix_c = Eigen::MatrixXi::Random(N, M) - .unaryExpr([](int) { return n_xint8(e); }); + .unaryExpr([](int) { return random_A(e); }); Eigen::MatrixXi matrix_int32 = (matrix_b - b_zp_matrix) * matrix_a_offset; if (has_C) { @@ -86,12 +93,12 @@ void RunQuantGemmU8X8Test(const int M, test.AddAttribute("transA", is_A_trans ? 1 : 0); test.AddAttribute("transB", is_B_trans ? 1 : 0); test.AddAttribute("alpha", alpha); - test.AddInput("A", is_A_trans ? std::vector({K, M}) : std::vector({M, K}), std::move(matrix_a_data)); + test.AddInput("A", is_A_trans ? std::vector({K, M}) : std::vector({M, K}), std::move(matrix_a_data)); test.AddInput("a_scale", {}, {a_scale}); - test.AddInput("a_zero_point", {}, {a_zero_point}); - test.AddInput("B", is_B_trans ? std::vector({N, K}) : std::vector({K, N}), std::move(matrix_b_data), B_is_initializer); + test.AddInput("a_zero_point", {}, {a_zero_point}); + test.AddInput("B", is_B_trans ? std::vector({N, K}) : std::vector({K, N}), std::move(matrix_b_data), B_is_initializer); test.AddInput("b_scale", {SafeInt(b_scale.size())}, b_scale); - test.AddInput("b_zero_point", {SafeInt(b_zp_per_column.size())}, b_zp_per_column); + test.AddInput("b_zero_point", {SafeInt(b_zp_per_column.size())}, b_zp_per_column); if (has_C) { test.AddInput("C", {M, N}, ToVector(matrix_c.data(), M * N)); @@ -101,14 +108,14 @@ void RunQuantGemmU8X8Test(const int M, if constexpr (std::is_same_v) { test.AddOptionalInputEdge(); - test.AddOptionalInputEdge(); + test.AddOptionalInputEdge(); test.AddOutput("Y", {M, N}, std::vector(matrix_output.data(), matrix_output.data() + M * N)); } else { - std::vector quant_output(M * N); - quantization::Params quant_param = quantization::QuantizeLinear(matrix_output.data(), quant_output.data(), M * N); + std::vector quant_output(M * N); + quantization::Params quant_param = quantization::QuantizeLinear(matrix_output.data(), quant_output.data(), M * N); test.AddInput("y_scale", {}, {quant_param.scale}); - test.AddInput("y_zero_point", {}, {quant_param.zero_point}); - test.AddOutput("Y", {M, N}, quant_output); + test.AddInput("y_zero_point", {}, {quant_param.zero_point}); + test.AddOutput("Y", {M, N}, quant_output); } test.Run(); @@ -122,10 +129,13 @@ void RunQuantGemmTest(const int M, bool has_C, bool B_is_initializer, bool per_column = false) { - RunQuantGemmU8X8Test(M, N, K, is_A_trans, is_B_trans, has_C, B_is_initializer, per_column); - RunQuantGemmU8X8Test(M, N, K, is_A_trans, is_B_trans, has_C, B_is_initializer, per_column); - RunQuantGemmU8X8Test(M, N, K, is_A_trans, is_B_trans, has_C, B_is_initializer, per_column); - RunQuantGemmU8X8Test(M, N, K, is_A_trans, is_B_trans, has_C, B_is_initializer, per_column); + RunQuantGemmU8X8Test(M, N, K, is_A_trans, is_B_trans, has_C, B_is_initializer, per_column); + RunQuantGemmU8X8Test(M, N, K, is_A_trans, is_B_trans, has_C, B_is_initializer, per_column); + RunQuantGemmU8X8Test(M, N, K, is_A_trans, is_B_trans, has_C, B_is_initializer, per_column); + RunQuantGemmU8X8Test(M, N, K, is_A_trans, is_B_trans, has_C, B_is_initializer, per_column); + + RunQuantGemmU8X8Test(M, N, K, is_A_trans, is_B_trans, has_C, B_is_initializer, per_column); + RunQuantGemmU8X8Test(M, N, K, is_A_trans, is_B_trans, has_C, B_is_initializer, per_column); } void RunQuantGemmTestBatch(const int M, const int N, const int K) { diff --git a/onnxruntime/test/optimizer/qdq_transformer_test.cc b/onnxruntime/test/optimizer/qdq_transformer_test.cc index bca4eb737c81c..97a051bdfea1e 100644 --- a/onnxruntime/test/optimizer/qdq_transformer_test.cc +++ b/onnxruntime/test/optimizer/qdq_transformer_test.cc @@ -537,6 +537,173 @@ TEST(QDQTransformerTests, MatMul_S8S8U8) { QDQTransformerMatMulTests(true); } +template +void QDQTransformerGemmTests(bool has_output_q, bool has_bias, bool beta_not_one = false) { + auto test_case = [&](const std::vector& input1_shape, const std::vector& input2_shape) { + auto build_test_case = [&](ModelTestBuilder& builder) { + auto* input1_arg = builder.MakeInput(input1_shape, -1.f, 1.f); + auto* input2_arg = builder.MakeInput(input2_shape, -1.f, 1.f); + auto* output_arg = builder.MakeOutput(); + + typedef std::numeric_limits Input1Limits; + typedef std::numeric_limits Input2Limits; + typedef std::numeric_limits OutputTypeLimits; + + std::vector input_args; + + // add QDQ A + auto* q1_output = builder.MakeIntermediate(); + auto* dq1_output = builder.MakeIntermediate(); + builder.AddQuantizeLinearNode(input1_arg, + .039f, + (Input1Limits::max() + Input1Limits::min()) / 2 + 1, + q1_output); + builder.AddDequantizeLinearNode(q1_output, + .039f, + (Input2Limits::max() + Input1Limits::min()) / 2 + 1, + dq1_output); + + input_args.push_back(dq1_output); + + // add QDQ B + auto* q2_output = builder.MakeIntermediate(); + auto* dq2_output = builder.MakeIntermediate(); + builder.AddQuantizeLinearNode(input2_arg, + .04f, + (Input2Limits::max() + Input2Limits::min()) / 2 + 1, + q2_output); + builder.AddDequantizeLinearNode(q2_output, + .04f, + (Input2Limits::max() + Input2Limits::min()) / 2 + 1, + dq2_output); + input_args.push_back(dq2_output); + + if (has_bias) { + auto* dq_bias_output = builder.MakeIntermediate(); + auto* bias = builder.MakeInitializer({input2_shape[1]}, static_cast(0), static_cast(127)); + builder.AddDequantizeLinearNode(bias, 0.00156f, + 0, + dq_bias_output); + input_args.push_back(dq_bias_output); + } + + Node* gemm_node = nullptr; + + if (has_output_q) { + auto* gemm_op_output = builder.MakeIntermediate(); + gemm_node = &builder.AddNode("Gemm", input_args, {gemm_op_output}); + + // add QDQ output + auto* q3_output = builder.MakeIntermediate(); + builder.AddQuantizeLinearNode(gemm_op_output, + .039f, + (OutputTypeLimits::max() + OutputTypeLimits::min()) / 2 + 1, + q3_output); + builder.AddDequantizeLinearNode(q3_output, + .039f, + (OutputTypeLimits::max() + OutputTypeLimits::min()) / 2 + 1, + output_arg); + } else { + gemm_node = &builder.AddNode("Gemm", input_args, {output_arg}); + } + + if (beta_not_one) { + gemm_node->AddAttribute("beta", 2.0f); + } + }; + + auto check_binary_op_graph = [&](InferenceSessionWrapper& session) { + auto op_to_count = CountOpsInGraph(session.GetGraph()); + if ((!has_output_q || std::is_same_v)&& + (!has_bias || (std::is_same_v && !beta_not_one)) && + (std::is_same_v || std::is_same_v)) { + EXPECT_EQ(op_to_count["com.microsoft.QGemm"], 1); + EXPECT_EQ(op_to_count["Gemm"], 0); + EXPECT_EQ(op_to_count["QuantizeLinear"], 2); + EXPECT_EQ(op_to_count["DequantizeLinear"], has_output_q ? 1 : 0); + } else { + int q_count = 2; // Q for A and B + int dq_count = 2; // DQ for A and B + if (has_bias) { + dq_count++; + } + if (has_output_q) { + q_count++; + dq_count++; + } + EXPECT_EQ(op_to_count["com.microsoft.QGemm"], 0); + EXPECT_EQ(op_to_count["Gemm"], 1); + EXPECT_EQ(op_to_count["QuantizeLinear"], q_count); + EXPECT_EQ(op_to_count["DequantizeLinear"], dq_count); + } + }; + + TransformerTester(build_test_case, + check_binary_op_graph, + TransformerLevel::Level1, + TransformerLevel::Level2, + 12 /*opset_version*/, + 0.01 /*per_sample_tolerance*/, + 0.01 /*relative_per_sample_tolerance*/, + std::make_unique()); + }; + + test_case({2, 2}, {2, 4}); + test_case({13, 15}, {15, 15}); +} + +template +void QDQTransformerGemmTests() { + QDQTransformerGemmTests(false, false); + QDQTransformerGemmTests(false, true); + QDQTransformerGemmTests(true, false); + QDQTransformerGemmTests(true, true); + QDQTransformerGemmTests(false, false, true); + QDQTransformerGemmTests(false, true, true); + QDQTransformerGemmTests(true, false, true); + QDQTransformerGemmTests(true, true, true); +} + +TEST(QDQTransformerTests, Gemm_U8U8U8) { + QDQTransformerGemmTests(); + QDQTransformerGemmTests(); +} + +TEST(QDQTransformerTests, Gemm_U8S8S8) { + QDQTransformerGemmTests(); + QDQTransformerGemmTests(); +} + +TEST(QDQTransformerTests, Gemm_U8U8S8) { + QDQTransformerGemmTests(); + QDQTransformerGemmTests(); +} + +TEST(QDQTransformerTests, Gemm_U8S8U8) { + QDQTransformerGemmTests(); + QDQTransformerGemmTests(); +} + +TEST(QDQTransformerTests, Gemm_S8S8S8) { + QDQTransformerGemmTests(); + QDQTransformerGemmTests(); +} + +TEST(QDQTransformerTests, Gemm_S8U8U8) { + QDQTransformerGemmTests(); + QDQTransformerGemmTests(); +} + +TEST(QDQTransformerTests, Gemm_S8U8S8) { + QDQTransformerGemmTests(); + QDQTransformerGemmTests(); +} + +TEST(QDQTransformerTests, Gemm_S8S8U8) { + QDQTransformerGemmTests(); + QDQTransformerGemmTests(); +} + TEST(QDQTransformerTests, Gather) { auto test_case = [&](const std::vector& input1_shape, const std::vector& weights_shape) { auto build_test_case = [&](ModelTestBuilder& builder) { diff --git a/onnxruntime/test/providers/cpu/math/matmul_integer_test.cc b/onnxruntime/test/providers/cpu/math/matmul_integer_test.cc index 7e41fe020a91d..489d6ff915692 100644 --- a/onnxruntime/test/providers/cpu/math/matmul_integer_test.cc +++ b/onnxruntime/test/providers/cpu/math/matmul_integer_test.cc @@ -302,12 +302,12 @@ TEST(MatmulIntegerOpTest, MatMulInteger_PerColumn_ND) { } // [M x N] = [M x K] x [K x N] = [batch_seq x input_dim] x [input_dim x embed_dim] -template +template void RunMatMulIntegerU8X8Test(const int M, const int N, const int K, bool non_zero_zp, bool B_is_initializer, bool per_column_zp = false) { OpTester test("MatMulInteger", 10); static std::default_random_engine e(123); static std::uniform_int_distribution n_unsigned(0, 127); - static std::uniform_int_distribution n_xint8(std::numeric_limits::min(), std::numeric_limits::max()); + static std::uniform_int_distribution n_xint8(std::numeric_limits::min(), std::numeric_limits::max()); Eigen::MatrixXi matrix_a = Eigen::MatrixXi::Random(K, M) .unaryExpr([](int) { return n_unsigned(e); }); @@ -317,9 +317,9 @@ void RunMatMulIntegerU8X8Test(const int M, const int N, const int K, bool non_ze Eigen::MatrixXi matrix_b = Eigen::MatrixXi::Random(N, K) .unaryExpr([](int) { return n_xint8(e); }); - std::vector matrix_b_data = ToVector(matrix_b.data(), N * K); - ScalarB b_zero_point = non_zero_zp ? GetMiddle(matrix_b_data) : 0; - std::vector b_zp_per_column(N, b_zero_point); + std::vector matrix_b_data = ToVector(matrix_b.data(), N * K); + WeightType b_zero_point = non_zero_zp ? GetMiddle(matrix_b_data) : 0; + std::vector b_zp_per_column(N, b_zero_point); Eigen::MatrixXi b_zp_matrix = b_zero_point * Eigen::MatrixXi::Ones(N, K); if (non_zero_zp && per_column_zp) { for (int i = 0; i < N; i++) { @@ -331,13 +331,13 @@ void RunMatMulIntegerU8X8Test(const int M, const int N, const int K, bool non_ze Eigen::MatrixXi matrix_c = ((matrix_b - b_zp_matrix) * matrix_a_offset).eval(); test.AddInput("T1", {M, K}, std::move(matrix_a_data)); - test.AddInput("T2", {K, N}, std::move(matrix_b_data), B_is_initializer); + test.AddInput("T2", {K, N}, std::move(matrix_b_data), B_is_initializer); if (non_zero_zp) { test.AddInput("a_zero_point", {}, {a_zero_point}); if (per_column_zp) { - test.AddInput("b_zero_point", {N}, b_zp_per_column); + test.AddInput("b_zero_point", {N}, b_zp_per_column); } else { - test.AddInput("b_zero_point", {}, {b_zero_point}); + test.AddInput("b_zero_point", {}, {b_zero_point}); } } diff --git a/onnxruntime/test/python/quantization/test_op_gemm.py b/onnxruntime/test/python/quantization/test_op_gemm.py index cf61402fa5d84..11a2ba488b4d5 100644 --- a/onnxruntime/test/python/quantization/test_op_gemm.py +++ b/onnxruntime/test/python/quantization/test_op_gemm.py @@ -130,7 +130,7 @@ def static_quant_test(self, model_fp32_path, data_reader, activation_type, weigh data_reader.rewind() quantize_static(model_fp32_path, model_int8_path, data_reader, activation_type=activation_type, weight_type=weight_type, extra_options=extra_options) - quant_nodes = {'QLinearMatMul': 2, 'QLinearAdd': 2, 'QuantizeLinear': 1, 'DequantizeLinear': 1} + quant_nodes = {'QGemm': 2, 'QuantizeLinear': 1, 'DequantizeLinear': 1} check_op_type_count(self, model_int8_path, **quant_nodes) qnode_io_qtypes = {'QuantizeLinear': [['i', 2, activation_proto_qtype], ['o', 0, activation_proto_qtype]]} qnode_io_qtypes.update({'DequantizeLinear': [['i', 2, activation_proto_qtype]]}) @@ -147,7 +147,7 @@ def static_quant_test_qdq(self, model_fp32_path, data_reader, activation_type, w data_reader.rewind() quantize_static(model_fp32_path, model_int8_path, data_reader, quant_format=QuantFormat.QDQ, activation_type=activation_type, weight_type=weight_type, extra_options=extra_options) - quant_nodes = {'MatMul': 2, 'Add': 2, 'QuantizeLinear': 5, 'DequantizeLinear': 9} + quant_nodes = {'Gemm': 2, 'QuantizeLinear': 3, 'DequantizeLinear': 7} check_op_type_count(self, model_int8_path, **quant_nodes) qnode_io_qtypes = {'QuantizeLinear': [['i', 2, activation_proto_qtype], ['o', 0, activation_proto_qtype]]} check_qtype_by_node_type(self, model_int8_path, qnode_io_qtypes) diff --git a/onnxruntime/test/testdata/kernel_def_hashes/contrib.cpu.json b/onnxruntime/test/testdata/kernel_def_hashes/contrib.cpu.json index 120e6de7c00f3..2a85dab3b5fd0 100644 --- a/onnxruntime/test/testdata/kernel_def_hashes/contrib.cpu.json +++ b/onnxruntime/test/testdata/kernel_def_hashes/contrib.cpu.json @@ -283,6 +283,10 @@ "QEmbedLayerNormalization com.microsoft CPUExecutionProvider", 9235385557940152248 ], + [ + "QGemm com.microsoft CPUExecutionProvider", + 13009794669709617232 + ], [ "QGemm com.microsoft CPUExecutionProvider", 13737193491843065240 From ad9d2e2e891714e0911ccc3fa8b70f42025b4d56 Mon Sep 17 00:00:00 2001 From: Viswanath Boga <44417868+viboga@users.noreply.github.com> Date: Thu, 3 Feb 2022 00:14:39 +0530 Subject: [PATCH 15/56] Prefix match in first iteration of beam search OP (#10231) * Add BeamSearch op schema * Add ONNX conversion for beams search * remove attention_mask and change input order * add option to run baseline * add check data type NULL * applies VerifyNodeAndOpMatch to subgraph * update input_ids shape * Add node name for Cast node * expose API for topk * parse parameters * Add beam search scorer * output results * fix typo * use c++ template and format python * fix build pipeline errors * symbolic shape infer of input onnx * output scores * add kernel def hash * Handle vocab_mask; move CheckSubgraph * undo insert_cast_transformer.cc and fusion_utils.py * fix typo * fix merge * update doc * add repetition penalty * refactoring: add GptSubgraph class * move BeamSearchState from .h to .cc file * adjust logits processor order * add batch generation example * fix repetition penalty for dup words in sequence * Add test * Add no repeat ngram processor * refactoring: move logits processor to classes * fix build warning * show latency * use allocator in beam state * use allocator in sequences * fix build error * move next_positions to beam state * Changes for prefix matching * removing debugs * removing more debugs * clean up * clean up * cpu doc updated * Updated docs * updated prefix_vocab_mask dimension in convert script * changes to support bxs prefix_vocab_mask in beamsearchop kernel * doc update * OperatorKernels.md updated * matching docs from artifacts * minor change in logits processor * Addressing comments * Updated the prefix vocab mask usage properly Co-authored-by: Tianlei Wu --- docs/ContribOperators.md | 4 +- docs/OperatorKernels.md | 2 +- .../cpu/transformers/beam_search.cc | 44 ++++++++++++++--- .../cpu/transformers/beam_search_parameters.h | 3 +- .../cpu/transformers/logits_processor.cc | 49 ++++++++++++++++++- .../cpu/transformers/logits_processor.h | 16 +++++- .../core/graph/contrib_ops/contrib_defs.cc | 1 + .../tools/transformers/convert_beam_search.py | 27 ++++++++++ 8 files changed, 134 insertions(+), 12 deletions(-) diff --git a/docs/ContribOperators.md b/docs/ContribOperators.md index ac2130f36c62e..efbdbb52a2507 100644 --- a/docs/ContribOperators.md +++ b/docs/ContribOperators.md @@ -361,7 +361,7 @@ This version of the operator has been available since version 1 of the 'com.micr
The id of the padding token
-#### Inputs (6 - 9) +#### Inputs (6 - 10)
input_ids : I
@@ -382,6 +382,8 @@ This version of the operator has been available since version 1 of the 'com.micr
The parameter for repetition penalty. Default value 1.0 means no penalty. Accepts value > 0.0. Shape is (1)
vocab_mask (optional) : M
Mask of vocabulary. Words that masked with 0 are not allowed to be generated, and 1 is allowed. Shape is (vacab_size)
+
prefix_vocab_mask (optional) : M
+
Mask of vocabulary for first step. Words that masked with 0 are not allowed to be generated, and 1 is allowed. Shape is (batch_size, vocab_size)
#### Outputs (1 - 3) diff --git a/docs/OperatorKernels.md b/docs/OperatorKernels.md index b8a46956f3899..ad4bab1d09745 100644 --- a/docs/OperatorKernels.md +++ b/docs/OperatorKernels.md @@ -377,7 +377,7 @@ Do not modify directly.* |**Operator Domain:** *com.microsoft*|||| |Attention|*in* input:**T**
*in* weight:**T**
*in* bias:**T**
*in* mask_index:**M**
*in* past:**T**
*in* extra_add:**T**
*out* output:**T**
*out* present:**T**|1+|**T** = tensor(float)| |AttnLSTM|*in* X:**T**
*in* W:**T**
*in* R:**T**
*in* B:**T**
*in* sequence_lens:**T1**
*in* initial_h:**T**
*in* initial_c:**T**
*in* P:**T**
*in* QW:**T**
*in* MW:**T**
*in* V:**T**
*in* M:**T**
*in* memory_seq_lens:**T1**
*in* AW:**T**
*out* Y:**T**
*out* Y_h:**T**
*out* Y_c:**T**|1+|**T** = tensor(double), tensor(float)
**T1** = tensor(int32)| -|BeamSearch|*in* input_ids:**I**
*in* max_length:**I**
*in* min_length:**I**
*in* num_beams:**I**
*in* num_return_sequences:**I**
*in* temperature:**T**
*in* length_penalty:**T**
*in* repetition_penalty:**T**
*in* vocab_mask:**M**
*out* sequences:**I**
*out* sequences_scores:**T**
*out* scores:**T**|1+|**T** = tensor(float)| +|BeamSearch|*in* input_ids:**I**
*in* max_length:**I**
*in* min_length:**I**
*in* num_beams:**I**
*in* num_return_sequences:**I**
*in* temperature:**T**
*in* length_penalty:**T**
*in* repetition_penalty:**T**
*in* vocab_mask:**M**
*in* prefix_vocab_mask:**M**
*out* sequences:**I**
*out* sequences_scores:**T**
*out* scores:**T**|1+|**T** = tensor(float)| |BiasGelu|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(float)| |BifurcationDetector|*in* src_tokens:**T**
*in* cur_tokens:**T**
*in* prev_suffix_match_idx:**T**
*in* pred_tokens:**T**
*out* tokens:**T**
*out* suffix_match_idx:**T**|1+|**T** = tensor(int64)| |CDist|*in* A:**T**
*in* B:**T**
*out* C:**T**|1+|**T** = tensor(double), tensor(float)| diff --git a/onnxruntime/contrib_ops/cpu/transformers/beam_search.cc b/onnxruntime/contrib_ops/cpu/transformers/beam_search.cc index 9925501b1de62..ee33ac7850c39 100644 --- a/onnxruntime/contrib_ops/cpu/transformers/beam_search.cc +++ b/onnxruntime/contrib_ops/cpu/transformers/beam_search.cc @@ -153,12 +153,14 @@ class BeamSearchImpl { Status GenerateNextToken(const OrtValue& logits, gsl::span& beam_next_tokens, gsl::span& beam_indices, - BeamSearchState& beam_state); + BeamSearchState& beam_state, + int counter); // Calculate scores from logits, then apply filtering and select next token for each beam. Status ProcessLogits(const OrtValue& logits, // logits output of subgraph BeamSearchState& beam_state, - AllocatorPtr& allocator); + AllocatorPtr& allocator, + int counter); OpKernelContextInternal& context_; @@ -292,6 +294,30 @@ Status BeamSearchImpl::CheckInputs(const OpKernelContextInternal& context) { parameters_->vocab_mask = vocab_mask->DataAsSpan(); } + const Tensor* prefix_vocab_mask = context.Input(9); + if (prefix_vocab_mask != nullptr) { + // prefix_vocab_mask is optional + const auto& vocab_mask_dims = prefix_vocab_mask->Shape().GetDims(); + if (vocab_mask_dims.size() != 2) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'prefix_vocab_mask' is expected to have 2 dimensions, got ", + vocab_mask_dims.size()); + } + + // prefix_vocab_mask first dimension should be same as the first dimension of input_ids + if (static_cast(vocab_mask_dims[0]) != static_cast(dims[0])) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "input_ids and prefix_vocab_mask must have the same batch_size"); + } + + // There is dependency on vocab_size parameter, which shall be set before calling this function. + if (static_cast(vocab_mask_dims[1]) != parameters_->vocab_size) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Input 'prefix_vocab_mask' shape does not match with vocab_size, got ", + vocab_mask_dims[0]); + } + + // store prefix vocab mask in parameters. + parameters_->prefix_vocab_mask = prefix_vocab_mask->DataAsSpan(); + } + return Status::OK(); } @@ -346,7 +372,8 @@ template Status BeamSearchImpl::ProcessLogits( const OrtValue& logits, BeamSearchState& beam_state, - AllocatorPtr& allocator) { + AllocatorPtr& allocator, + int counter) { const int64_t batch_beam_size = static_cast(parameters_->BatchBeamSize()); const int& vocab_size = parameters_->vocab_size; @@ -394,7 +421,7 @@ Status BeamSearchImpl::ProcessLogits( #endif // Apply all score processors that updates scores - logits_processors_.Process(&(beam_state.sequences), next_token_scores); + logits_processors_.Process(&(beam_state.sequences), next_token_scores, counter); #ifdef DEBUG_BEAM_SEARCH DumpTensor("next_token_scores after logits processor", next_token_scores.data(), parameters_->batch_size, parameters_->num_beams, vocab_size); @@ -486,9 +513,10 @@ Status BeamSearchImpl::GenerateNextToken( const OrtValue& logits, gsl::span& beam_next_tokens, gsl::span& beam_indices, - BeamSearchState& beam_state) { + BeamSearchState& beam_state, + int counter) { // Process logits to get next token scores - ORT_RETURN_IF_ERROR(ProcessLogits(logits, beam_state, allocator_)); + ORT_RETURN_IF_ERROR(ProcessLogits(logits, beam_state, allocator_, counter)); gsl::span& beam_scores = beam_scorer_->GetNextScores(); // It is optional to clone beam_scores. Change it to use same buffer also works: @@ -587,7 +615,9 @@ Status BeamSearchImpl::Execute(const FeedsFetchesManager& ffm) { #endif int current_length = parameters_->sequence_length; + int iteration_counter = 0; while (current_length < parameters_->max_length) { + iteration_counter++; #ifdef DEBUG_BEAM_SEARCH DumpString("***CurrentLength", std::to_string(current_length), true); #endif @@ -600,7 +630,7 @@ Status BeamSearchImpl::Execute(const FeedsFetchesManager& ffm) { const OrtValue& logits = fetches[0]; gsl::span beam_next_tokens; gsl::span beam_indices; - ORT_RETURN_IF_ERROR(GenerateNextToken(logits, beam_next_tokens, beam_indices, beam_state)); + ORT_RETURN_IF_ERROR(GenerateNextToken(logits, beam_next_tokens, beam_indices, beam_state, iteration_counter)); // When all batches are finished, stop earlier to avoid wasting computation. if (beam_scorer_->IsDone()) { diff --git a/onnxruntime/contrib_ops/cpu/transformers/beam_search_parameters.h b/onnxruntime/contrib_ops/cpu/transformers/beam_search_parameters.h index 26de2a98408eb..389f24ecdeb66 100644 --- a/onnxruntime/contrib_ops/cpu/transformers/beam_search_parameters.h +++ b/onnxruntime/contrib_ops/cpu/transformers/beam_search_parameters.h @@ -28,7 +28,8 @@ struct BeamSearchParameters { int sequence_length; // deduce from second dimension of input_ids gsl::span vocab_mask; - + gsl::span prefix_vocab_mask; + // Parameters from outputs. bool output_scores; // whether scores existed in output diff --git a/onnxruntime/contrib_ops/cpu/transformers/logits_processor.cc b/onnxruntime/contrib_ops/cpu/transformers/logits_processor.cc index ca8e722bf8c93..6473ad5d14b5d 100644 --- a/onnxruntime/contrib_ops/cpu/transformers/logits_processor.cc +++ b/onnxruntime/contrib_ops/cpu/transformers/logits_processor.cc @@ -9,6 +9,10 @@ namespace onnxruntime { namespace contrib { namespace transformers { +// beam_search_iteration represents the current iteration counter of beam search +// This value is used to apply processors as needed in specific iteration. +static int beam_search_iteration; + template gsl::span NextTokenScores::GetScores(int batch_beam_index) { assert(batch_beam_index >= 0 && batch_beam_index < batch_beam_size); @@ -146,6 +150,41 @@ void VocabMaskLogitsProcessor::Process(const ISequences* /*sequences*/, #endif } +template +PrefixVocabMaskLogitsProcessor::PrefixVocabMaskLogitsProcessor(const gsl::span& prefix_vocab_mask, int batch_size) : prefix_vocab_mask_(prefix_vocab_mask), batch_size_(batch_size) { +} + +template +void PrefixVocabMaskLogitsProcessor::Process(const ISequences* /*sequences*/, + NextTokenScores& next_token_scores) { + assert(!prefix_vocab_mask_.empty()); + + if (beam_search_iteration > 1) { + return; + } + // next_token_scores shape (batch_size * num_beams, vocab_size) + int num_beams = next_token_scores.batch_beam_size / batch_size_; + assert(num_beams * batch_size_ == next_token_scores.batch_beam_size); + + // Process prefix vocabulary mask and set tokens with mask value 0 to -inf. + // prefix_vocab_mask shape (batch_szie, vocab_size). + T* p = next_token_scores.scores.data(); + for (int i = 0; i < batch_size_; i++) { + int prefix_vocab_mask_offset = i * next_token_scores.vocab_size; + for (int j = 0; j < num_beams; j++) { + for (int k = 0; k < next_token_scores.vocab_size; k++, p++) { + if (prefix_vocab_mask_[prefix_vocab_mask_offset + k] == 0) { + *p = std::numeric_limits::lowest(); + } + } + } + } + +#ifdef DEBUG_BEAM_SEARCH + DumpScores("PrefixVocabMaskLogitsProcessor", next_token_scores.scores); +#endif +} + template void LogitsProcessorList::Init(const BeamSearchParameters& parameters) { processor_list_.clear(); @@ -165,6 +204,11 @@ void LogitsProcessorList::Init(const BeamSearchParameters& parameters) { processor_list_.push_back(vocab_mask_processor_.get()); } + if (!parameters.prefix_vocab_mask.empty()) { + prefix_vocab_mask_processor_ = std::make_unique>(parameters.prefix_vocab_mask, parameters.batch_size); + processor_list_.push_back(prefix_vocab_mask_processor_.get()); + } + if (parameters.min_length > 0) { min_length_processor_ = std::make_unique>(parameters.min_length, parameters.eos_token_id); processor_list_.push_back(min_length_processor_.get()); @@ -176,8 +220,10 @@ void LogitsProcessorList::Init(const BeamSearchParameters& parameters) { template void LogitsProcessorList::Process(const ISequences* sequences, - gsl::span& next_token_scores) { + gsl::span& next_token_scores, + int counter) { NextTokenScores input_scores = {next_token_scores, batch_beam_size_, vocab_size_}; + beam_search_iteration = counter; for (size_t i = 0; i < processor_list_.size(); i++) { processor_list_[i]->Process(sequences, input_scores); } @@ -188,6 +234,7 @@ template class MinLengthLogitsProcessor; template class RepetitionPenaltyLogitsProcessor; template class NoRepeatNGramLogitsProcessor; template class VocabMaskLogitsProcessor; +template class PrefixVocabMaskLogitsProcessor; template class LogitsProcessorList; } // namespace transformers diff --git a/onnxruntime/contrib_ops/cpu/transformers/logits_processor.h b/onnxruntime/contrib_ops/cpu/transformers/logits_processor.h index 78fe9acf63bcb..f5985b966ba05 100644 --- a/onnxruntime/contrib_ops/cpu/transformers/logits_processor.h +++ b/onnxruntime/contrib_ops/cpu/transformers/logits_processor.h @@ -76,12 +76,25 @@ class VocabMaskLogitsProcessor : public ILogitsProcessor { gsl::span vocab_mask_; }; +template +class PrefixVocabMaskLogitsProcessor : public ILogitsProcessor { + public: + PrefixVocabMaskLogitsProcessor(const gsl::span& vocab_mask, int batch_size); + + void Process(const ISequences* sequences, + NextTokenScores& next_token_scores) override; + + private: + gsl::span prefix_vocab_mask_; + const int batch_size_; +}; + template class LogitsProcessorList { public: LogitsProcessorList() = default ; void Init(const BeamSearchParameters& parameters); - void Process(const ISequences* sequences, gsl::span& next_token_scores); + void Process(const ISequences* sequences, gsl::span& next_token_scores, int counter); private: int batch_beam_size_; @@ -91,6 +104,7 @@ class LogitsProcessorList { std::unique_ptr> repetition_penalty_processor_; std::unique_ptr> no_repeat_ngram_processor_; std::unique_ptr> vocab_mask_processor_; + std::unique_ptr> prefix_vocab_mask_processor_; std::unique_ptr> min_length_processor_; }; diff --git a/onnxruntime/core/graph/contrib_ops/contrib_defs.cc b/onnxruntime/core/graph/contrib_ops/contrib_defs.cc index fcc219799b46a..950dd1760eded 100644 --- a/onnxruntime/core/graph/contrib_ops/contrib_defs.cc +++ b/onnxruntime/core/graph/contrib_ops/contrib_defs.cc @@ -695,6 +695,7 @@ void RegisterTextGenerationSchemas() { "T", OpSchema::Optional) .Input(7, "repetition_penalty", "The parameter for repetition penalty. Default value 1.0 means no penalty. Accepts value > 0.0. Shape is (1)", "T", OpSchema::Optional) .Input(8, "vocab_mask", "Mask of vocabulary. Words that masked with 0 are not allowed to be generated, and 1 is allowed. Shape is (vacab_size)", "M", OpSchema::Optional) + .Input(9, "prefix_vocab_mask", "Mask of vocabulary for first step. Words that masked with 0 are not allowed to be generated, and 1 is allowed. Shape is (batch_size, vocab_size)", "M", OpSchema::Optional) .Output(0, "sequences", "Word IDs of generated sequences. Shape is (batch_size, num_return_sequences, max_sequence_length)", "I") .Output(1, "sequences_scores", "Final beam score of the generated sequences. Shape is (batch_size, num_return_sequences)", "T", OpSchema::Optional) .Output(2, "scores", diff --git a/onnxruntime/python/tools/transformers/convert_beam_search.py b/onnxruntime/python/tools/transformers/convert_beam_search.py index 3f251fb9ad507..8bb25fd609b15 100644 --- a/onnxruntime/python/tools/transformers/convert_beam_search.py +++ b/onnxruntime/python/tools/transformers/convert_beam_search.py @@ -128,6 +128,18 @@ def parse_arguments(argv=None): default=1, help='Positive. >1 to penalize and <1 to encorage.') + beam_search_group.add_argument('--vocab_size', + type=int, + required=False, + default=-1, + help="Vocab_size of the underlying model") + + beam_search_group.add_argument('--prefix_vocab_mask', + required=False, + action='store_true', + help="This vocab mask applies only to first iteration, enable if last word in query might need auto complete") + beam_search_group.set_defaults(prefix_vocab_mask=False) + mixed_precision_option_group = parser.add_argument_group( "mixed precision conversion parameters that works when \"--precision fp16\" is specified") @@ -230,12 +242,18 @@ def convert_model(args): pad_token_id = config.eos_token_id vocab_size = config.vocab_size + # if vocab_size is given in parameters use that. + if args.vocab_size != -1: + vocab_size = args.vocab_size + model = onnx.load(args.gpt2_onnx) model.graph.name = "gpt2 subgraph" inputs = [ "input_ids", "max_length", "min_length", "num_beams", "num_return_sequences", "temperature", "length_penalty", "repetition_penalty", "vocab_mask" ] + if args.prefix_vocab_mask: + inputs.append("prefix_vocab_mask") outputs = ["sequences"] if args.output_sequences_scores: @@ -273,6 +291,10 @@ def convert_model(args): repetition_penalty, vocab_mask ] + if args.prefix_vocab_mask: + prefix_vocab_mask = helper.make_tensor_value_info('prefix_vocab_mask', TensorProto.INT32, ['batch_size', vocab_size]) + graph_inputs.append(prefix_vocab_mask) + # graph outputs sequences = helper.make_tensor_value_info('sequences', TensorProto.INT32, ['batch_size', 'num_return_sequences', 'max_length']) @@ -301,6 +323,11 @@ def convert_model(args): def test_model(args, use_vocab_mask: bool = False, sentences: List[str] = None): + + if args.prefix_vocab_mask: + print("Skipping parity test as prefix vocab mask is not implemented by Hugging Face") + return + from transformers import GPT2Tokenizer, GPT2LMHeadModel tokenizer = GPT2Tokenizer.from_pretrained(args.model_name_or_path, cache_dir=args.cache_dir) From 6076a262dccf9b8dc024e73d7401e1183bdb234d Mon Sep 17 00:00:00 2001 From: Sunghoon <35605090+hanbitmyths@users.noreply.github.com> Date: Wed, 2 Feb 2022 15:19:40 -0800 Subject: [PATCH 16/56] upgrade react-native packages to latest (#10454) --- js/react_native/example/metro.config.js | 6 +- js/react_native/example/package.json | 6 +- js/react_native/example/yarn.lock | 3098 ++++++++--------- js/react_native/package.json | 136 +- js/react_native/yarn.lock | 4151 +++++++---------------- 5 files changed, 2754 insertions(+), 4643 deletions(-) diff --git a/js/react_native/example/metro.config.js b/js/react_native/example/metro.config.js index befddbf0934f2..584afea37647a 100644 --- a/js/react_native/example/metro.config.js +++ b/js/react_native/example/metro.config.js @@ -1,7 +1,7 @@ 'use strict'; const path = require('path'); -const blacklist = require('metro-config/src/defaults/blacklist'); +const exclusionList = require('metro-config/src/defaults/exclusionList'); const escape = require('escape-string-regexp'); const pak = require('../package.json'); @@ -16,9 +16,9 @@ module.exports = { watchFolders: [root], // We need to make sure that only one version is loaded for peerDependencies - // So we blacklist them at the root, and alias them to the versions in example's node_modules + // So we exclusionList them at the root, and alias them to the versions in example's node_modules resolver: { - blacklistRE: blacklist( + exclusionListRE: exclusionList( modules.map( (m) => new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`) diff --git a/js/react_native/example/package.json b/js/react_native/example/package.json index 7b18b665ac45f..9c16435dcd436 100644 --- a/js/react_native/example/package.json +++ b/js/react_native/example/package.json @@ -9,13 +9,13 @@ "start": "react-native start" }, "dependencies": { - "react": "16.13.1", - "react-native": "0.63.4" + "react": "^17.0.2", + "react-native": "^0.67.2" }, "devDependencies": { "@babel/core": "^7.12.10", "@babel/runtime": "^7.12.5", "babel-plugin-module-resolver": "^4.0.0", - "metro-react-native-babel-preset": "^0.64.0" + "metro-react-native-babel-preset": "^0.67.0" } } diff --git a/js/react_native/example/yarn.lock b/js/react_native/example/yarn.lock index ca887e696b545..93a42ec3c95ff 100644 --- a/js/react_native/example/yarn.lock +++ b/js/react_native/example/yarn.lock @@ -2,32 +2,32 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.13.15", "@babel/compat-data@^7.13.8": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.0.tgz#a901128bce2ad02565df95e6ecbf195cf9465919" - integrity sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q== - -"@babel/core@^7.0.0", "@babel/core@^7.12.10": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.0.tgz#47299ff3ec8d111b493f1a9d04bf88c04e728d88" - integrity sha512-8YqpRig5NmIHlMLw09zMlPTvUVMILjqCOtVgu+TVNWEBvy9b5I3RRyhqnrV4hjgEK7n8P9OqvkWJAFmEL6Wwfw== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.0" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helpers" "^7.14.0" - "@babel/parser" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" + integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== + +"@babel/core@^7.1.6", "@babel/core@^7.12.10", "@babel/core@^7.14.0": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -35,64 +35,65 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.14.0", "@babel/generator@^7.5.0": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.1.tgz#1f99331babd65700183628da186f36f63d615c93" - integrity sha512-TMGhsXMXCP/O1WtQmZjpEYDhCYC9vFhayWZPJSZCGkPJgUqX0rF0wwtrYvnzVxIjcF80tkUertXVk5cwqi5cAQ== +"@babel/generator@^7.14.0", "@babel/generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== dependencies: - "@babel/types" "^7.14.1" + "@babel/types" "^7.16.8" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.16.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.13.8": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz#6e91dccf15e3f43e5556dffe32d860109887563c" - integrity sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== dependencies: - "@babel/compat-data" "^7.13.15" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.14.5" + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.13.0": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.1.tgz#1fe11b376f3c41650ad9fedc665b0068722ea76c" - integrity sha512-r8rsUahG4ywm0QpGcCrLaUSOuNAISR3IZCg4Fx05Ozq31aCUrQsTLH6KPxy0N5ULoQ4Sn9qjNdGNtbPWAC6hYg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" - integrity sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" +"@babel/helper-create-class-features-plugin@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" + integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz#a640051772045fedaaecc6f0c6c69f02bdd34bf1" - integrity sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw== +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -103,190 +104,217 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== - dependencies: - "@babel/types" "^7.13.0" - -"@babel/helper-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" - integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== - dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-member-expression-to-functions@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" - integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-transforms@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.0.tgz#8fcf78be220156f22633ee204ea81f73f826a8ad" - integrity sha512-L40t9bxIuGOfpIGA3HNkJhU9qYrf4y5A5LUSw7rGMSn+pcG8dfJ0g6Zval6YJGd2nEjI7oP00fRdnhLKndx6bw== +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" - -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + "@babel/types" "^7.16.7" + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== dependencies: - "@babel/types" "^7.12.13" + "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0", "@babel/helper-replace-supers@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" - integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.12" + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.13.12": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" - integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== dependencies: - "@babel/types" "^7.13.12" + "@babel/types" "^7.16.7" -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-validator-identifier@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" - integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== - -"@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - -"@babel/helpers@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" - integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" - -"@babel/highlight@^7.12.13": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" - integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" + +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.12.13", "@babel/parser@^7.14.0": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.1.tgz#1bd644b5db3f5797c4479d89ec1817fe02b84c47" - integrity sha512-muUGEKu8E/ftMTPlNp+mc6zL3E9zKWmF5sDHZ5MSsoTP9Wyz64AhEf9kD08xYJ7w6Hdcu8H550ircnPyWSIF0Q== - -"@babel/plugin-external-helpers@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.12.13.tgz#65ef9f4576297250dc601d2aa334769790d9966d" - integrity sha512-ClvAsk4RqpE6iacYUjdU9PtvIwC9yAefZENsPfGeG5FckX3jFZLDlWPuyv5gi9/9C2VgwX6H8q1ukBifC0ha+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" +"@babel/parser@^7.1.6", "@babel/parser@^7.14.0", "@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== -"@babel/plugin-proposal-class-properties@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.1.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz#f110284108a9b2b96f01b15b3be9e54c2610a989" - integrity sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz#a40ab158ca55627b71c5513f03d3469026a9e929" + integrity sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-export-default-from" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-default-from" "^7.16.7" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz#3730a31dafd3c10d8ccd10648ed80a2ac5472ef3" - integrity sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-object-rest-spread@^7.0.0": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" - integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.13.0" + "@babel/plugin-transform-parameters" "^7.16.7" "@babel/plugin-proposal-optional-catch-binding@^7.0.0": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" - integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.0.0": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz#ba9feb601d422e0adea6760c2bd6bbb7bfec4866" - integrity sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ== +"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.1.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-class-properties@^7.0.0": @@ -303,26 +331,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.13.tgz#3c807d37efaf0a806f1deb556ccb3b2f562ae9c2" - integrity sha512-gVry0zqoums0hA+EniCYK3gABhjYSLX1dVuwYpPw9DrLNA4/GovXySHVg4FGRsZht09ON/5C2NVx3keq+qqVGQ== +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz#fa89cf13b60de2c3f79acdc2b52a21174c6de060" + integrity sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.13", "@babel/plugin-syntax-flow@^7.2.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz#5df9962503c0a9c918381c929d51d4d6949e7e86" - integrity sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA== +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.16.7", "@babel/plugin-syntax-flow@^7.2.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" + integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" @@ -352,246 +380,275 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-typescript@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz#9dff111ca64154cef0f4dc52cf843d9f12ce4474" - integrity sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w== +"@babel/plugin-syntax-typescript@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" + integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-arrow-functions@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-async-to-generator@^7.0.0": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-transform-block-scoped-functions@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-block-scoping@^7.0.0": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.1.tgz#ac1b3a8e3d8cbb31efc6b9be2f74eb9823b74ab2" - integrity sha512-2mQXd0zBrwfp0O1moWIhPpEeTKDvxyHcnma3JATVP1l+CctWBuot6OJG8LQ4DnBj4ZZPSmlb/fm4mu47EOAnVA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-classes@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" - integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-destructuring@^7.0.0": - version "7.13.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz#678d96576638c19d5b36b332504d3fd6e06dea27" - integrity sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-exponentiation-operator@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-flow-strip-types@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz#58177a48c209971e8234e99906cb6bd1122addd3" - integrity sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg== +"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" + integrity sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-flow" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-flow" "^7.16.7" "@babel/plugin-transform-for-of@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-function-name@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-literals@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-member-expression-literals@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-commonjs@^7.0.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" - integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" "@babel/plugin-transform-object-assign@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz#d9b9200a69e03403a813e44a933ad9f4bddfd050" - integrity sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz#5fe08d63dccfeb6a33aa2638faf98e5c584100f8" + integrity sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-object-super@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" - integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-property-literals@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-react-display-name@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" - integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" + integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz#422d99d122d592acab9c35ea22a6cfd9bf189f60" - integrity sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz#f432ad0cba14c4a1faf44f0076c69e42a4d4479e" + integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz#051d76126bee5c9a6aa3ba37be2f6c1698856bcb" - integrity sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz#1879c3f23629d287cc6186a6c683154509ec70c0" + integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-react-jsx@^7.0.0": - version "7.13.12" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz#1df5dfaf0f4b784b43e96da6f28d630e775f68b3" - integrity sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz#86a6a220552afd0e4e1f0388a68a372be7add0d4" + integrity sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.13.12" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.16.7" + "@babel/types" "^7.16.7" "@babel/plugin-transform-regenerator@^7.0.0": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" - integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: regenerator-transform "^0.14.2" "@babel/plugin-transform-runtime@^7.0.0": - version "7.13.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.15.tgz#2eddf585dd066b84102517e10a577f24f76a9cd7" - integrity sha512-d+ezl76gx6Jal08XngJUkXM4lFXK/5Ikl9Mh4HKDxSfGJXmZ9xG64XT2oivBzfxb/eQ62VfvoMkaCZUKJMVrBA== - dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-polyfill-corejs2 "^0.2.0" - babel-plugin-polyfill-corejs3 "^0.2.0" - babel-plugin-polyfill-regenerator "^0.2.0" + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz#53d9fd3496daedce1dd99639097fa5d14f4c7c2c" + integrity sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.5.0" + babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-spread@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-transform-sticky-regex@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-template-literals@^7.0.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typescript@^7.5.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz#4a498e1f3600342d2a9e61f60131018f55774853" - integrity sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ== +"@babel/plugin-transform-typescript@^7.16.7", "@babel/plugin-transform-typescript@^7.5.0": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" + integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-typescript" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-typescript" "^7.16.7" "@babel/plugin-transform-unicode-regex@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-flow@^7.0.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.7.tgz#7fd831323ab25eeba6e4b77a589f680e30581cbd" + integrity sha512-6ceP7IyZdUYQ3wUVqyRSQXztd1YmFHWI4Xv11MIqAlE4WqxBSd/FZ61V9k+TS5Gd4mkHOtQtPp9ymRpxH4y1Ug== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-flow-strip-types" "^7.16.7" + +"@babel/preset-typescript@^7.1.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" + integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.16.7" "@babel/register@^7.0.0": - version "7.13.16" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.13.16.tgz#ae3ab0b55c8ec28763877383c454f01521d9a53d" - integrity sha512-dh2t11ysujTwByQjXNgJ48QZ2zcXKQVdV8s0TbeMI0flmtGWCdTwK9tJiACHXPLmncm5+ktNn/diojA45JE4jg== + version "7.16.9" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.16.9.tgz#fcfb23cfdd9ad95c9771e58183de83b513857806" + integrity sha512-jJ72wcghdRIlENfvALcyODhNoGE5j75cYHdC+aQMh6cU/P86tiiXTp9XYZct1UxUMo/4+BgQRyNZEGx0KWGS+g== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -599,42 +656,44 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" - integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== +"@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.0.0", "@babel/template@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0": - version "7.14.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.0.tgz#cea0dc8ae7e2b1dec65f512f39f3483e8cc95aef" - integrity sha512-dZ/a371EE5XNhTHomvtuLTUyx6UEoJmYX+DT5zBCQN3McHemsuIaKKYqsc/fs26BEkHs/lBZy0J571LP5z9kQA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.0" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.14.0" - "@babel/types" "^7.14.0" +"@babel/template@^7.0.0", "@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.14.0", "@babel/types@^7.14.1": - version "7.14.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.1.tgz#095bd12f1c08ab63eff6e8f7745fa7c9cc15a9db" - integrity sha512-S13Qe85fzLs3gYRUnrpyeIrBJIMYv33qSTg1qoBwiG6nPKwUWAD9odSzWhEedpwOIzSEI6gbdQIWEMiCI42iBA== +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== dependencies: - "@babel/helper-validator-identifier" "^7.14.0" + "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" "@cnakazawa/watch@^1.0.3": @@ -645,118 +704,72 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@hapi/address@2.x.x": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" - integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== - -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== - -"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" - integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== - -"@hapi/joi@^15.0.3": - version "15.1.1" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" - integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== - dependencies: - "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" - "@hapi/topo" "3.x.x" - -"@hapi/topo@3.x.x": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" - integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== - dependencies: - "@hapi/hoek" "^8.3.0" - -"@jest/console@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" - integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== - dependencies: - "@jest/source-map" "^24.9.0" - chalk "^2.0.1" - slash "^2.0.0" +"@hapi/hoek@^9.0.0": + version "9.2.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.2.1.tgz#9551142a1980503752536b5050fd99f4a7f13b17" + integrity sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw== -"@jest/fake-timers@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" - integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== dependencies: - "@jest/types" "^24.9.0" - jest-message-util "^24.9.0" - jest-mock "^24.9.0" + "@hapi/hoek" "^9.0.0" -"@jest/source-map@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" - integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== +"@jest/create-cache-key-function@^27.0.1": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-27.4.2.tgz#09b585f9dbafec0f56cfb0e4d4edfe2bec0e0768" + integrity sha512-aSSCAJwUNX4R1hJQoyimsND5l+2EsFgzlepS8NuOJJHjXij/UdxYFngac44tmv9IYdI+kglAyORg0plt4/aFMQ== dependencies: - callsites "^3.0.0" - graceful-fs "^4.1.15" - source-map "^0.6.0" + "@jest/types" "^27.4.2" -"@jest/test-result@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" - integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== +"@jest/types@^26.6.2": + version "26.6.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" + integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== dependencies: - "@jest/console" "^24.9.0" - "@jest/types" "^24.9.0" "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^15.0.0" + chalk "^4.0.0" -"@jest/types@^24.9.0": - version "24.9.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" - integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^13.0.0" - -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== +"@jest/types@^27.4.2": + version "27.4.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" + integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^16.0.0" + chalk "^4.0.0" -"@react-native-community/cli-debugger-ui@^4.13.1": - version "4.13.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.13.1.tgz#07de6d4dab80ec49231de1f1fbf658b4ad39b32c" - integrity sha512-UFnkg5RTq3s2X15fSkrWY9+5BKOFjihNSnJjTV2H5PtTUFbd55qnxxPw8CxSfK0bXb1IrSvCESprk2LEpqr5cg== +"@react-native-community/cli-debugger-ui@^6.0.0-rc.0": + version "6.0.0-rc.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-6.0.0-rc.0.tgz#774378626e4b70f5e1e2e54910472dcbaffa1536" + integrity sha512-achYcPPoWa9D02C5tn6TBzjeY443wQTyx37urptc75JpZ7gR5YHsDyIEEWa3DDYp1va9zx/iGg+uZ/hWw07GAw== dependencies: serve-static "^1.13.1" -"@react-native-community/cli-hermes@^4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-4.13.0.tgz#6243ed9c709dad5e523f1ccd7d21066b32f2899d" - integrity sha512-oG+w0Uby6rSGsUkJGLvMQctZ5eVRLLfhf84lLyz942OEDxFRa9U19YJxOe9FmgCKtotbYiM3P/XhK+SVCuerPQ== +"@react-native-community/cli-hermes@^6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-hermes/-/cli-hermes-6.3.0.tgz#92b2f07d08626a60f6893c3e3d57c1538c8fb5a7" + integrity sha512-Uhbm9bubyZLZ12vFCIfWbE/Qi3SBTbYIN/TC08EudTLhv/KbPomCQnmFsnJ7AXQFuOZJs73mBxoEAYSbRbwyVA== dependencies: - "@react-native-community/cli-platform-android" "^4.13.0" - "@react-native-community/cli-tools" "^4.13.0" - chalk "^3.0.0" + "@react-native-community/cli-platform-android" "^6.3.0" + "@react-native-community/cli-tools" "^6.2.0" + chalk "^4.1.2" hermes-profile-transformer "^0.0.6" ip "^1.1.5" -"@react-native-community/cli-platform-android@^4.10.0", "@react-native-community/cli-platform-android@^4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-4.13.0.tgz#922681ec82ee1aadd993598b814df1152118be02" - integrity sha512-3i8sX8GklEytUZwPnojuoFbCjIRzMugCdzDIdZ9UNmi/OhD4/8mLGO0dgXfT4sMWjZwu3qjy45sFfk2zOAgHbA== +"@react-native-community/cli-platform-android@^6.0.0", "@react-native-community/cli-platform-android@^6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-6.3.0.tgz#ab7d156bd69a392493323eeaba839a874c0e201f" + integrity sha512-d5ufyYcvrZoHznYm5bjBXaiHIJv552t5gYtQpnUsxBhHSQ8QlaNmlLUyeSPRDfOw4ND9b0tPHqs4ufwx6vp/fQ== dependencies: - "@react-native-community/cli-tools" "^4.13.0" - chalk "^3.0.0" + "@react-native-community/cli-tools" "^6.2.0" + chalk "^4.1.2" execa "^1.0.0" fs-extra "^8.1.0" glob "^7.1.3" @@ -766,63 +779,85 @@ slash "^3.0.0" xmldoc "^1.1.2" -"@react-native-community/cli-platform-ios@^4.10.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-4.13.0.tgz#a738915c68cac86df54e578b59a1311ea62b1aef" - integrity sha512-6THlTu8zp62efkzimfGr3VIuQJ2514o+vScZERJCV1xgEi8XtV7mb/ZKt9o6Y9WGxKKkc0E0b/aVAtgy+L27CA== +"@react-native-community/cli-platform-ios@^6.0.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-6.2.0.tgz#ceaa23995511a8e400b506632ac7e6a66a17ec2a" + integrity sha512-k15MhExxLiLDDZOeuPgvTxbp0CsoLQQpk2Du0HjZDePqqWcKJylQqMZru1o8HuQHPcEr+b71HIs5V+lKyFYpfg== dependencies: - "@react-native-community/cli-tools" "^4.13.0" - chalk "^3.0.0" + "@react-native-community/cli-tools" "^6.2.0" + chalk "^4.1.2" glob "^7.1.3" js-yaml "^3.13.1" lodash "^4.17.15" - plist "^3.0.1" + ora "^3.4.0" + plist "^3.0.2" xcode "^2.0.0" -"@react-native-community/cli-server-api@^4.13.1": - version "4.13.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-4.13.1.tgz#bee7ee9702afce848e9d6ca3dcd5669b99b125bd" - integrity sha512-vQzsFKD9CjHthA2ehTQX8c7uIzlI9A7ejaIow1I9RlEnLraPH2QqVDmzIdbdh5Od47UPbRzamCgAP8Bnqv3qwQ== +"@react-native-community/cli-plugin-metro@^6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-6.4.0.tgz#70b7908d6b548481f37ed58167f9460d325ae21c" + integrity sha512-lcrNODvHd3ZVhiEshXAjyBoqP44rjhkytkOSUpnZHAcmMLiguxDmvhWeWqbwu3XqSX/f0gVKmfj81t+opI1bSw== + dependencies: + "@react-native-community/cli-server-api" "^6.4.0" + "@react-native-community/cli-tools" "^6.2.0" + chalk "^4.1.2" + metro "^0.66.1" + metro-config "^0.66.1" + metro-core "^0.66.1" + metro-react-native-babel-transformer "^0.66.1" + metro-resolver "^0.66.1" + metro-runtime "^0.66.1" + readline "^1.3.0" + +"@react-native-community/cli-server-api@^6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-6.4.0.tgz#aa547839e54f9910d3671808e009489d2c2db0d9" + integrity sha512-zYUfOEHLTFEmNoa5oscgWOu2xtOcB4NZWqCdpkxNmgGQhC48CSNl8V4rxXLoozcymEsSUN0rj5pDRiXz/5CYow== dependencies: - "@react-native-community/cli-debugger-ui" "^4.13.1" - "@react-native-community/cli-tools" "^4.13.0" + "@react-native-community/cli-debugger-ui" "^6.0.0-rc.0" + "@react-native-community/cli-tools" "^6.2.0" compression "^1.7.1" connect "^3.6.5" errorhandler "^1.5.0" nocache "^2.1.0" - pretty-format "^25.1.0" + pretty-format "^26.6.2" serve-static "^1.13.1" ws "^1.1.0" -"@react-native-community/cli-tools@^4.13.0": - version "4.13.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-4.13.0.tgz#b406463d33af16cedc4305a9a9257ed32845cf1b" - integrity sha512-s4f489h5+EJksn4CfheLgv5PGOM0CDmK1UEBLw2t/ncWs3cW2VI7vXzndcd/WJHTv3GntJhXDcJMuL+Z2IAOgg== +"@react-native-community/cli-tools@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-6.2.0.tgz#8f4adc2d83ab96e5654348533c8fa602742c4fce" + integrity sha512-08ssz4GMEnRxC/1FgTTN/Ud7mExQi5xMphItPjfHiTxpZPhrFn+IMx6mya0ncFEhhxQ207wYlJMRLPRRdBZ8oA== dependencies: - chalk "^3.0.0" + appdirsjs "^1.2.4" + chalk "^4.1.2" lodash "^4.17.15" mime "^2.4.1" node-fetch "^2.6.0" open "^6.2.0" + semver "^6.3.0" shell-quote "1.6.1" -"@react-native-community/cli-types@^4.10.1": - version "4.10.1" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-4.10.1.tgz#d68a2dcd1649d3b3774823c64e5e9ce55bfbe1c9" - integrity sha512-ael2f1onoPF3vF7YqHGWy7NnafzGu+yp88BbFbP0ydoCP2xGSUzmZVw0zakPTC040Id+JQ9WeFczujMkDy6jYQ== - -"@react-native-community/cli@^4.10.0": - version "4.14.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-4.14.0.tgz#bb106a98341bfa2db36060091ff90bfe82ea4f55" - integrity sha512-EYJKBuxFxAu/iwNUfwDq41FjORpvSh1wvQ3qsHjzcR5uaGlWEOJrd3uNJDuKBAS0TVvbEesLF9NEXipjyRVr4Q== - dependencies: - "@hapi/joi" "^15.0.3" - "@react-native-community/cli-debugger-ui" "^4.13.1" - "@react-native-community/cli-hermes" "^4.13.0" - "@react-native-community/cli-server-api" "^4.13.1" - "@react-native-community/cli-tools" "^4.13.0" - "@react-native-community/cli-types" "^4.10.1" - chalk "^3.0.0" +"@react-native-community/cli-types@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-6.0.0.tgz#90269fbdc7229d5e3b8f2f3e029a94083551040d" + integrity sha512-K493Fk2DMJC0ZM8s8gnfseKxGasIhuDaCUDeLZcoCSFlrjKEuEs1BKKEJiev0CARhKEXKOyyp/uqYM9nWhisNw== + dependencies: + ora "^3.4.0" + +"@react-native-community/cli@^6.0.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-6.4.0.tgz#0b61a4b5f11293b0b79a0e78f80777387a9529a9" + integrity sha512-UNvYnWaALa4mJEaWdLY3fVK+csZzx/Ja/FGvXISPJ9W9lrKvGtyXkidViUCPbPtMsJUi7teA4uIShHn0mbGmnQ== + dependencies: + "@react-native-community/cli-debugger-ui" "^6.0.0-rc.0" + "@react-native-community/cli-hermes" "^6.3.0" + "@react-native-community/cli-plugin-metro" "^6.4.0" + "@react-native-community/cli-server-api" "^6.4.0" + "@react-native-community/cli-tools" "^6.2.0" + "@react-native-community/cli-types" "^6.0.0" + appdirsjs "^1.2.4" + chalk "^4.1.2" command-exists "^1.2.8" commander "^2.19.0" cosmiconfig "^5.1.0" @@ -833,29 +868,63 @@ fs-extra "^8.1.0" glob "^7.1.3" graceful-fs "^4.1.3" - inquirer "^3.0.6" + joi "^17.2.1" leven "^3.1.0" lodash "^4.17.15" - metro "^0.59.0" - metro-config "^0.59.0" - metro-core "^0.59.0" - metro-react-native-babel-transformer "^0.59.0" - metro-resolver "^0.59.0" minimist "^1.2.0" - mkdirp "^0.5.1" node-stream-zip "^1.9.1" ora "^3.4.0" - pretty-format "^25.2.0" + pretty-format "^26.6.2" + prompts "^2.4.0" semver "^6.3.0" serve-static "^1.13.1" strip-ansi "^5.2.0" sudo-prompt "^9.0.0" wcwidth "^1.0.1" +"@react-native/assets@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e" + integrity sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ== + +"@react-native/normalize-color@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.0.0.tgz#da955909432474a9a0fe1cbffc66576a0447f567" + integrity sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw== + +"@react-native/polyfills@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-2.0.0.tgz#4c40b74655c83982c8cf47530ee7dc13d957b6aa" + integrity sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ== + +"@sideway/address@^4.1.3": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.3.tgz#d93cce5d45c5daec92ad76db492cc2ee3c64ab27" + integrity sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@types/graceful-fs@^4.1.2": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + dependencies: + "@types/node" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" @@ -864,35 +933,34 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: - "@types/istanbul-lib-coverage" "*" "@types/istanbul-lib-report" "*" -"@types/stack-utils@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" - integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== +"@types/node@*": + version "17.0.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.14.tgz#33b9b94f789a8fedd30a68efdbca4dbb06b61f20" + integrity sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng== "@types/yargs-parser@*": - version "20.2.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== + version "20.2.1" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" + integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== -"@types/yargs@^13.0.0": - version "13.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" - integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ== +"@types/yargs@^15.0.0": + version "15.0.14" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" + integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== dependencies: "@types/yargs-parser" "*" -"@types/yargs@^15.0.0": - version "15.0.13" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" - integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== +"@types/yargs@^16.0.0": + version "16.0.4" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" + integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== dependencies: "@types/yargs-parser" "*" @@ -908,7 +976,7 @@ absolute-path@^0.0.0: resolved "https://registry.yarnpkg.com/absolute-path/-/absolute-path-0.0.0.tgz#a78762fbdadfb5297be99b15d35a785b2f095bf7" integrity sha1-p4di+9rftSl76ZsV01p4Wy8JW/c= -accepts@~1.3.5, accepts@~1.3.7: +accepts@^1.3.7, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== @@ -921,25 +989,6 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== -ansi-colors@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" - integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA== - dependencies: - ansi-wrap "^0.1.0" - -ansi-cyan@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" - integrity sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= - dependencies: - ansi-wrap "0.1.0" - -ansi-escapes@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - ansi-fragments@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansi-fragments/-/ansi-fragments-0.2.1.tgz#24409c56c4cc37817c3d7caa99d8969e2de5a05e" @@ -949,34 +998,15 @@ ansi-fragments@^0.2.1: slice-ansi "^2.0.0" strip-ansi "^5.0.0" -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= - dependencies: - ansi-wrap "0.1.0" - -ansi-red@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" - integrity sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= - dependencies: - ansi-wrap "0.1.0" - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.0.0, ansi-regex@^4.1.0: +ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.0, ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" @@ -992,11 +1022,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-wrap@0.1.0, ansi-wrap@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1005,6 +1030,19 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +appdirsjs@^1.2.4: + version "1.2.6" + resolved "https://registry.yarnpkg.com/appdirsjs/-/appdirsjs-1.2.6.tgz#fccf9ee543315492867cacfcfd4a2b32257d30ac" + integrity sha512-D8wJNkqMCeQs3kLasatELsddox/Xqkhp+J07iXGyL54fVN7oc+nmNfYzGuCs1IEP6uBw+TfpuO3JKwc+lECy4w== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1012,29 +1050,16 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -arr-diff@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" - integrity sha1-aHwydYFjWI/vfeezb6vklesaOZo= - dependencies: - arr-flatten "^1.0.1" - array-slice "^0.2.3" - arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-flatten@^1.0.1, arr-flatten@^1.1.0: +arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== -arr-union@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" - integrity sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= - arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" @@ -1055,17 +1080,12 @@ array-reduce@~0.0.0: resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - integrity sha1-3Tz7gO15c6dRF82sabC5nshhhvU= - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -asap@~2.0.3, asap@~2.0.6: +asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -1075,11 +1095,23 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +ast-types@0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" + integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== + dependencies: + tslib "^2.0.1" + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + async@^2.4.0: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1092,6 +1124,11 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +babel-core@^7.0.0-bridge.0: + version "7.0.0-bridge.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== + babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -1110,39 +1147,39 @@ babel-plugin-module-resolver@^4.0.0: reselect "^4.0.0" resolve "^1.13.1" -babel-plugin-polyfill-corejs2@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz#686775bf9a5aa757e10520903675e3889caeedc4" - integrity sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg== +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== dependencies: "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz#f4b4bb7b19329827df36ff56f6e6d367026cb7a2" - integrity sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg== +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.0" - core-js-compat "^3.9.1" + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz#853f5f5716f4691d98c84f8069c7636ea8da7ab8" - integrity sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg== +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: version "7.0.0-beta.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== -babel-preset-fbjs@^3.2.0, babel-preset-fbjs@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" - integrity sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw== +babel-preset-fbjs@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz#38a14e5a7a3b285a3f3a86552d650dca5cf6111c" + integrity sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow== dependencies: "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-object-rest-spread" "^7.0.0" @@ -1195,31 +1232,24 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -big-integer@^1.6.44: - version "1.6.48" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" - integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" +big-integer@1.6.x: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== -bplist-creator@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" - integrity sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA== +bplist-creator@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" + integrity sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg== dependencies: - stream-buffers "~2.2.0" + stream-buffers "2.2.x" -bplist-parser@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" - integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== +bplist-parser@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.3.0.tgz#ba50666370f61bbf94881636cd9f7d23c5286090" + integrity sha512-zgmaRvT6AN1JpPPV+S0a1/FAtoxSreYDccZGIqEMSvZl9DMe70mJ7MFzpxa1X+gHVdkToE2haRUHHMiW1OdejA== dependencies: - big-integer "^1.6.44" + big-integer "1.6.x" brace-expansion@^1.1.7: version "1.1.11" @@ -1245,16 +1275,23 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -browserslist@^4.14.5, browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.17.5, browserslist@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" escalade "^3.1.1" - node-releases "^1.1.71" + node-releases "^2.0.1" + picocolors "^1.0.0" bser@2.1.1: version "2.1.1" @@ -1263,15 +1300,10 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== bytes@3.0.0: version "3.0.0" @@ -1320,20 +1352,20 @@ callsites@^2.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001219: - version "1.0.30001221" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001221.tgz#b916721ddf59066cfbe96c5c9a77cf7ae5c52e65" - integrity sha512-b9TOZfND3uGSLjMOrLh8XxSQ41x8mX+9MLJYDM4AAHLfaZHttrLNPrScWjVnBITRZbY5sPpCt7X85n7VSLZ+/g== +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001286: + version "1.0.30001305" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001305.tgz#02cd8031df07c4fcb117aa2ecc4899122681bd4c" + integrity sha512-p7d9YQMji8haf0f+5rbcv9WlQ+N5jMPfRAnUmZRlNxsNeBO3Yr7RYG6M2uTY1h9tCVdlkJg6YNNc4kiAiBLdWA== capture-exit@^2.0.0: version "2.0.0" @@ -1342,7 +1374,7 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1351,19 +1383,14 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== +chalk@^4.0.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -1387,23 +1414,9 @@ cli-cursor@^2.1.0: restore-cursor "^2.0.0" cli-spinners@^2.0.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" - integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== cliui@^6.0.0: version "6.0.0" @@ -1460,15 +1473,15 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== +colorette@^1.0.7: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== -colorette@^1.0.7, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== command-exists@^1.2.8: version "1.2.9" @@ -1520,16 +1533,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - connect@^3.6.5: version "3.7.0" resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" @@ -1541,9 +1544,9 @@ connect@^3.6.5: utils-merge "1.0.1" convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== dependencies: safe-buffer "~5.1.1" @@ -1552,23 +1555,18 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.9.1: - version "3.11.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.11.2.tgz#5048e367851cfd2c6c0cb81310757b4da296e385" - integrity sha512-gYhNwu7AJjecNtRrIfyoBabQ3ZG+llfPmg9BifIX8yxIpDyfNLRM73zIjINSm6z3dMdI1nwNC9C7uiy4pIC6cw== +core-js-compat@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.0.tgz#bcc86aa5a589cee358e7a7fa0a4979d5a76c3885" + integrity sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A== dependencies: - browserslist "^4.16.6" + browserslist "^4.19.1" semver "7.0.0" -core-js@^2.4.1: - version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: version "5.2.1" @@ -1580,15 +1578,6 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: js-yaml "^3.13.1" parse-json "^4.0.0" -cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -1601,9 +1590,9 @@ cross-spawn@^6.0.0: which "^1.2.9" dayjs@^1.8.15: - version "1.10.4" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.4.tgz#8e544a9b8683f61783f570980a8a80eaf54ab1e2" - integrity sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw== + version "1.10.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" + integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" @@ -1613,9 +1602,9 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: ms "2.0.0" debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" @@ -1690,15 +1679,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.723: - version "1.3.725" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.725.tgz#04fc83f9189169aff50f0a00c6b4090b910cba85" - integrity sha512-2BbeAESz7kc6KBzs7WVrMc1BY5waUphk4D4DX5dSQXJhsc3tP5ZFaiyuL0AB7vUKzDYpIeYwTYlEfxyjsGUrhw== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== +electron-to-chromium@^1.4.17: + version "1.4.61" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.61.tgz#97689f81b4ac5c996363d9ee7babd3406c44d6c3" + integrity sha512-kpzCOOFlx63C9qKRyIDEsKIUgzoe98ump7T4gU+/OLzj8gYkkWf2SIyBjhTSE0keAjMAp3i7C262YtkQOMYrGw== emoji-regex@^8.0.0: version "8.0.0" @@ -1710,13 +1694,6 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding@^0.1.11: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -1766,12 +1743,7 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -esprima@^4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -1786,11 +1758,6 @@ event-target-shim@^5.0.0, event-target-shim@^5.0.1: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter3@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - exec-sh@^0.3.2: version "0.3.6" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" @@ -1822,13 +1789,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extend-shallow@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" - integrity sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= - dependencies: - kind-of "^1.1.0" - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -1844,15 +1804,6 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -1867,69 +1818,12 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -fancy-log@^1.3.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - fb-watchman@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: - bser "2.1.1" - -fbjs-css-vars@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" - integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== - -fbjs-scripts@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz#069a0c0634242d10031c6460ef1fccefcdae8b27" - integrity sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ== - dependencies: - "@babel/core" "^7.0.0" - ansi-colors "^1.0.1" - babel-preset-fbjs "^3.2.0" - core-js "^2.4.1" - cross-spawn "^5.1.0" - fancy-log "^1.3.2" - object-assign "^4.0.1" - plugin-error "^0.1.2" - semver "^5.1.0" - through2 "^2.0.0" - -fbjs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a" - integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA== - dependencies: - core-js "^2.4.1" - fbjs-css-vars "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.18" - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + bser "2.1.1" fill-range@^4.0.0: version "4.0.0" @@ -1941,6 +1835,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -1986,6 +1887,16 @@ find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +flow-parser@0.*: + version "0.170.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.170.0.tgz#52cac19fd884c41894f39368bdf384183a597b3b" + integrity sha512-H1Fu8EM/F6MtOpHYpsFXPyySatowrXMWENxRmmKAfirfBr8kjHrms3YDuv82Nhn0xWaXV7Hhynp2tEaZsLhHLw== + +flow-parser@^0.121.0: + version "0.121.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.121.0.tgz#9f9898eaec91a9f7c323e9e992d81ab5c58e618f" + integrity sha512-1gIBiWJNR0tKUNv8gZuk7l9rVX06OuLzY9AoGio7y/JT4V1IZErEMEq2TJS+PFcw/y0RshZ1J/27VfK1UQzYVg== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2026,13 +1937,10 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" +fsevents@^2.1.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" @@ -2071,9 +1979,9 @@ get-value@^2.0.3, get-value@^2.0.6: integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= glob@^7.1.3, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -2087,10 +1995,10 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== has-flag@^3.0.0: version "3.0.0" @@ -2145,10 +2053,15 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hermes-engine@~0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.5.1.tgz#601115e4b1e0a17d9aa91243b96277de4e926e09" - integrity sha512-hLwqh8dejHayjlpvZY40e1aDCDvyP98cWx/L5DhAjSJLH8g4z9Tp08D7y4+3vErDsncPOdf1bxm+zUWpx0/Fxg== +hermes-engine@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.9.0.tgz#84d9cfe84e8f6b1b2020d6e71b350cec84ed982f" + integrity sha512-r7U+Y4P2Qg/igFVZN+DpT7JFfXUn1MM4dFne8aW+cCrF6RRymof+VqrUHs1kl07j8h8V2CNesU19RKgWbr3qPw== + +hermes-parser@0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/hermes-parser/-/hermes-parser-0.4.7.tgz#410f5129d57183784d205a0538e6fbdcf614c9ea" + integrity sha512-jc+zCtXbtwTiXoMAoXOHepxAaGVFIp89wwE9qcdwnMd/uGVEtPoY8FaFSsx0ThPvyKirdR2EsIIDVrpbSXz1Ag== hermes-profile-transformer@^0.0.6: version "0.0.6" @@ -2157,30 +2070,16 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== dependencies: depd "~1.1.2" inherits "2.0.4" - setprototypeof "1.1.1" + setprototypeof "1.2.0" statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -iconv-lite@^0.4.17: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" + toidentifier "1.0.1" image-size@^0.6.0: version "0.6.3" @@ -2195,6 +2094,11 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -2203,31 +2107,11 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -2271,10 +2155,10 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.3.0.tgz#d341652e3408bca69c4671b79a0954a3d349f887" - integrity sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw== +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== dependencies: has "^1.0.3" @@ -2344,6 +2228,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2351,7 +2240,7 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -2388,106 +2277,93 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - -jest-get-type@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" - integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== +jest-get-type@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" + integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== -jest-haste-map@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" - integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== +jest-haste-map@^26.5.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" + integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== dependencies: - "@jest/types" "^24.9.0" - anymatch "^2.0.0" + "@jest/types" "^26.6.2" + "@types/graceful-fs" "^4.1.2" + "@types/node" "*" + anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.1.15" - invariant "^2.2.4" - jest-serializer "^24.9.0" - jest-util "^24.9.0" - jest-worker "^24.9.0" - micromatch "^3.1.10" + graceful-fs "^4.2.4" + jest-regex-util "^26.0.0" + jest-serializer "^26.6.2" + jest-util "^26.6.2" + jest-worker "^26.6.2" + micromatch "^4.0.2" sane "^4.0.3" walker "^1.0.7" optionalDependencies: - fsevents "^1.2.7" - -jest-message-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" - integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - "@types/stack-utils" "^1.0.1" - chalk "^2.0.1" - micromatch "^3.1.10" - slash "^2.0.0" - stack-utils "^1.0.1" - -jest-mock@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" - integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== - dependencies: - "@jest/types" "^24.9.0" - -jest-serializer@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" - integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== - -jest-util@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" - integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== - dependencies: - "@jest/console" "^24.9.0" - "@jest/fake-timers" "^24.9.0" - "@jest/source-map" "^24.9.0" - "@jest/test-result" "^24.9.0" - "@jest/types" "^24.9.0" - callsites "^3.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.15" + fsevents "^2.1.2" + +jest-regex-util@^26.0.0: + version "26.0.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" + integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== + +jest-serializer@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" + integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + dependencies: + "@types/node" "*" + graceful-fs "^4.2.4" + +jest-util@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" + integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + dependencies: + "@jest/types" "^26.6.2" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" is-ci "^2.0.0" - mkdirp "^0.5.1" - slash "^2.0.0" - source-map "^0.6.0" + micromatch "^4.0.2" -jest-validate@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" - integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== +jest-validate@^26.5.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" + integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== dependencies: - "@jest/types" "^24.9.0" - camelcase "^5.3.1" - chalk "^2.0.1" - jest-get-type "^24.9.0" + "@jest/types" "^26.6.2" + camelcase "^6.0.0" + chalk "^4.0.0" + jest-get-type "^26.3.0" leven "^3.1.0" - pretty-format "^24.9.0" + pretty-format "^26.6.2" -jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== +jest-worker@^26.0.0, jest-worker@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== dependencies: + "@types/node" "*" merge-stream "^2.0.0" - supports-color "^6.1.0" + supports-color "^7.0.0" jetifier@^1.6.2: - version "1.6.7" - resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.7.tgz#0e3f5ca716db03f1c869c9711ce1b7d0a6e5b24a" - integrity sha512-IMVhXwdIxrR7vVq624m8H79IsaLysUYDPI2KC18L3LCc1Tg/KYvNMIkHN3X96XF5fnPVdINBFkFfC3rsPX1yYg== + version "1.6.8" + resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.8.tgz#e88068697875cbda98c32472902c4d3756247798" + integrity sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw== + +joi@^17.2.1: + version "17.6.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.0.tgz#0bb54f2f006c09a96e75ce687957bd04290054b2" + integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -2502,10 +2378,35 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsc-android@^245459.0.0: - version "245459.0.0" - resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-245459.0.0.tgz#e584258dd0b04c9159a27fb104cd5d491fd202c9" - integrity sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg== +jsc-android@^250230.2.1: + version "250230.2.1" + resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250230.2.1.tgz#3790313a970586a03ab0ad47defbc84df54f1b83" + integrity sha512-KmxeBlRjwoqCnBBKGsihFtvsBHyUFlBxJPK4FzeYcIuBfdjv6jFys44JITAgSTbQD+vIdwMEfyZklsuQX0yI1Q== + +jscodeshift@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.11.0.tgz#4f95039408f3f06b0e39bb4d53bc3139f5330e2f" + integrity sha512-SdRK2C7jjs4k/kT2mwtO07KJN9RnjxtKn03d9JVj6c3j9WwaLcFYsICYDnLAzY0hp+wG2nxl+Cm2jWLiNVYb8g== + dependencies: + "@babel/core" "^7.1.6" + "@babel/parser" "^7.1.6" + "@babel/plugin-proposal-class-properties" "^7.1.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.1.0" + "@babel/plugin-proposal-optional-chaining" "^7.1.0" + "@babel/plugin-transform-modules-commonjs" "^7.1.0" + "@babel/preset-flow" "^7.0.0" + "@babel/preset-typescript" "^7.1.0" + "@babel/register" "^7.0.0" + babel-core "^7.0.0-bridge.0" + colors "^1.1.2" + flow-parser "0.*" + graceful-fs "^4.2.4" + micromatch "^3.1.10" + neo-async "^2.5.0" + node-dir "^0.1.17" + recast "^0.20.3" + temp "^0.8.1" + write-file-atomic "^2.3.0" jsesc@^2.5.1: version "2.5.2" @@ -2522,13 +2423,6 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -2560,11 +2454,6 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= -kind-of@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" - integrity sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2596,6 +2485,11 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -2626,7 +2520,7 @@ lodash.throttle@^4.1.1: resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash@^4.17.14, lodash@^4.17.15, lodash@^4.3.0: +lodash@^4.17.14, lodash@^4.17.15: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2654,14 +2548,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -2670,12 +2556,12 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: - tmpl "1.0.x" + tmpl "1.0.5" map-cache@^0.2.2: version "0.2.2" @@ -2689,93 +2575,98 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= - dependencies: - readable-stream "^2.0.1" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -metro-babel-register@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.59.0.tgz#2bcff65641b36794cf083ba732fbc46cf870fb43" - integrity sha512-JtWc29erdsXO/V3loenXKw+aHUXgj7lt0QPaZKPpctLLy8kcEpI/8pfXXgVK9weXICCpCnYtYncIosAyzh0xjg== +metro-babel-register@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.66.2.tgz#c6bbe36c7a77590687ccd74b425dc020d17d05af" + integrity sha512-3F+vsVubUPJYKfVMeol8/7pd8CC287Rw92QYzJD8LEmI980xcgwMUEVBZ0UIAUwlLgiJG/f4Mwhuji2EeBXrPg== dependencies: - "@babel/core" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/core" "^7.14.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" "@babel/plugin-transform-flow-strip-types" "^7.0.0" "@babel/plugin-transform-modules-commonjs" "^7.0.0" "@babel/register" "^7.0.0" escape-string-regexp "^1.0.5" -metro-babel-transformer@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.59.0.tgz#dda99c75d831b00142c42c020c51c103b29f199d" - integrity sha512-fdZJl8rs54GVFXokxRdD7ZrQ1TJjxWzOi/xSP25VR3E8tbm3nBZqS+/ylu643qSr/IueABR+jrlqAyACwGEf6w== +metro-babel-transformer@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.66.2.tgz#fce0a3e314d28a5e7141c135665e1cc9b8e7ce86" + integrity sha512-aJ/7fc/Xkofw8Fqa51OTDhBzBz26mmpIWrXAZcPdQ8MSTt883EWncxeCEjasc79NJ89BRi7sOkkaWZo2sXlKvw== dependencies: - "@babel/core" "^7.0.0" - metro-source-map "0.59.0" + "@babel/core" "^7.14.0" + hermes-parser "0.4.7" + metro-source-map "0.66.2" + nullthrows "^1.1.1" -metro-cache@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.59.0.tgz#ef3c055f276933979b731455dc8317d7a66f0f2d" - integrity sha512-ryWNkSnpyADfRpHGb8BRhQ3+k8bdT/bsxMH2O0ntlZYZ188d8nnYWmxbRvFmEzToJxe/ol4uDw0tJFAaQsN8KA== +metro-cache-key@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-cache-key/-/metro-cache-key-0.66.2.tgz#d6463d2a53e887a38419d523962cc24ea0e780b4" + integrity sha512-WtkNmRt41qOpHh1MkNA4nLiQ/m7iGL90ysSKD+fcLqlUnOBKJptPQm0ZUv8Kfqk18ddWX2KmsSbq+Sf3I6XohQ== + +metro-cache@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.66.2.tgz#e0af4e0a319898f7d42a980f7ee5da153fcfd019" + integrity sha512-5QCYJtJOHoBSbL3H4/Fpl36oA697C3oYHqsce+Hk/dh2qtODUGpS3gOBhvP1B8iB+H8jJMyR75lZq129LJEsIQ== dependencies: - jest-serializer "^24.9.0" - metro-core "0.59.0" + metro-core "0.66.2" mkdirp "^0.5.1" rimraf "^2.5.4" -metro-config@0.59.0, metro-config@^0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.59.0.tgz#9844e388069321dd7403e49f0d495a81f9aa0fef" - integrity sha512-MDsknFG9vZ4Nb5VR6OUDmGHaWz6oZg/FtE3up1zVBKPVRTXE1Z+k7zypnPtMXjMh3WHs/Sy4+wU1xnceE/zdnA== +metro-config@0.66.2, metro-config@^0.66.1: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.66.2.tgz#e365acdb66ad0cda0182b9c9910760a97ee4293b" + integrity sha512-0C+PrKKIBNNzLZUKN/8ZDJS2U5FLMOTXDWbvBHIdqb6YXz8WplXR2+xlSlaSCCi5b+GR7cWFWUNeKA4GQS1/AQ== dependencies: cosmiconfig "^5.0.5" - jest-validate "^24.9.0" - metro "0.59.0" - metro-cache "0.59.0" - metro-core "0.59.0" - -metro-core@0.59.0, metro-core@^0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.59.0.tgz#958cde3fe5c8cd84a78e1899af801ad69e9c83b1" - integrity sha512-kb5LKvV5r2pqMEzGyTid8ai2mIjW13NMduQ8oBmfha7/EPTATcTQ//s+bkhAs1toQD8vqVvjAb0cPNjWQEmcmQ== - dependencies: - jest-haste-map "^24.9.0" + jest-validate "^26.5.2" + metro "0.66.2" + metro-cache "0.66.2" + metro-core "0.66.2" + metro-runtime "0.66.2" + +metro-core@0.66.2, metro-core@^0.66.1: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.66.2.tgz#ead776a17b3e5a307e6dc22259db30bf5c7e8490" + integrity sha512-JieLZkef/516yxXYvQxWnf3OWw5rcgWRy76K8JV/wr/i8LGVGulPAXlIi445/QZzXVydzRVASKAEVqyxM5F4mA== + dependencies: + jest-haste-map "^26.5.2" lodash.throttle "^4.1.1" - metro-resolver "0.59.0" - wordwrap "^1.0.0" + metro-resolver "0.66.2" + +metro-hermes-compiler@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-hermes-compiler/-/metro-hermes-compiler-0.66.2.tgz#30290748f83805faa601aa487632444915795823" + integrity sha512-nCVL1g9uR6vrw5+X1wjwZruRyMkndnzGRMqjqoljf+nGEqBTD607CR7elXw4fMWn/EM+1y0Vdq5altUu9LdgCA== -metro-inspector-proxy@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.59.0.tgz#39d1390772d13767fc595be9a1a7074e2425cf8e" - integrity sha512-hPeAuQcofTOH0F+2GEZqWkvkVY1/skezSSlMocDQDaqds+Kw6JgdA7FlZXxnKmQ/jYrWUzff/pl8SUCDwuYthQ== +metro-inspector-proxy@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.66.2.tgz#a83c76bd2f2fd7b9240be92acf9a8b1d1404547a" + integrity sha512-gnLc9121eznwP0iiA9tCBW8qZjwIsCgwHWMF1g1Qaki9le9tzeJv3dK4/lFNGxyfSaLO7vahQEhsEYsiRnTROg== dependencies: connect "^3.6.5" debug "^2.2.0" ws "^1.1.5" - yargs "^14.2.0" + yargs "^15.3.1" -metro-minify-uglify@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.59.0.tgz#6491876308d878742f7b894d7fca4af356886dd5" - integrity sha512-7IzVgCVWZMymgZ/quieg/9v5EQ8QmZWAgDc86Zp9j0Vy6tQTjUn6jlU+YAKW3mfMEjMr6iIUzCD8YklX78tFAw== +metro-minify-uglify@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.66.2.tgz#6061dbee4f61e6d5bb3c100e4379ff6f2e16e42b" + integrity sha512-7TUK+L5CmB5x1PVnFbgmjzHW4CUadq9H5jgp0HfFoWT1skXAyEsx0DHkKDXwnot0khnNhBOEfl62ctQOnE110Q== dependencies: uglify-es "^3.1.9" -metro-react-native-babel-preset@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz#20e020bc6ac9849e1477de1333d303ed42aba225" - integrity sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg== +metro-react-native-babel-preset@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.66.2.tgz#fddebcf413ad4ea617d4f47f7c1da401052de734" + integrity sha512-H/nLBAz0MgfDloSe1FjyH4EnbokHFdncyERvLPXDACY3ROVRCeUyFNo70ywRGXW2NMbrV4H7KUyU4zkfWhC2HQ== dependencies: + "@babel/core" "^7.14.0" "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" @@ -2788,6 +2679,7 @@ metro-react-native-babel-preset@0.59.0: "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" "@babel/plugin-syntax-optional-chaining" "^7.0.0" "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" "@babel/plugin-transform-block-scoping" "^7.0.0" "@babel/plugin-transform-classes" "^7.0.0" "@babel/plugin-transform-computed-properties" "^7.0.0" @@ -2815,12 +2707,12 @@ metro-react-native-babel-preset@0.59.0: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-preset@^0.64.0: - version "0.64.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.64.0.tgz#76861408681dfda3c1d962eb31a8994918c976f8" - integrity sha512-HcZ0RWQRuJfpPiaHyFQJzcym+/dDIVUPwUAXWoub/C4GkGu+mPjp8vqK6g0FxokCnnI2TK0gZTza2IDfiNNscQ== +metro-react-native-babel-preset@^0.67.0: + version "0.67.0" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.67.0.tgz#53aec093f53a09b56236a9bb534d76658efcbec7" + integrity sha512-tgTG4j0SKwLHbLRELMmgkgkjV1biYkWlGGKOmM484/fJC6bpDikdaFhfjsyE+W+qt7I5szbCPCickMTNQ+zwig== dependencies: - "@babel/core" "^7.0.0" + "@babel/core" "^7.14.0" "@babel/plugin-proposal-class-properties" "^7.0.0" "@babel/plugin-proposal-export-default-from" "^7.0.0" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" @@ -2833,6 +2725,7 @@ metro-react-native-babel-preset@^0.64.0: "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" "@babel/plugin-syntax-optional-chaining" "^7.0.0" "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" "@babel/plugin-transform-block-scoping" "^7.0.0" "@babel/plugin-transform-classes" "^7.0.0" "@babel/plugin-transform-computed-properties" "^7.0.0" @@ -2860,109 +2753,144 @@ metro-react-native-babel-preset@^0.64.0: "@babel/template" "^7.0.0" react-refresh "^0.4.0" -metro-react-native-babel-transformer@0.59.0, metro-react-native-babel-transformer@^0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.59.0.tgz#9b3dfd6ad35c6ef37fc4ce4d20a2eb67fabbb4be" - integrity sha512-1O3wrnMq4NcPQ1asEcl9lRDn/t+F1Oef6S9WaYVIKEhg9m/EQRGVrrTVP+R6B5Eeaj3+zNKbzM8Dx/NWy1hUbQ== - dependencies: - "@babel/core" "^7.0.0" - babel-preset-fbjs "^3.3.0" - metro-babel-transformer "0.59.0" - metro-react-native-babel-preset "0.59.0" - metro-source-map "0.59.0" +metro-react-native-babel-transformer@0.66.2, metro-react-native-babel-transformer@^0.66.1: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.66.2.tgz#768f341e7c3d3d1c38189799c9884b90d1c32eb7" + integrity sha512-z1ab7ihIT0pJrwgi9q2IH+LcW/xUWMQ0hH+Mrk7wbKQB0RnJdXFoxphrfoVHBHMUu+TBPetUcEkKawkK1e7Cng== + dependencies: + "@babel/core" "^7.14.0" + babel-preset-fbjs "^3.4.0" + hermes-parser "0.4.7" + metro-babel-transformer "0.66.2" + metro-react-native-babel-preset "0.66.2" + metro-source-map "0.66.2" + nullthrows "^1.1.1" -metro-resolver@0.59.0, metro-resolver@^0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.59.0.tgz#fbc9d7c95f094c52807877d0011feffb9e896fad" - integrity sha512-lbgiumnwoVosffEI96z0FGuq1ejTorHAj3QYUPmp5dFMfitRxLP7Wm/WP9l4ZZjIptxTExsJwuEff1SLRCPD9w== +metro-resolver@0.66.2, metro-resolver@^0.66.1: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.66.2.tgz#f743ddbe7a12dd137d1f7a555732cafcaea421f8" + integrity sha512-pXQAJR/xauRf4kWFj2/hN5a77B4jLl0Fom5I3PHp6Arw/KxSBp0cnguXpGLwNQ6zQC0nxKCoYGL9gQpzMnN7Hw== dependencies: absolute-path "^0.0.0" -metro-source-map@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.59.0.tgz#e9beb9fc51bfb4e060f95820cf1508fc122d23f7" - integrity sha512-0w5CmCM+ybSqXIjqU4RiK40t4bvANL6lafabQ2GP2XD3vSwkLY+StWzCtsb4mPuyi9R/SgoLBel+ZOXHXAH0eQ== +metro-runtime@0.66.2, metro-runtime@^0.66.1: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-runtime/-/metro-runtime-0.66.2.tgz#3409ee957b949b6c7b72ef6ed2b9af9a4f4a910e" + integrity sha512-vFhKBk2ot9FS4b+2v0OTa/guCF/QDAOJubY0CNg7PzCS5+w4y3IvZIcPX4SSS1t8pYEZBLvtdtTDarlDl81xmg== + +metro-source-map@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.66.2.tgz#b5304a282a5d55fa67b599265e9cf3217175cdd7" + integrity sha512-038tFmB7vSh73VQcDWIbr5O1m+WXWyYafDaOy+1A/2K308YP0oj33gbEgDnZsLZDwcJ+xt1x6KUEBIzlX4YGeQ== dependencies: - "@babel/traverse" "^7.0.0" + "@babel/traverse" "^7.14.0" "@babel/types" "^7.0.0" invariant "^2.2.4" - metro-symbolicate "0.59.0" - ob1 "0.59.0" + metro-symbolicate "0.66.2" + nullthrows "^1.1.1" + ob1 "0.66.2" source-map "^0.5.6" vlq "^1.0.0" -metro-symbolicate@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.59.0.tgz#fc7f93957a42b02c2bfc57ed1e8f393f5f636a54" - integrity sha512-asLaF2A7rndrToGFIknL13aiohwPJ95RKHf0NM3hP/nipiLDoMzXT6ZnQvBqDxkUKyP+51AI75DMtb+Wcyw4Bw== +metro-symbolicate@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.66.2.tgz#addd095ce5f77e73ca21ddb5dfb396ff5d4fa041" + integrity sha512-u+DeQHyAFXVD7mVP+GST/894WHJ3i/U8oEJFnT7U3P52ZuLgX8n4tMNxhqZU12RcLR6etF8143aP0Ktx1gFLEQ== dependencies: invariant "^2.2.4" - metro-source-map "0.59.0" + metro-source-map "0.66.2" + nullthrows "^1.1.1" source-map "^0.5.6" through2 "^2.0.1" vlq "^1.0.0" -metro@0.59.0, metro@^0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/metro/-/metro-0.59.0.tgz#64a87cd61357814a4f279518e0781b1eab5934b8" - integrity sha512-OpVgYXyuTvouusFZQJ/UYKEbwfLmialrSCUUTGTFaBor6UMUHZgXPYtK86LzesgMqRc8aiuTQVO78iKW2Iz3wg== +metro-transform-plugins@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-transform-plugins/-/metro-transform-plugins-0.66.2.tgz#39dd044a23b1343e4f2d2ec34d08128cdf255ed4" + integrity sha512-KTvqplh0ut7oDKovvDG6yzXM02R6X+9b2oVG+qYq8Zd3aCGTi51ASx4ThCNkAHyEvCuJdYg9fxXTL+j+wvhB5w== + dependencies: + "@babel/core" "^7.14.0" + "@babel/generator" "^7.14.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.14.0" + nullthrows "^1.1.1" + +metro-transform-worker@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro-transform-worker/-/metro-transform-worker-0.66.2.tgz#0a8455992132c479721accd52c9bd47deb77769e" + integrity sha512-dO4PtYOMGB7Vzte8aIzX39xytODhmbJrBYPu+zYzlDjyefJZT7BkZ0LkPIThtyJi96xWcGqi9JBSo0CeRupAHw== + dependencies: + "@babel/core" "^7.14.0" + "@babel/generator" "^7.14.0" + "@babel/parser" "^7.14.0" + "@babel/types" "^7.0.0" + babel-preset-fbjs "^3.4.0" + metro "0.66.2" + metro-babel-transformer "0.66.2" + metro-cache "0.66.2" + metro-cache-key "0.66.2" + metro-hermes-compiler "0.66.2" + metro-source-map "0.66.2" + metro-transform-plugins "0.66.2" + nullthrows "^1.1.1" + +metro@0.66.2, metro@^0.66.1: + version "0.66.2" + resolved "https://registry.yarnpkg.com/metro/-/metro-0.66.2.tgz#f21759bf00995470e7577b5b88a5277963f24492" + integrity sha512-uNsISfcQ3iKKSHoN5Q+LAh0l3jeeg7ZcNZ/4BAHGsk02erA0OP+l2m+b5qYVoPptHz9Oc3KyG5oGJoTu41pWjg== dependencies: "@babel/code-frame" "^7.0.0" - "@babel/core" "^7.0.0" - "@babel/generator" "^7.5.0" - "@babel/parser" "^7.0.0" - "@babel/plugin-external-helpers" "^7.0.0" + "@babel/core" "^7.14.0" + "@babel/generator" "^7.14.0" + "@babel/parser" "^7.14.0" "@babel/template" "^7.0.0" - "@babel/traverse" "^7.0.0" + "@babel/traverse" "^7.14.0" "@babel/types" "^7.0.0" absolute-path "^0.0.0" + accepts "^1.3.7" async "^2.4.0" - babel-preset-fbjs "^3.3.0" - buffer-crc32 "^0.2.13" - chalk "^2.4.1" + chalk "^4.0.0" ci-info "^2.0.0" - concat-stream "^1.6.0" connect "^3.6.5" debug "^2.2.0" denodeify "^1.2.1" error-stack-parser "^2.0.6" - eventemitter3 "^3.0.0" - fbjs "^1.0.0" fs-extra "^1.0.0" graceful-fs "^4.1.3" + hermes-parser "0.4.7" image-size "^0.6.0" invariant "^2.2.4" - jest-haste-map "^24.9.0" - jest-worker "^24.9.0" - json-stable-stringify "^1.0.1" + jest-haste-map "^26.5.2" + jest-worker "^26.0.0" lodash.throttle "^4.1.1" - merge-stream "^1.0.1" - metro-babel-register "0.59.0" - metro-babel-transformer "0.59.0" - metro-cache "0.59.0" - metro-config "0.59.0" - metro-core "0.59.0" - metro-inspector-proxy "0.59.0" - metro-minify-uglify "0.59.0" - metro-react-native-babel-preset "0.59.0" - metro-resolver "0.59.0" - metro-source-map "0.59.0" - metro-symbolicate "0.59.0" - mime-types "2.1.11" + metro-babel-register "0.66.2" + metro-babel-transformer "0.66.2" + metro-cache "0.66.2" + metro-cache-key "0.66.2" + metro-config "0.66.2" + metro-core "0.66.2" + metro-hermes-compiler "0.66.2" + metro-inspector-proxy "0.66.2" + metro-minify-uglify "0.66.2" + metro-react-native-babel-preset "0.66.2" + metro-resolver "0.66.2" + metro-runtime "0.66.2" + metro-source-map "0.66.2" + metro-symbolicate "0.66.2" + metro-transform-plugins "0.66.2" + metro-transform-worker "0.66.2" + mime-types "^2.1.27" mkdirp "^0.5.1" node-fetch "^2.2.0" nullthrows "^1.1.1" - resolve "^1.5.0" rimraf "^2.5.4" serialize-error "^2.1.0" source-map "^0.5.6" - strip-ansi "^4.0.0" + strip-ansi "^6.0.0" temp "0.8.3" - throat "^4.1.0" - wordwrap "^1.0.0" + throat "^5.0.0" ws "^1.1.5" - xpipe "^1.0.5" - yargs "^14.2.0" + yargs "^15.3.1" micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" @@ -2983,29 +2911,25 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -mime-db@1.47.0, "mime-db@>= 1.43.0 < 2": - version "1.47.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c" - integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw== - -mime-db@~1.23.0: - version "1.23.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.23.0.tgz#a31b4070adaea27d732ea333740a64d0ec9a6659" - integrity sha1-oxtAcK2uon1zLqMzdApk0OyaZlk= - -mime-types@2.1.11: - version "2.1.11" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.11.tgz#c259c471bda808a85d6cd193b430a5fae4473b3c" - integrity sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw= +micromatch@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== dependencies: - mime-db "~1.23.0" + braces "^3.0.1" + picomatch "^2.2.3" -mime-types@~2.1.24: - version "2.1.30" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d" - integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg== +mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-types@^2.1.27, mime-types@~2.1.24: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== dependencies: - mime-db "1.47.0" + mime-db "1.51.0" mime@1.6.0: version "1.6.0" @@ -3013,16 +2937,16 @@ mime@1.6.0: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -minimatch@^3.0.4: +minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -3054,25 +2978,15 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nanomatch@^1.2.9: version "1.2.13" @@ -3096,6 +3010,11 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +neo-async@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -3106,38 +3025,34 @@ nocache@^2.1.0: resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.1.0.tgz#120c9ffec43b5729b1d5de88cd71aa75a0ba491f" integrity sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q== -node-fetch@^1.0.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" - integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== +node-dir@^0.1.17: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" + minimatch "^3.0.2" node-fetch@^2.2.0, node-fetch@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-releases@^1.1.71: - version "1.1.71" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" - integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== node-stream-zip@^1.9.1: - version "1.13.3" - resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.13.3.tgz#63235337abebcef408b244b4e28f28961e6e86f0" - integrity sha512-Vv95ug+8Jfug4AxcqNV7TeGEk2antNidj+YBOyP8SS8LTHJmjsE3d9h6L831eJtO8p7jesJ3CDtgkwmLO/wcSw== + version "1.15.0" + resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" + integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== normalize-path@^2.1.1: version "2.1.1" @@ -3146,6 +3061,11 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -3158,12 +3078,12 @@ nullthrows@^1.1.1: resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== -ob1@0.59.0: - version "0.59.0" - resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.59.0.tgz#ee103619ef5cb697f2866e3577da6f0ecd565a36" - integrity sha512-opXMTxyWJ9m68ZglCxwo0OPRESIC/iGmKFPXEXzMZqsVIrgoRXOHmoMDkQzz4y3irVjbyPJRAh5pI9fd0MJTFQ== +ob1@0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.66.2.tgz#8caf548202cf2688944bae47db405a08bca17a61" + integrity sha512-RFewnL/RjE0qQBOuM+2bbY96zmJPIge/aDtsiDbLSb+MOiK8CReAhBHDgL+zrA3F1hQk00lMWpUwYcep750plA== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -3256,7 +3176,7 @@ ora@^3.4.0: strip-ansi "^5.2.0" wcwidth "^1.0.1" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -3300,11 +3220,6 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-node-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -3335,10 +3250,20 @@ path-key@^2.0.0, path-key@^2.0.1: resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^4.0.1: version "4.0.1" @@ -3346,11 +3271,9 @@ pify@^4.0.1: integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pirates@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^3.0.0: version "3.0.0" @@ -3366,63 +3289,34 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -plist@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.2.tgz#74bbf011124b90421c22d15779cee60060ba95bc" - integrity sha512-MSrkwZBdQ6YapHy87/8hDU8MnIcyxBKjeF+McXnr5A9MtffPewTs7G3hlpodT5TacyfIyFTaJEhh3GGcmasTgQ== +plist@^3.0.2, plist@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.4.tgz#a62df837e3aed2bb3b735899d510c4f186019cbe" + integrity sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg== dependencies: base64-js "^1.5.1" xmlbuilder "^9.0.7" - xmldom "^0.5.0" - -plugin-error@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" - integrity sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= - dependencies: - ansi-cyan "^0.1.1" - ansi-red "^0.1.1" - arr-diff "^1.0.1" - arr-union "^2.0.1" - extend-shallow "^1.1.2" posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -pretty-format@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" - integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== - dependencies: - "@jest/types" "^24.9.0" - ansi-regex "^4.0.0" - ansi-styles "^3.2.0" - react-is "^16.8.4" - -pretty-format@^25.1.0, pretty-format@^25.2.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== +pretty-format@^26.5.2, pretty-format@^26.6.2: + version "26.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" + integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== dependencies: - "@jest/types" "^25.5.0" + "@jest/types" "^26.6.2" ansi-regex "^5.0.0" ansi-styles "^4.0.0" - react-is "^16.12.0" + react-is "^17.0.1" process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - promise@^8.0.3: version "8.1.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" @@ -3430,19 +3324,22 @@ promise@^8.0.3: dependencies: asap "~2.0.6" -prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== +prompts@^2.4.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" - react-is "^16.8.1" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + react-is "^16.13.1" pump@^3.0.0: version "3.0.0" @@ -3457,67 +3354,83 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -react-devtools-core@^4.6.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.13.0.tgz#fa80ee03b1a975c1d9898e24de841e45a4b22d30" - integrity sha512-KR+0pLw8wTjOVr+9AECe5ctmycaAjbmxN3bbdB0vmlwm0JkxNnKMxDzanf+4V8IuPBQWgm8qdWpbSOqhu1l14g== +react-devtools-core@4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.19.1.tgz#bc37c2ef2f48f28c6af4c7292be9dca1b63deace" + integrity sha512-2wJiGffPWK0KggBjVwnTaAk+Z3MSxKInHmdzPTrBh1mAarexsa93Kw+WMX88+XjN+TtYgAiLe9xeTqcO5FfJTw== dependencies: shell-quote "^1.6.1" ws "^7" -react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4: +react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-native@0.63.4: - version "0.63.4" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.63.4.tgz#2210fdd404c94a5fa6b423c6de86f8e48810ec36" - integrity sha512-I4kM8kYO2mWEYUFITMcpRulcy4/jd+j9T6PbIzR0FuMcz/xwd+JwHoLPa1HmCesvR1RDOw9o4D+OFLwuXXfmGw== +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +react-native-codegen@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.8.tgz#b7796a54074139d956fff2862cf1285db43c891b" + integrity sha512-k/944+0XD+8l7zDaiKfYabyEKmAmyZgS1mj+4LcSRPyHnrjgCHKrh/Y6jM6kucQ6xU1+1uyMmF/dSkikxK8i+Q== dependencies: - "@babel/runtime" "^7.0.0" - "@react-native-community/cli" "^4.10.0" - "@react-native-community/cli-platform-android" "^4.10.0" - "@react-native-community/cli-platform-ios" "^4.10.0" + flow-parser "^0.121.0" + jscodeshift "^0.11.0" + nullthrows "^1.1.1" + +react-native@^0.67.2: + version "0.67.2" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.67.2.tgz#312224bc2271c3cecd374d4bc425619cff4ea5dc" + integrity sha512-grEtpOLLvtSg8Bivg0ffVRCjTkresqMt7Jdog/geF6VAYhb4RnLaaUCWvyrfyB9buf135FKnqg5BIuve/XQNXA== + dependencies: + "@jest/create-cache-key-function" "^27.0.1" + "@react-native-community/cli" "^6.0.0" + "@react-native-community/cli-platform-android" "^6.0.0" + "@react-native-community/cli-platform-ios" "^6.0.0" + "@react-native/assets" "1.0.0" + "@react-native/normalize-color" "2.0.0" + "@react-native/polyfills" "2.0.0" abort-controller "^3.0.0" anser "^1.4.9" base64-js "^1.1.2" event-target-shim "^5.0.1" - fbjs "^1.0.0" - fbjs-scripts "^1.1.0" - hermes-engine "~0.5.0" + hermes-engine "~0.9.0" invariant "^2.2.4" - jsc-android "^245459.0.0" - metro-babel-register "0.59.0" - metro-react-native-babel-transformer "0.59.0" - metro-source-map "0.59.0" + jsc-android "^250230.2.1" + metro-react-native-babel-transformer "0.66.2" + metro-runtime "0.66.2" + metro-source-map "0.66.2" nullthrows "^1.1.1" - pretty-format "^24.9.0" + pretty-format "^26.5.2" promise "^8.0.3" prop-types "^15.7.2" - react-devtools-core "^4.6.0" + react-devtools-core "4.19.1" + react-native-codegen "^0.0.8" react-refresh "^0.4.0" regenerator-runtime "^0.13.2" - scheduler "0.19.1" + scheduler "^0.20.2" stacktrace-parser "^0.1.3" use-subscription "^1.0.0" whatwg-fetch "^3.0.0" + ws "^6.1.4" react-refresh@^0.4.0: version "0.4.3" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== -react@16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" - integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== +react@^17.0.2: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" - prop-types "^15.6.2" -readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@~2.3.6: +readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -3530,22 +3443,37 @@ readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== +readline@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c" + integrity sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw= + +recast@^0.20.3: + version "0.20.5" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.20.5.tgz#8e2c6c96827a1b339c634dd232957d230553ceae" + integrity sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ== dependencies: - regenerate "^1.4.0" + ast-types "0.14.2" + esprima "~4.0.0" + source-map "~0.6.1" + tslib "^2.0.1" + +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== + dependencies: + regenerate "^1.4.2" -regenerate@^1.4.0: +regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== regenerator-transform@^0.14.2: version "0.14.5" @@ -3563,26 +3491,26 @@ regex-not@^1.0.0, regex-not@^1.0.2: safe-regex "^1.1.0" regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.5.1: + version "4.8.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== dependencies: jsesc "~0.5.0" @@ -3612,9 +3540,9 @@ require-main-filename@^2.0.0: integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== reselect@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" - integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== + version "4.1.5" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.5.tgz#852c361247198da6756d07d9296c2b51eddb79f6" + integrity sha512-uVdlz8J7OO+ASpBYoz1Zypgx0KasCY20H+N8JD13oUMtPvSHQuscrHop4KbXrbsBcdB9Ds7lVK7eRkBIfO43vQ== resolve-from@^3.0.0: version "3.0.0" @@ -3626,13 +3554,14 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.13.1, resolve@^1.14.2, resolve@^1.5.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== +resolve@^1.13.1, resolve@^1.14.2: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^2.0.0: version "2.0.0" @@ -3659,28 +3588,18 @@ rimraf@~2.2.6: resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -3693,11 +3612,6 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - sane@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" @@ -3718,10 +3632,10 @@ sax@^1.2.1: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -3731,7 +3645,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^5.1.0, semver@^5.5.0, semver@^5.6.0: +semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -3741,10 +3655,10 @@ semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" + integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== dependencies: debug "2.6.9" depd "~1.1.2" @@ -3753,9 +3667,9 @@ send@0.17.1: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.7.2" + http-errors "1.8.1" mime "1.6.0" - ms "2.1.1" + ms "2.1.3" on-finished "~2.3.0" range-parser "~1.2.1" statuses "~1.5.0" @@ -3766,14 +3680,14 @@ serialize-error@^2.1.0: integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= serve-static@^1.13.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + version "1.14.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" + integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" + send "0.17.2" set-blocking@^2.0.0: version "2.0.0" @@ -3790,15 +3704,10 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" @@ -3830,28 +3739,28 @@ shell-quote@1.6.1: jsonify "~0.0.0" shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== simple-plist@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.1.1.tgz#54367ca28bc5996a982c325c1c4a4c1a05f4047c" - integrity sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.0.tgz#f451997663eafd8ea6bad353a01caf49ef186d43" + integrity sha512-uYWpeGFtZtVt2NhG4AHgpwx323zxD85x42heMJBan1qAiqqozIlaGrwrEt6kRjXWRWIXsuV1VLCvVmZan2B5dg== dependencies: - bplist-creator "0.0.8" - bplist-parser "0.2.0" - plist "^3.0.1" + bplist-creator "0.1.0" + bplist-parser "0.3.0" + plist "^3.0.4" -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" @@ -3909,9 +3818,9 @@ source-map-resolve@^0.5.0: urix "^0.1.0" source-map-support@^0.5.16: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -3948,13 +3857,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -stack-utils@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" - integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== - dependencies: - escape-string-regexp "^2.0.0" - stackframe@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" @@ -3980,36 +3882,19 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -stream-buffers@~2.2.0: +stream-buffers@2.2.x: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= -string-width@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" string_decoder@~1.1.1: version "1.1.1" @@ -4018,26 +3903,19 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.0.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^5.0.0" + ansi-regex "^5.0.1" strip-eof@^1.0.0: version "1.0.0" @@ -4056,20 +3934,18 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -4078,12 +3954,19 @@ temp@0.8.3: os-tmpdir "^1.0.0" rimraf "~2.2.6" -throat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= +temp@^0.8.1: + version "0.8.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" + integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== + dependencies: + rimraf "~2.6.2" + +throat@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -through2@^2.0.0, through2@^2.0.1: +through2@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -4091,27 +3974,10 @@ through2@^2.0.0, through2@^2.0.1: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" @@ -4133,6 +3999,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -4143,26 +4016,26 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + +tslib@^2.0.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== type-fest@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -ua-parser-js@^0.7.18: - version "0.7.28" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31" - integrity sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g== - uglify-es@^3.1.9: version "3.3.9" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" @@ -4176,28 +4049,28 @@ ultron@1.0.x: resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== union-value@^1.0.0: version "1.0.1" @@ -4270,11 +4143,11 @@ vlq@^1.0.0: integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: - makeerror "1.0.x" + makeerror "1.0.12" wcwidth@^1.0.1: version "1.0.1" @@ -4283,11 +4156,24 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0: +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +whatwg-fetch@^3.0.0: version "3.6.2" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -4300,20 +4186,6 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -4328,6 +4200,15 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +write-file-atomic@^2.3.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + ws@^1.1.0, ws@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" @@ -4336,10 +4217,17 @@ ws@^1.1.0, ws@^1.1.5: options ">=0.0.5" ultron "1.0.x" +ws@^6.1.4: + version "6.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.2.tgz#dd5cdbd57a9979916097652d78f1cc5faea0c32e" + integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== + dependencies: + async-limiter "~1.0.0" + ws@^7: - version "7.4.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.5.tgz#a484dd851e9beb6fdb420027e3885e8ce48986c1" - integrity sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g== + version "7.5.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" + integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== xcode@^2.0.0: version "2.1.0" @@ -4361,16 +4249,6 @@ xmldoc@^1.1.2: dependencies: sax "^1.2.1" -xmldom@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.5.0.tgz#193cb96b84aa3486127ea6272c4596354cb4962e" - integrity sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA== - -xpipe@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" - integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98= - xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -4381,19 +4259,6 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yargs-parser@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" - integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -4402,24 +4267,7 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^14.2.0: - version "14.2.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" - integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.1" - -yargs@^15.1.0: +yargs@^15.1.0, yargs@^15.3.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== diff --git a/js/react_native/package.json b/js/react_native/package.json index 280693f36ad46..336e24b646228 100644 --- a/js/react_native/package.json +++ b/js/react_native/package.json @@ -1,111 +1,91 @@ { - "react-native": "lib/index", - "module": "dist/module/index", + "react-native": "lib/index", + "module": "dist/module/index", "jest": { "modulePathIgnorePatterns": [ - "/example/node_modules", + "/example/node_modules", "/dist/" - ], + ], "preset": "react-native" - }, + }, "keywords": [ - "react-native", - "ios", - "android", - "ONNX", - "ONNXRuntime", + "react-native", + "ios", + "android", + "ONNX", + "ONNXRuntime", "ONNX Runtime" - ], + ], "devDependencies": { - "@release-it/conventional-changelog": "^3.3.0", "@types/fs-extra": "^9.0.11", - "@types/jest": "^27.0.3", - "@types/react": "^17.0.37", - "@types/react-native": "0.66.8", - "jest": "^27.4.3", - "pod-install": "^0.1.0", + "@types/jest": "^27.4.0", + "@types/react": "^17.0.38", + "@types/react-native": "^0.66.15", + "jest": "^27.4.7", + "pod-install": "^0.1.31", "prettier": "^2.0.5", - "react": "17.0.2", - "react-native": "0.66.3", + "react": "^17.0.2", + "react-native": "^0.67.2", "react-native-builder-bob": "^0.18.2", - "release-it": "^14.2.2", - "typescript": "^4.1.3" + "typescript": "^4.5.5" }, "peerDependencies": { - "react": "*", + "react": "*", "react-native": "*" - }, - "author": "ONNX Runtime", + }, + "author": "ONNX Runtime", "publishConfig": { "registry": "https://registry.npmjs.org/" - }, - "source": "lib/index", - "version": "1.11.0", - "release-it": { - "npm": { - "publish": true - }, - "git": { - "commitMessage": "chore: release ${version}", - "tagName": "v${version}" - }, - "plugins": { - "@release-it/conventional-changelog": { - "preset": "angular" - } - }, - "github": { - "release": true - } - }, - "main": "dist/commonjs/index", - "homepage": "https://github.com/Microsoft/onnxruntime/js/react_native#readme", + }, + "source": "lib/index", + "version": "1.11.0", + "main": "dist/commonjs/index", + "homepage": "https://github.com/Microsoft/onnxruntime/js/react_native#readme", "files": [ - "lib", - "dist", - "android", - "ios/*.h", - "ios/*.mm", - "onnxruntime-react-native.podspec", - "!dist/commonjs/*.js.map", - "!dist/module/*.js.map", - "!android/.gitignore", - "!android/.idea", + "lib", + "dist", + "android", + "ios/*.h", + "ios/*.mm", + "onnxruntime-react-native.podspec", + "!dist/commonjs/*.js.map", + "!dist/module/*.js.map", + "!android/.gitignore", + "!android/.idea", "!android/build" - ], - "description": "Onnxruntime bridge for react native", - "repository": "https://github.com/Microsoft/onnxruntime.git", + ], + "description": "Onnxruntime bridge for react native", + "repository": "https://github.com/Microsoft/onnxruntime.git", "react-native-builder-bob": { - "source": "lib", + "source": "lib", "targets": [ - "commonjs", - "module", + "commonjs", + "module", [ - "typescript", + "typescript", { "project": "tsconfig.build.json" } ] - ], + ], "output": "dist" - }, + }, "dependencies": { - "buffer": "^6.0.3", + "buffer": "^6.0.3", "onnxruntime-common": "file:../common" - }, + }, "scripts": { - "typescript": "tsc --noEmit", - "prepare": "bob build", - "bootstrap": "yarn example && yarn && yarn pods", - "release": "release-it", - "test": "jest", - "prepack": "tsc --build ./tsconfig.scripts.json && node ./scripts/prepack", - "pods": "cd example && pod-install --quiet", + "typescript": "tsc --noEmit", + "prepare": "bob build", + "bootstrap": "yarn example && yarn && yarn pods", + "test": "jest", + "prepack": "tsc --build ./tsconfig.scripts.json && node ./scripts/prepack", + "pods": "cd example && pod-install --quiet", "example": "yarn --cwd example" - }, - "types": "dist/typescript/index.d.ts", - "name": "onnxruntime-react-native", - "license": "MIT", + }, + "types": "dist/typescript/index.d.ts", + "name": "onnxruntime-react-native", + "license": "MIT", "bugs": { "url": "https://github.com/Microsoft/onnxruntime/issues" } diff --git a/js/react_native/yarn.lock b/js/react_native/yarn.lock index c1683a8239064..d270f2a69f11b 100644 --- a/js/react_native/yarn.lock +++ b/js/react_native/yarn.lock @@ -2,32 +2,32 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" - integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== - dependencies: - "@babel/highlight" "^7.16.0" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" - integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== - -"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" - integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-compilation-targets" "^7.16.0" - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helpers" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" + integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== + +"@babel/core@^7.1.0", "@babel/core@^7.1.6", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" + integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.12" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -35,64 +35,65 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.14.0", "@babel/generator@^7.16.0", "@babel/generator@^7.7.2": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" - integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== +"@babel/generator@^7.14.0", "@babel/generator@^7.16.8", "@babel/generator@^7.7.2": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.8" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" - integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882" - integrity sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.3": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" - integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== dependencies: - "@babel/compat-data" "^7.16.0" - "@babel/helper-validator-option" "^7.14.5" + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b" - integrity sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-member-expression-to-functions" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - -"@babel/helper-create-regexp-features-plugin@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" - integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" + integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz#c5b10cf4b324ff840140bb07e05b8564af2ae971" - integrity sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg== +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -103,101 +104,109 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" - integrity sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ== +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" - integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== dependencies: - "@babel/helper-get-function-arity" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-get-function-arity@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" - integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== dependencies: - "@babel/types" "^7.16.0" + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-hoist-variables@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" - integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" - integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" - integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" - integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== - dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-simple-access" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/helper-validator-identifier" "^7.15.7" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" -"@babel/helper-optimise-call-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" - integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== dependencies: - "@babel/types" "^7.16.0" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== -"@babel/helper-remap-async-to-generator@^7.16.0", "@babel/helper-remap-async-to-generator@^7.16.4": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz#5d7902f61349ff6b963e07f06a389ce139fbfe6e" - integrity sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA== +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-wrap-function" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" -"@babel/helper-replace-supers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" - integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" - integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" @@ -206,207 +215,207 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" - integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== -"@babel/helper-wrap-function@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz#b3cf318afce774dfe75b86767cd6d68f3482e57c" - integrity sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g== +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== dependencies: - "@babel/helper-function-name" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" -"@babel/helpers@^7.16.0": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c" - integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w== +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== dependencies: - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.3" - "@babel/types" "^7.16.0" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/highlight@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== +"@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.16.3", "@babel/parser@^7.7.2": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e" - integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng== +"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7": + version "7.16.12" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" + integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2": - version "7.16.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" - integrity sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" - integrity sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" -"@babel/plugin-proposal-async-generator-functions@^7.16.4": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz#e606eb6015fec6fa5978c940f315eae4e300b081" - integrity sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg== +"@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.16.4" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz#c029618267ddebc7280fa286e0f8ca2a278a2d1a" - integrity sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A== +"@babel/plugin-proposal-class-properties@^7.0.0", "@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.12.1", "@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-class-static-block@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz#5296942c564d8144c83eea347d0aa8a0b89170e7" - integrity sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA== +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" + integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz#783eca61d50526202f9b296095453977e88659f1" - integrity sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ== +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.0.tgz#f8a07008ffcb0d3de4945f3eb52022ecc28b56ad" - integrity sha512-kFAhaIbh5qbBwETRNa/cgGmPJ/BicXhIyrZhAkyYhf/Z9LXCTRGO1mvUwczto0Hl1q4YtzP9cRtTKT4wujm38Q== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.16.7.tgz#a40ab158ca55627b71c5513f03d3469026a9e929" + integrity sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-export-default-from" "^7.16.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-default-from" "^7.16.7" -"@babel/plugin-proposal-export-namespace-from@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz#9c01dee40b9d6b847b656aaf4a3976a71740f222" - integrity sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA== +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz#cae35a95ed1d2a7fa29c4dc41540b84a72e9ab25" - integrity sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg== +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz#a711b8ceb3ffddd3ef88d3a49e86dbd3cc7db3fd" - integrity sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz#44e1cce08fe2427482cf446a91bb451528ed0596" - integrity sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.1.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz#5d418e4fbbf8b9b7d03125d3a52730433a373734" - integrity sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q== +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz#5fb32f6d924d6e6712810362a60e12a2609872e6" - integrity sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg== +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== dependencies: - "@babel/compat-data" "^7.16.0" - "@babel/helper-compilation-targets" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.0" + "@babel/plugin-transform-parameters" "^7.16.7" -"@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz#5910085811ab4c28b00d6ebffa4ab0274d1e5f16" - integrity sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw== +"@babel/plugin-proposal-optional-catch-binding@^7.0.0", "@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz#56dbc3970825683608e9efb55ea82c2a2d6c8dc0" - integrity sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg== +"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.1.0", "@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz#b4dafb9c717e4301c5776b30d080d6383c89aff6" - integrity sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg== +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-private-property-in-object@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz#69e935b2c5c79d2488112d886f0c4e2790fee76f" - integrity sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw== +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz#890482dfc5ea378e42e19a71e709728cabf18612" - integrity sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g== +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -443,12 +452,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.0.tgz#648520667776781f9a0da178f245fff85bc9e36f" - integrity sha512-xllLOdBj77mFSw8s02I+2SSQGHOftbWTlGmagheuNk/gjQsk7IrYsR/EosXVAVpgIUFffLckB/iPRioQYLHSrQ== +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.16.7.tgz#fa89cf13b60de2c3f79acdc2b52a21174c6de060" + integrity sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" @@ -457,12 +466,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.16.0", "@babel/plugin-syntax-flow@^7.2.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.0.tgz#07427021d093ed77019408221beaf0272bbcfaec" - integrity sha512-dH91yCo0RyqfzWgoM5Ji9ir8fQ+uFbt9KHM3d2x4jZOuHS6wNA+CRmRUP/BWCsHG2bjc7A2Way6AvH1eQk0wig== +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.16.7", "@babel/plugin-syntax-flow@^7.2.0": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.7.tgz#202b147e5892b8452bbb0bb269c7ed2539ab8832" + integrity sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -478,12 +487,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz#f9624394317365a9a88c82358d3f8471154698f1" - integrity sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg== +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" + integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -541,370 +550,372 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.0", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz#2feeb13d9334cc582ea9111d3506f773174179bb" - integrity sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ== +"@babel/plugin-syntax-typescript@^7.16.7", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" + integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e" - integrity sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA== +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz#df12637f9630ddfa0ef9d7a11bc414d629d38604" - integrity sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw== +"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.16.0" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz#c618763233ad02847805abcac4c345ce9de7145d" - integrity sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg== +"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz#bcf433fb482fe8c3d3b4e8a66b1c4a8e77d37c16" - integrity sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw== +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz#54cf5ff0b2242c6573d753cd4bfc7077a8b282f5" - integrity sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ== +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz#e0c385507d21e1b0b076d66bed6d5231b85110b7" - integrity sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw== +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz#ad3d7e74584ad5ea4eadb1e6642146c590dee33c" - integrity sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q== +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-dotall-regex@^7.16.0", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz#50bab00c1084b6162d0a58a818031cf57798e06f" - integrity sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw== +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz#8bc2e21813e3e89e5e5bf3b60aa5fc458575a176" - integrity sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ== +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz#a180cd2881e3533cef9d3901e48dad0fbeff4be4" - integrity sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw== +"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.0.tgz#edd968dc2041c1b69e451a262e948d6654a79dc2" - integrity sha512-vs/F5roOaO/+WxKfp9PkvLsAyj0G+Q0zbFimHm9X2KDgabN2XmNFoAafmeGEYspUlIF9+MvVmyek9UyHiqeG/w== +"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.7.tgz#291fb140c78dabbf87f2427e7c7c332b126964b8" + integrity sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-flow" "^7.16.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-flow" "^7.16.7" -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2" - integrity sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ== +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz#02e3699c284c6262236599f751065c5d5f1f400e" - integrity sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg== +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== dependencies: - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz#79711e670ffceb31bd298229d50f3621f7980cac" - integrity sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ== +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz#5251b4cce01eaf8314403d21aedb269d79f5e64b" - integrity sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg== +"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-amd@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e" - integrity sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw== +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== dependencies: - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz#add58e638c8ddc4875bd9a9ecb5c594613f6c922" - integrity sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ== +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.1.0", "@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== dependencies: - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz#a92cf240afeb605f4ca16670453024425e421ea4" - integrity sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg== +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== dependencies: - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz#195f26c2ad6d6a391b70880effce18ce625e06a7" - integrity sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg== +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== dependencies: - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz#d3db61cc5d5b97986559967cd5ea83e5c32096ca" - integrity sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-new-target@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz#af823ab576f752215a49937779a41ca65825ab35" - integrity sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw== +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-object-assign@^7.0.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.0.tgz#750c726397f1f6402fb1ceffe9d8ff3595c8a0df" - integrity sha512-TftKY6Hxo5Uf/EIoC3BKQyLvlH46tbtK4xub90vzi9+yS8z1+O/52YHyywCZvYeLPOvv//1j3BPokLuHTWPcbg== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.16.7.tgz#5fe08d63dccfeb6a33aa2638faf98e5c584100f8" + integrity sha512-R8mawvm3x0COTJtveuoqZIjNypn2FjfvXZr4pSQ8VhEFBuQGBz4XhHasZtHXjgXU4XptZ4HtGof3NoYc93ZH9Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz#fb20d5806dc6491a06296ac14ea8e8d6fedda72b" - integrity sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg== +"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.16.0", "@babel/plugin-transform-parameters@^7.16.3": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz#fa9e4c874ee5223f891ee6fa8d737f4766d31d15" - integrity sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w== +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz#a95c552189a96a00059f6776dc4e00e3690c78d1" - integrity sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ== +"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz#9a0ad8aa8e8790883a7bd2736f66229a58125676" - integrity sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg== +"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" + integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-jsx-development@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz#1cb52874678d23ab11d0d16488d54730807303ef" - integrity sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw== +"@babel/plugin-transform-react-jsx-development@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" + integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.0" + "@babel/plugin-transform-react-jsx" "^7.16.7" "@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.0.tgz#09202158abbc716a08330f392bfb98d6b9acfa0c" - integrity sha512-97yCFY+2GvniqOThOSjPor8xUoDiQ0STVWAQMl3pjhJoFVe5DuXDLZCRSZxu9clx+oRCbTiXGgKEG/Yoyo6Y+w== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz#f432ad0cba14c4a1faf44f0076c69e42a4d4479e" + integrity sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.0.tgz#d40c959d7803aae38224594585748693e84c0a22" - integrity sha512-8yvbGGrHOeb/oyPc9tzNoe9/lmIjz3HLa9Nc5dMGDyNpGjfFrk8D2KdEq9NRkftZzeoQEW6yPQ29TMZtrLiUUA== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz#1879c3f23629d287cc6186a6c683154509ec70c0" + integrity sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz#55b797d4960c3de04e07ad1c0476e2bc6a4889f1" - integrity sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw== +"@babel/plugin-transform-react-jsx@^7.0.0", "@babel/plugin-transform-react-jsx@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz#86a6a220552afd0e4e1f0388a68a372be7add0d4" + integrity sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-jsx" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-jsx" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/plugin-transform-react-pure-annotations@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz#23db6ddf558d8abde41b8ad9d59f48ad5532ccab" - integrity sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA== +"@babel/plugin-transform-react-pure-annotations@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" + integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4" - integrity sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg== +"@babel/plugin-transform-regenerator@^7.0.0", "@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz#fff4b9dcb19e12619394bda172d14f2d04c0379c" - integrity sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg== +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-runtime@^7.0.0": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz#f9ba3c7034d429c581e1bd41b4952f3db3c2c7e8" - integrity sha512-pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A== + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz#53d9fd3496daedce1dd99639097fa5d14f4c7c2c" + integrity sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w== dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-corejs3 "^0.5.0" babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz#090372e3141f7cc324ed70b3daf5379df2fa384d" - integrity sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow== +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz#d21ca099bbd53ab307a8621e019a7bd0f40cdcfb" - integrity sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg== +"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz#c35ea31a02d86be485f6aa510184b677a91738fd" - integrity sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q== +"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz#a8eced3a8e7b8e2d40ec4ec4548a45912630d302" - integrity sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q== +"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typeof-symbol@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz#8b19a244c6f8c9d668dca6a6f754ad6ead1128f2" - integrity sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg== +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typescript@^7.16.0", "@babel/plugin-transform-typescript@^7.5.0": - version "7.16.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz#cc0670b2822b0338355bc1b3d2246a42b8166409" - integrity sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg== +"@babel/plugin-transform-typescript@^7.16.7", "@babel/plugin-transform-typescript@^7.5.0": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" + integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-typescript" "^7.16.0" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-typescript" "^7.16.7" -"@babel/plugin-transform-unicode-escapes@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz#1a354064b4c45663a32334f46fa0cf6100b5b1f3" - integrity sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A== +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz#293b80950177c8c85aede87cef280259fb995402" - integrity sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A== +"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/preset-env@^7.12.11": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.4.tgz#4f6ec33b2a3fe72d6bfdcdf3859500232563a2e3" - integrity sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-compilation-targets" "^7.16.3" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.2" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-async-generator-functions" "^7.16.4" - "@babel/plugin-proposal-class-properties" "^7.16.0" - "@babel/plugin-proposal-class-static-block" "^7.16.0" - "@babel/plugin-proposal-dynamic-import" "^7.16.0" - "@babel/plugin-proposal-export-namespace-from" "^7.16.0" - "@babel/plugin-proposal-json-strings" "^7.16.0" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" - "@babel/plugin-proposal-numeric-separator" "^7.16.0" - "@babel/plugin-proposal-object-rest-spread" "^7.16.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-private-methods" "^7.16.0" - "@babel/plugin-proposal-private-property-in-object" "^7.16.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.0" + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -919,54 +930,54 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.0" - "@babel/plugin-transform-async-to-generator" "^7.16.0" - "@babel/plugin-transform-block-scoped-functions" "^7.16.0" - "@babel/plugin-transform-block-scoping" "^7.16.0" - "@babel/plugin-transform-classes" "^7.16.0" - "@babel/plugin-transform-computed-properties" "^7.16.0" - "@babel/plugin-transform-destructuring" "^7.16.0" - "@babel/plugin-transform-dotall-regex" "^7.16.0" - "@babel/plugin-transform-duplicate-keys" "^7.16.0" - "@babel/plugin-transform-exponentiation-operator" "^7.16.0" - "@babel/plugin-transform-for-of" "^7.16.0" - "@babel/plugin-transform-function-name" "^7.16.0" - "@babel/plugin-transform-literals" "^7.16.0" - "@babel/plugin-transform-member-expression-literals" "^7.16.0" - "@babel/plugin-transform-modules-amd" "^7.16.0" - "@babel/plugin-transform-modules-commonjs" "^7.16.0" - "@babel/plugin-transform-modules-systemjs" "^7.16.0" - "@babel/plugin-transform-modules-umd" "^7.16.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.0" - "@babel/plugin-transform-new-target" "^7.16.0" - "@babel/plugin-transform-object-super" "^7.16.0" - "@babel/plugin-transform-parameters" "^7.16.3" - "@babel/plugin-transform-property-literals" "^7.16.0" - "@babel/plugin-transform-regenerator" "^7.16.0" - "@babel/plugin-transform-reserved-words" "^7.16.0" - "@babel/plugin-transform-shorthand-properties" "^7.16.0" - "@babel/plugin-transform-spread" "^7.16.0" - "@babel/plugin-transform-sticky-regex" "^7.16.0" - "@babel/plugin-transform-template-literals" "^7.16.0" - "@babel/plugin-transform-typeof-symbol" "^7.16.0" - "@babel/plugin-transform-unicode-escapes" "^7.16.0" - "@babel/plugin-transform-unicode-regex" "^7.16.0" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.8" babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-corejs3 "^0.5.0" babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.19.1" + core-js-compat "^3.20.2" semver "^6.3.0" "@babel/preset-flow@^7.0.0", "@babel/preset-flow@^7.12.1": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.0.tgz#9f1f6e72714d79460d48058cb5658fc87da7150b" - integrity sha512-e5NE1EoPMpoHFkyFkMSj2h9tu7OolARcUHki8mnBv4NiFK9so+UrhbvT9mV99tMJOUEx8BOj67T6dXvGcTeYeQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.16.7.tgz#7fd831323ab25eeba6e4b77a589f680e30581cbd" + integrity sha512-6ceP7IyZdUYQ3wUVqyRSQXztd1YmFHWI4Xv11MIqAlE4WqxBSd/FZ61V9k+TS5Gd4mkHOtQtPp9ymRpxH4y1Ug== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-flow-strip-types" "^7.16.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-flow-strip-types" "^7.16.7" "@babel/preset-modules@^0.1.5": version "0.1.5" @@ -980,30 +991,30 @@ esutils "^2.0.2" "@babel/preset-react@^7.12.10": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.0.tgz#f71d3e8dff5218478011df037fad52660ee6d82a" - integrity sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" + integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-react-display-name" "^7.16.0" - "@babel/plugin-transform-react-jsx" "^7.16.0" - "@babel/plugin-transform-react-jsx-development" "^7.16.0" - "@babel/plugin-transform-react-pure-annotations" "^7.16.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-react-display-name" "^7.16.7" + "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/plugin-transform-react-jsx-development" "^7.16.7" + "@babel/plugin-transform-react-pure-annotations" "^7.16.7" "@babel/preset-typescript@^7.1.0", "@babel/preset-typescript@^7.12.7": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.0.tgz#b0b4f105b855fb3d631ec036cdc9d1ffd1fa5eac" - integrity sha512-txegdrZYgO9DlPbv+9QOVpMnKbOtezsLHWsnsRF4AjbSIsVaujrq1qg8HK0mxQpWv0jnejt0yEoW1uWpvbrDTg== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" + integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-transform-typescript" "^7.16.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-transform-typescript" "^7.16.7" "@babel/register@^7.0.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.16.0.tgz#f5d2aa14df37cf7146b9759f7c53818360f24ec6" - integrity sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ== + version "7.16.9" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.16.9.tgz#fcfb23cfdd9ad95c9771e58183de83b513857806" + integrity sha512-jJ72wcghdRIlENfvALcyODhNoGE5j75cYHdC+aQMh6cU/P86tiiXTp9XYZct1UxUMo/4+BgQRyNZEGx0KWGS+g== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" @@ -1012,42 +1023,43 @@ source-map-support "^0.5.16" "@babel/runtime@^7.8.4": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" - integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.0.0", "@babel/template@^7.16.0", "@babel/template@^7.3.3": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" - integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3", "@babel/traverse@^7.7.2": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" - integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/parser" "^7.16.3" - "@babel/types" "^7.16.0" +"@babel/template@^7.0.0", "@babel/template@^7.16.7", "@babel/template@^7.3.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.7.2": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" - integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== +"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1075,16 +1087,6 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@hutson/parse-repository-url@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" - integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== - -"@iarna/toml@2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" - integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== - "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1101,27 +1103,27 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.4.2.tgz#7a95612d38c007ddb528ee446fe5e5e785e685ce" - integrity sha512-xknHThRsPB/To1FUbi6pCe43y58qFC03zfb6R7fDb/FfC7k2R3i1l+izRBJf8DI46KhYGRaF14Eo9A3qbBoixg== +"@jest/console@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.4.6.tgz#0742e6787f682b22bdad56f9db2a8a77f6a86107" + integrity sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA== dependencies: "@jest/types" "^27.4.2" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.4.2" + jest-message-util "^27.4.6" jest-util "^27.4.2" slash "^3.0.0" -"@jest/core@^27.4.3": - version "27.4.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.4.3.tgz#9b9b34f4e6429a633085f476402aa2e3ce707877" - integrity sha512-V9ms3zSxUHxh1E/ZLAiXF7SLejsdFnjWTFizWotMOWvjho0lW5kSjZymhQSodNW0T0ZMQRiha7f8+NcFVm3hJQ== +"@jest/core@^27.4.7": + version "27.4.7" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.4.7.tgz#84eabdf42a25f1fa138272ed229bcf0a1b5e6913" + integrity sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg== dependencies: - "@jest/console" "^27.4.2" - "@jest/reporters" "^27.4.2" - "@jest/test-result" "^27.4.2" - "@jest/transform" "^27.4.2" + "@jest/console" "^27.4.6" + "@jest/reporters" "^27.4.6" + "@jest/test-result" "^27.4.6" + "@jest/transform" "^27.4.6" "@jest/types" "^27.4.2" "@types/node" "*" ansi-escapes "^4.2.1" @@ -1130,18 +1132,18 @@ exit "^0.1.2" graceful-fs "^4.2.4" jest-changed-files "^27.4.2" - jest-config "^27.4.3" - jest-haste-map "^27.4.2" - jest-message-util "^27.4.2" + jest-config "^27.4.7" + jest-haste-map "^27.4.6" + jest-message-util "^27.4.6" jest-regex-util "^27.4.0" - jest-resolve "^27.4.2" - jest-resolve-dependencies "^27.4.2" - jest-runner "^27.4.3" - jest-runtime "^27.4.2" - jest-snapshot "^27.4.2" + jest-resolve "^27.4.6" + jest-resolve-dependencies "^27.4.6" + jest-runner "^27.4.6" + jest-runtime "^27.4.6" + jest-snapshot "^27.4.6" jest-util "^27.4.2" - jest-validate "^27.4.2" - jest-watcher "^27.4.2" + jest-validate "^27.4.6" + jest-watcher "^27.4.6" micromatch "^4.0.4" rimraf "^3.0.0" slash "^3.0.0" @@ -1154,46 +1156,46 @@ dependencies: "@jest/types" "^27.4.2" -"@jest/environment@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.4.2.tgz#03efabce528dbb09bffd3ec7e39bb0f3f7475cc2" - integrity sha512-uSljKxh/rGlHlmhyeG4ZoVK9hOec+EPBkwTHkHKQ2EqDu5K+MaG9uJZ8o1CbRsSdZqSuhXvJCYhBWsORPPg6qw== +"@jest/environment@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.4.6.tgz#1e92885d64f48c8454df35ed9779fbcf31c56d8b" + integrity sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg== dependencies: - "@jest/fake-timers" "^27.4.2" + "@jest/fake-timers" "^27.4.6" "@jest/types" "^27.4.2" "@types/node" "*" - jest-mock "^27.4.2" + jest-mock "^27.4.6" -"@jest/fake-timers@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.4.2.tgz#d217f86c3ba2027bf29e0b731fd0cb761a72d093" - integrity sha512-f/Xpzn5YQk5adtqBgvw1V6bF8Nx3hY0OIRRpCvWcfPl0EAjdqWPdhH3t/3XpiWZqtjIEHDyMKP9ajpva1l4Zmg== +"@jest/fake-timers@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.4.6.tgz#e026ae1671316dbd04a56945be2fa251204324e8" + integrity sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A== dependencies: "@jest/types" "^27.4.2" "@sinonjs/fake-timers" "^8.0.1" "@types/node" "*" - jest-message-util "^27.4.2" - jest-mock "^27.4.2" + jest-message-util "^27.4.6" + jest-mock "^27.4.6" jest-util "^27.4.2" -"@jest/globals@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.2.tgz#56a402c5ebf22eba1d34e900772147f5126ea2d8" - integrity sha512-KkfaHEttlGpXYAQTZHgrESiEPx2q/DKAFLGLFda1uGVrqc17snd3YVPhOxlXOHIzVPs+lQ/SDB2EIvxyGzb3Ew== +"@jest/globals@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.6.tgz#3f09bed64b0fd7f5f996920258bd4be8f52f060a" + integrity sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw== dependencies: - "@jest/environment" "^27.4.2" + "@jest/environment" "^27.4.6" "@jest/types" "^27.4.2" - expect "^27.4.2" + expect "^27.4.6" -"@jest/reporters@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.2.tgz#d3860c5d3f668fa1326ab2bf5989f774e5c03f04" - integrity sha512-sp4aqmdBJtjKetEakzDPcZggPcVIF6w9QLkYBbaWDV6e/SIsHnF1S4KtIH91eEc2fp7ep6V/e1xvdfEoho1d2w== +"@jest/reporters@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.6.tgz#b53dec3a93baf9b00826abf95b932de919d6d8dd" + integrity sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.4.2" - "@jest/test-result" "^27.4.2" - "@jest/transform" "^27.4.2" + "@jest/console" "^27.4.6" + "@jest/test-result" "^27.4.6" + "@jest/transform" "^27.4.6" "@jest/types" "^27.4.2" "@types/node" "*" chalk "^4.0.0" @@ -1202,14 +1204,14 @@ glob "^7.1.2" graceful-fs "^4.2.4" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" + istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^27.4.2" - jest-resolve "^27.4.2" + istanbul-reports "^3.1.3" + jest-haste-map "^27.4.6" + jest-resolve "^27.4.6" jest-util "^27.4.2" - jest-worker "^27.4.2" + jest-worker "^27.4.6" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" @@ -1225,43 +1227,43 @@ graceful-fs "^4.2.4" source-map "^0.6.0" -"@jest/test-result@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.2.tgz#05fd4a5466ec502f3eae0b39dff2b93ea4d5d9ec" - integrity sha512-kr+bCrra9jfTgxHXHa2UwoQjxvQk3Am6QbpAiJ5x/50LW8llOYrxILkqY0lZRW/hu8FXesnudbql263+EW9iNA== +"@jest/test-result@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.6.tgz#b3df94c3d899c040f602cea296979844f61bdf69" + integrity sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ== dependencies: - "@jest/console" "^27.4.2" + "@jest/console" "^27.4.6" "@jest/types" "^27.4.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.4.2.tgz#94bb7e5412d59ae2a8a4b8f9925bb16b6dc82b4c" - integrity sha512-HmHp5mlh9f9GyNej5yCS1JZIFfUGnP9+jEOH5zoq5EmsuZeYD+dGULqyvGDPtuzzbyAFJ6R4+z4SS0VvnFwwGQ== +"@jest/test-sequencer@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz#447339b8a3d7b5436f50934df30854e442a9d904" + integrity sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw== dependencies: - "@jest/test-result" "^27.4.2" + "@jest/test-result" "^27.4.6" graceful-fs "^4.2.4" - jest-haste-map "^27.4.2" - jest-runtime "^27.4.2" + jest-haste-map "^27.4.6" + jest-runtime "^27.4.6" -"@jest/transform@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.4.2.tgz#459885e96de2e21fc68b8b371e90aa653966dd0d" - integrity sha512-RTKcPZllfcmLfnlxBya7aypofhdz05+E6QITe55Ex0rxyerkgjmmpMlvVn11V0cP719Ps6WcDYCnDzxnnJUwKg== +"@jest/transform@^27.4.6": + version "27.4.6" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.4.6.tgz#153621940b1ed500305eacdb31105d415dc30231" + integrity sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw== dependencies: "@babel/core" "^7.1.0" "@jest/types" "^27.4.2" - babel-plugin-istanbul "^6.0.0" + babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" graceful-fs "^4.2.4" - jest-haste-map "^27.4.2" + jest-haste-map "^27.4.6" jest-regex-util "^27.4.0" jest-util "^27.4.2" micromatch "^4.0.4" - pirates "^4.0.1" + pirates "^4.0.4" slash "^3.0.0" source-map "^0.6.1" write-file-atomic "^3.0.0" @@ -1309,107 +1311,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@octokit/auth-token@^2.4.4": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.5.0.tgz#27c37ea26c205f28443402477ffd261311f21e36" - integrity sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g== - dependencies: - "@octokit/types" "^6.0.3" - -"@octokit/core@^3.5.1": - version "3.5.1" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.5.1.tgz#8601ceeb1ec0e1b1b8217b960a413ed8e947809b" - integrity sha512-omncwpLVxMP+GLpLPgeGJBF6IWJFjXDS5flY5VbppePYX9XehevbDykRH9PdCdvqt9TS5AOTiDide7h0qrkHjw== - dependencies: - "@octokit/auth-token" "^2.4.4" - "@octokit/graphql" "^4.5.8" - "@octokit/request" "^5.6.0" - "@octokit/request-error" "^2.0.5" - "@octokit/types" "^6.0.3" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^6.0.1": - version "6.0.12" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.12.tgz#3b4d47a4b0e79b1027fb8d75d4221928b2d05658" - integrity sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA== - dependencies: - "@octokit/types" "^6.0.3" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^4.5.8": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.8.0.tgz#664d9b11c0e12112cbf78e10f49a05959aa22cc3" - integrity sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg== - dependencies: - "@octokit/request" "^5.6.0" - "@octokit/types" "^6.0.3" - universal-user-agent "^6.0.0" - -"@octokit/openapi-types@^11.2.0": - version "11.2.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-11.2.0.tgz#b38d7fc3736d52a1e96b230c1ccd4a58a2f400a6" - integrity sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA== - -"@octokit/plugin-paginate-rest@^2.16.8": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz#32e9c7cab2a374421d3d0de239102287d791bce7" - integrity sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw== - dependencies: - "@octokit/types" "^6.34.0" - -"@octokit/plugin-request-log@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85" - integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA== - -"@octokit/plugin-rest-endpoint-methods@^5.12.0": - version "5.13.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz#8c46109021a3412233f6f50d28786f8e552427ba" - integrity sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA== - dependencies: - "@octokit/types" "^6.34.0" - deprecation "^2.3.1" - -"@octokit/request-error@^2.0.5", "@octokit/request-error@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.1.0.tgz#9e150357831bfc788d13a4fd4b1913d60c74d677" - integrity sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg== - dependencies: - "@octokit/types" "^6.0.3" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.6.0": - version "5.6.2" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.6.2.tgz#1aa74d5da7b9e04ac60ef232edd9a7438dcf32d8" - integrity sha512-je66CvSEVf0jCpRISxkUcCa0UkxmFs6eGDRSbfJtAVwbLH5ceqF+YEyC8lj8ystKyZTy8adWr0qmkY52EfOeLA== - dependencies: - "@octokit/endpoint" "^6.0.1" - "@octokit/request-error" "^2.1.0" - "@octokit/types" "^6.16.1" - is-plain-object "^5.0.0" - node-fetch "^2.6.1" - universal-user-agent "^6.0.0" - -"@octokit/rest@18.12.0": - version "18.12.0" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.12.0.tgz#f06bc4952fc87130308d810ca9d00e79f6988881" - integrity sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q== - dependencies: - "@octokit/core" "^3.5.1" - "@octokit/plugin-paginate-rest" "^2.16.8" - "@octokit/plugin-request-log" "^1.0.4" - "@octokit/plugin-rest-endpoint-methods" "^5.12.0" - -"@octokit/types@^6.0.3", "@octokit/types@^6.16.1", "@octokit/types@^6.34.0": - version "6.34.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-6.34.0.tgz#c6021333334d1ecfb5d370a8798162ddf1ae8218" - integrity sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw== - dependencies: - "@octokit/openapi-types" "^11.2.0" - "@react-native-community/cli-debugger-ui@^6.0.0-rc.0": version "6.0.0-rc.0" resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-6.0.0-rc.0.tgz#774378626e4b70f5e1e2e54910472dcbaffa1536" @@ -1458,12 +1359,12 @@ plist "^3.0.2" xcode "^2.0.0" -"@react-native-community/cli-plugin-metro@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-6.2.0.tgz#143f459f1b6d595011e787ecfbe87621195de6ae" - integrity sha512-JfmzuFNzOr+dFTUQJo1rV0t87XAqgHRTMYXNleQVt8otOVCk1FSCgKlgqMdvQc/FCx2ZjoMWEEV/g0LrPI8Etw== +"@react-native-community/cli-plugin-metro@^6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-plugin-metro/-/cli-plugin-metro-6.4.0.tgz#70b7908d6b548481f37ed58167f9460d325ae21c" + integrity sha512-lcrNODvHd3ZVhiEshXAjyBoqP44rjhkytkOSUpnZHAcmMLiguxDmvhWeWqbwu3XqSX/f0gVKmfj81t+opI1bSw== dependencies: - "@react-native-community/cli-server-api" "^6.2.0" + "@react-native-community/cli-server-api" "^6.4.0" "@react-native-community/cli-tools" "^6.2.0" chalk "^4.1.2" metro "^0.66.1" @@ -1474,10 +1375,10 @@ metro-runtime "^0.66.1" readline "^1.3.0" -"@react-native-community/cli-server-api@^6.2.0": - version "6.2.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-6.2.0.tgz#8dc399ef0e14e07c9942515b507292fb850f41f2" - integrity sha512-OnbnYclhoDpjge33QO5Slhfn0DsmLzzAgyrSCnb24HhSqwq7ObjMHaLpoEhpajzLG71wq5oKh0APEQjiL4Mknw== +"@react-native-community/cli-server-api@^6.4.0": + version "6.4.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli-server-api/-/cli-server-api-6.4.0.tgz#aa547839e54f9910d3671808e009489d2c2db0d9" + integrity sha512-zYUfOEHLTFEmNoa5oscgWOu2xtOcB4NZWqCdpkxNmgGQhC48CSNl8V4rxXLoozcymEsSUN0rj5pDRiXz/5CYow== dependencies: "@react-native-community/cli-debugger-ui" "^6.0.0-rc.0" "@react-native-community/cli-tools" "^6.2.0" @@ -1511,14 +1412,14 @@ ora "^3.4.0" "@react-native-community/cli@^6.0.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-6.3.0.tgz#27e3fdd544fcbb7035c368f81847172709c17a4f" - integrity sha512-rMdm/S8i5VIDQBJAU6YfNz15uwdguht0wVUOrJpEW8DCTKDfATanTlc5a1bsi0vitl9lS896VrgBiuW/VFOOXA== + version "6.4.0" + resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-6.4.0.tgz#0b61a4b5f11293b0b79a0e78f80777387a9529a9" + integrity sha512-UNvYnWaALa4mJEaWdLY3fVK+csZzx/Ja/FGvXISPJ9W9lrKvGtyXkidViUCPbPtMsJUi7teA4uIShHn0mbGmnQ== dependencies: "@react-native-community/cli-debugger-ui" "^6.0.0-rc.0" "@react-native-community/cli-hermes" "^6.3.0" - "@react-native-community/cli-plugin-metro" "^6.2.0" - "@react-native-community/cli-server-api" "^6.2.0" + "@react-native-community/cli-plugin-metro" "^6.4.0" + "@react-native-community/cli-server-api" "^6.4.0" "@react-native-community/cli-tools" "^6.2.0" "@react-native-community/cli-types" "^6.0.0" appdirsjs "^1.2.4" @@ -1552,26 +1453,16 @@ resolved "https://registry.yarnpkg.com/@react-native/assets/-/assets-1.0.0.tgz#c6f9bf63d274bafc8e970628de24986b30a55c8e" integrity sha512-KrwSpS1tKI70wuKl68DwJZYEvXktDHdZMG0k2AXD/rJVSlB23/X2CB2cutVR0HwNMJIal9HOUOBB2rVfa6UGtQ== -"@react-native/normalize-color@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-1.0.0.tgz#c52a99d4fe01049102d47dc45d40cbde4f720ab6" - integrity sha512-xUNRvNmCl3UGCPbbHvfyFMnpvLPoOjDCcp5bT9m2k+TF/ZBklEQwhPZlkrxRx2NhgFh1X3a5uL7mJ7ZR+8G7Qg== +"@react-native/normalize-color@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@react-native/normalize-color/-/normalize-color-2.0.0.tgz#da955909432474a9a0fe1cbffc66576a0447f567" + integrity sha512-Wip/xsc5lw8vsBlmY2MO/gFLp3MvuZ2baBZjDeTjjndMgM0h5sxz7AZR62RDPGgstp8Np7JzjvVqVT7tpFZqsw== "@react-native/polyfills@2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@react-native/polyfills/-/polyfills-2.0.0.tgz#4c40b74655c83982c8cf47530ee7dc13d957b6aa" integrity sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ== -"@release-it/conventional-changelog@^3.3.0": - version "3.3.0" - resolved "https://registry.yarnpkg.com/@release-it/conventional-changelog/-/conventional-changelog-3.3.0.tgz#0f79e4b736412040d37c2b84bf433e393268c08e" - integrity sha512-pchCHf+wNpn15oj2hau4gisFKQat/01JuTzAwlGsQE83ZUBknU4dRlPA3xf5F5f3K70VVTQ3lx4/lgQvR+zxww== - dependencies: - concat-stream "^2.0.0" - conventional-changelog "^3.1.24" - conventional-recommended-bump "^6.1.0" - prepend-file "^2.0.0" - "@sideway/address@^4.1.3": version "4.1.3" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.3.tgz#d93cce5d45c5daec92ad76db492cc2ee3c64ab27" @@ -1589,16 +1480,6 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@sindresorhus/is@^4.0.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.2.0.tgz#667bfc6186ae7c9e0b45a08960c551437176e1ca" - integrity sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw== - "@sinonjs/commons@^1.7.0": version "1.8.3" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" @@ -1613,29 +1494,15 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.17" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.17.tgz#f50ac9d20d64153b510578d84f9643f9a3afbe64" - integrity sha512-6zzkezS9QEIL8yCBvXWxPTJPNuMeECJVxSOhxNY/jfq9LxOTHivaYTqr37n9LknWWRTIkzqH2UilS5QFvfa90A== + version "7.1.18" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" + integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1644,9 +1511,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.3" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.3.tgz#f456b4b2ce79137f768aa130d2423d2f0ccfaba5" - integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== + version "7.6.4" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" @@ -1665,16 +1532,6 @@ dependencies: "@babel/types" "^7.3.0" -"@types/cacheable-request@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" - integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "*" - "@types/node" "*" - "@types/responselike" "*" - "@types/fs-extra@^9.0.11": version "9.0.13" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" @@ -1689,15 +1546,10 @@ dependencies: "@types/node" "*" -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" @@ -1713,35 +1565,18 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^27.0.3": - version "27.0.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.0.3.tgz#0cf9dfe9009e467f70a342f0f94ead19842a783a" - integrity sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg== +"@types/jest@^27.4.0": + version "27.4.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.0.tgz#037ab8b872067cae842a320841693080f9cb84ed" + integrity sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ== dependencies: jest-diff "^27.0.0" pretty-format "^27.0.0" -"@types/keyv@*": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.3.tgz#1c9aae32872ec1f20dcdaee89a9f3ba88f465e41" - integrity sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg== - dependencies: - "@types/node" "*" - -"@types/minimist@^1.2.0": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" - integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== - "@types/node@*": - version "16.11.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.12.tgz#ac7fb693ac587ee182c3780c26eb65546a1a3c10" - integrity sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw== - -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + version "17.0.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.14.tgz#33b9b94f789a8fedd30a68efdbca4dbb06b61f20" + integrity sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng== "@types/parse-json@^4.0.0": version "4.0.0" @@ -1749,38 +1584,31 @@ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== "@types/prettier@^2.1.5": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.2.tgz#4c62fae93eb479660c3bd93f9d24d561597a8281" - integrity sha512-ekoj4qOQYp7CvjX8ZDBgN86w3MqQhLE1hczEJbEIjgFEumDy+na/4AJAbLXfgEWFNB2pKadM5rPFtuSGMWK7xA== + version "2.4.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf" + integrity sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w== "@types/prop-types@*": version "15.7.4" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== -"@types/react-native@0.66.8": - version "0.66.8" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.66.8.tgz#0f9d42202452e9951e4f45277c254de12d1e11b9" - integrity sha512-xiW7MfTPzd6xsJB8VEtheF9RH1Vyr1FlbM5jguMa+3ZtnFlE38H4TZSCFAaA3YGIZDnAOlG7qT13RUWyFpW2uw== +"@types/react-native@^0.66.15": + version "0.66.15" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.66.15.tgz#d332d82b04635adabbd8e1976f9547ce8662300b" + integrity sha512-qNK3LZhNpSd2Hdr0OFdvQ/VOb1qcjNhmw96LsOtxIN+1RtXHO/1dVzxYUlWnKMCtV+E5WSaWM703c9Q7gG9tyg== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^17.0.37": - version "17.0.37" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959" - integrity sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg== +"@types/react@*", "@types/react@^17.0.38": + version "17.0.38" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd" + integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" -"@types/responselike@*", "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -1810,14 +1638,6 @@ dependencies: "@types/yargs-parser" "*" -JSONStream@^1.0.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" @@ -1862,14 +1682,9 @@ acorn@^7.1.1: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.2.4: - version "8.6.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" - integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== - -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== agent-base@6: version "6.0.2" @@ -1891,13 +1706,6 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b" integrity sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww== -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - ansi-escapes@^4.2.1: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -1991,11 +1799,6 @@ array-filter@~0.0.0: resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= -array-ify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" - integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= - array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" @@ -2016,11 +1819,6 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -2048,13 +1846,6 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async-retry@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" - integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== - dependencies: - retry "0.13.1" - async@^2.4.0: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -2082,15 +1873,15 @@ babel-core@^7.0.0-bridge.0: resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== -babel-jest@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.4.2.tgz#6edf80971045cfd44f3f10b6eda6007d95f62742" - integrity sha512-MADrjb3KBO2eyZCAc6QaJg6RT5u+6oEdDyHO5HEalnpwQ6LrhTsQF2Kj1Wnz2t6UPXIXPk18dSXXOT0wF5yTxA== +babel-jest@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.4.6.tgz#4d024e69e241cdf4f396e453a07100f44f7ce314" + integrity sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg== dependencies: - "@jest/transform" "^27.4.2" + "@jest/transform" "^27.4.6" "@jest/types" "^27.4.2" "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.0.0" + babel-plugin-istanbul "^6.1.1" babel-preset-jest "^27.4.0" chalk "^4.0.0" graceful-fs "^4.2.4" @@ -2103,7 +1894,7 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-istanbul@^6.0.0: +babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== @@ -2125,28 +1916,28 @@ babel-plugin-jest-hoist@^27.4.0: "@types/babel__traverse" "^7.0.6" babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz#407082d0d355ba565af24126fb6cb8e9115251fd" - integrity sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA== + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== dependencies: "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz#0b571f4cf3d67f911512f5c04842a7b8e8263087" - integrity sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw== +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" + integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.0" - core-js-compat "^3.18.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.21.0" babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz#9ebbcd7186e1a33e21c5e20cae4e7983949533be" - integrity sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg== + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: version "7.0.0-beta.0" @@ -2235,39 +2026,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -before-after-hook@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.2.tgz#a6e8ca41028d90ee2c24222f201c90956091613e" - integrity sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ== - big-integer@1.6.x: version "1.6.51" resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== -bl@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -boxen@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - bplist-creator@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" @@ -2318,13 +2081,13 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.16.0, browserslist@^4.17.5, browserslist@^4.18.1: - version "4.18.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" - integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== +browserslist@^4.16.0, browserslist@^4.17.5, browserslist@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== dependencies: - caniuse-lite "^1.0.30001280" - electron-to-chromium "^1.3.896" + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" escalade "^3.1.1" node-releases "^2.0.1" picocolors "^1.0.0" @@ -2341,14 +2104,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -2377,37 +2132,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - call-bind@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -2440,29 +2164,20 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase-keys@^6.2.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" - integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== - dependencies: - camelcase "^5.3.1" - map-obj "^4.0.0" - quick-lru "^4.0.1" - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.0.0, camelcase@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e" - integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA== + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001280: - version "1.0.30001285" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001285.tgz#fe1e52229187e11d6670590790d669b9e03315b7" - integrity sha512-KAOkuUtcQ901MtmvxfKD+ODHH9YVDYnBt+TGYSz2KIfnq22CiArbUxXPN9067gNbgMlnNYRSwho8OPXZPALB9Q== +caniuse-lite@^1.0.30001286: + version "1.0.30001305" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001305.tgz#02cd8031df07c4fcb117aa2ecc4899122681bd4c" + integrity sha512-p7d9YQMji8haf0f+5rbcv9WlQ+N5jMPfRAnUmZRlNxsNeBO3Yr7RYG6M2uTY1h9tCVdlkJg6YNNc4kiAiBLdWA== capture-exit@^2.0.0: version "2.0.0" @@ -2471,14 +2186,6 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -2488,16 +2195,19 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -2528,11 +2238,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -2540,23 +2245,11 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.0.0, cli-spinners@^2.5.0: +cli-spinners@^2.0.0: version "2.6.1" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -2584,13 +2277,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -2675,14 +2361,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compare-func@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" - integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== - dependencies: - array-ify "^1.0.0" - dot-prop "^5.1.0" - component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -2713,28 +2391,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - connect@^3.6.5: version "3.7.0" resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" @@ -2745,164 +2401,6 @@ connect@^3.6.5: parseurl "~1.3.3" utils-merge "1.0.1" -conventional-changelog-angular@^5.0.12: - version "5.0.13" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz#896885d63b914a70d4934b59d2fe7bde1832b28c" - integrity sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-atom@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz#a759ec61c22d1c1196925fca88fe3ae89fd7d8de" - integrity sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw== - dependencies: - q "^1.5.1" - -conventional-changelog-codemirror@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz#398e9530f08ce34ec4640af98eeaf3022eb1f7dc" - integrity sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw== - dependencies: - q "^1.5.1" - -conventional-changelog-conventionalcommits@^4.5.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.1.tgz#f4c0921937050674e578dc7875f908351ccf4014" - integrity sha512-lzWJpPZhbM1R0PIzkwzGBCnAkH5RKJzJfFQZcl/D+2lsJxAwGnDKBqn/F4C1RD31GJNn8NuKWQzAZDAVXPp2Mw== - dependencies: - compare-func "^2.0.0" - lodash "^4.17.15" - q "^1.5.1" - -conventional-changelog-core@^4.2.1: - version "4.2.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz#e50d047e8ebacf63fac3dc67bf918177001e1e9f" - integrity sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg== - dependencies: - add-stream "^1.0.0" - conventional-changelog-writer "^5.0.0" - conventional-commits-parser "^3.2.0" - dateformat "^3.0.0" - get-pkg-repo "^4.0.0" - git-raw-commits "^2.0.8" - git-remote-origin-url "^2.0.0" - git-semver-tags "^4.1.1" - lodash "^4.17.15" - normalize-package-data "^3.0.0" - q "^1.5.1" - read-pkg "^3.0.0" - read-pkg-up "^3.0.0" - through2 "^4.0.0" - -conventional-changelog-ember@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz#619b37ec708be9e74a220f4dcf79212ae1c92962" - integrity sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A== - dependencies: - q "^1.5.1" - -conventional-changelog-eslint@^3.0.9: - version "3.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz#689bd0a470e02f7baafe21a495880deea18b7cdb" - integrity sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA== - dependencies: - q "^1.5.1" - -conventional-changelog-express@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz#420c9d92a347b72a91544750bffa9387665a6ee8" - integrity sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ== - dependencies: - q "^1.5.1" - -conventional-changelog-jquery@^3.0.11: - version "3.0.11" - resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz#d142207400f51c9e5bb588596598e24bba8994bf" - integrity sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw== - dependencies: - q "^1.5.1" - -conventional-changelog-jshint@^2.0.9: - version "2.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz#f2d7f23e6acd4927a238555d92c09b50fe3852ff" - integrity sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA== - dependencies: - compare-func "^2.0.0" - q "^1.5.1" - -conventional-changelog-preset-loader@^2.3.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c" - integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== - -conventional-changelog-writer@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz#c4042f3f1542f2f41d7d2e0d6cad23aba8df8eec" - integrity sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g== - dependencies: - conventional-commits-filter "^2.0.7" - dateformat "^3.0.0" - handlebars "^4.7.6" - json-stringify-safe "^5.0.1" - lodash "^4.17.15" - meow "^8.0.0" - semver "^6.0.0" - split "^1.0.0" - through2 "^4.0.0" - -conventional-changelog@^3.1.24: - version "3.1.24" - resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-3.1.24.tgz#ebd180b0fd1b2e1f0095c4b04fd088698348a464" - integrity sha512-ed6k8PO00UVvhExYohroVPXcOJ/K1N0/drJHx/faTH37OIZthlecuLIRX/T6uOp682CAoVoFpu+sSEaeuH6Asg== - dependencies: - conventional-changelog-angular "^5.0.12" - conventional-changelog-atom "^2.0.8" - conventional-changelog-codemirror "^2.0.8" - conventional-changelog-conventionalcommits "^4.5.0" - conventional-changelog-core "^4.2.1" - conventional-changelog-ember "^2.0.9" - conventional-changelog-eslint "^3.0.9" - conventional-changelog-express "^2.0.6" - conventional-changelog-jquery "^3.0.11" - conventional-changelog-jshint "^2.0.9" - conventional-changelog-preset-loader "^2.3.4" - -conventional-commits-filter@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz#f8d9b4f182fce00c9af7139da49365b136c8a0b3" - integrity sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA== - dependencies: - lodash.ismatch "^4.4.0" - modify-values "^1.0.0" - -conventional-commits-parser@^3.2.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" - integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw== - dependencies: - JSONStream "^1.0.4" - is-text-path "^1.0.1" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -conventional-recommended-bump@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz#cfa623285d1de554012f2ffde70d9c8a22231f55" - integrity sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw== - dependencies: - concat-stream "^2.0.0" - conventional-changelog-preset-loader "^2.3.4" - conventional-commits-filter "^2.0.7" - conventional-commits-parser "^3.2.0" - git-raw-commits "^2.0.8" - git-semver-tags "^4.1.1" - meow "^8.0.0" - q "^1.5.1" - convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" @@ -2915,12 +2413,12 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js-compat@^3.18.0, core-js-compat@^3.19.1: - version "3.19.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.3.tgz#de75e5821c5ce924a0a1e7b7d5c2cb973ff388aa" - integrity sha512-59tYzuWgEEVU9r+SRgceIGXSSUn47JknoiXW6Oq7RW8QHjXWz3/vp8pa7dbtuVu40sewz3OP3JmQEcDdztrLhA== +core-js-compat@^3.20.2, core-js-compat@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.0.tgz#bcc86aa5a589cee358e7a7fa0a4979d5a76c3885" + integrity sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A== dependencies: - browserslist "^4.18.1" + browserslist "^4.19.1" semver "7.0.0" core-util-is@~1.0.0: @@ -2928,17 +2426,6 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@7.0.1, cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -2949,6 +2436,17 @@ cosmiconfig@^5.0.5, cosmiconfig@^5.1.0: js-yaml "^3.13.1" parse-json "^4.0.0" +cosmiconfig@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -2969,11 +2467,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -2996,11 +2489,6 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== -dargs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" - integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== - data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -3010,11 +2498,6 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" -dateformat@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" - integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== - dayjs@^1.8.15: version "1.10.7" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" @@ -3034,22 +2517,7 @@ debug@4, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" -debug@4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.2.0: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -3064,30 +2532,11 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -3110,16 +2559,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -3178,19 +2617,6 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -deprecated-obj@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/deprecated-obj/-/deprecated-obj-2.0.0.tgz#e6ba93a3989f6ed18d685e7d99fb8d469b4beffc" - integrity sha512-CkdywZC2rJ8RGh+y3MM1fw1EJ4oO/oNExGbRFv0AQoMS+faTd3nO7slYjkj/6t8OnIMUE+wxh6G97YHhK1ytrw== - dependencies: - flat "^5.0.2" - lodash "^4.17.20" - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -3220,27 +2646,15 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -dot-prop@^5.1.0, dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.896: - version "1.4.14" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.14.tgz#b0aa41fbfbf2eff8c2c6f7a871c03075250f8956" - integrity sha512-RsGkAN9JEAYMObS72kzUsPPcPGMqX1rBqGuXi9aa4TBKLzICoLf+DAAtd0fVFzrniJqYzpby47gthCUoObfs0Q== +electron-to-chromium@^1.4.17: + version "1.4.61" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.61.tgz#97689f81b4ac5c996363d9ee7babd3406c44d6c3" + integrity sha512-kpzCOOFlx63C9qKRyIDEsKIUgzoe98ump7T4gU+/OLzj8gYkkWf2SIyBjhTSE0keAjMAp3i7C262YtkQOMYrGw== emittery@^0.8.1: version "0.8.1" @@ -3296,11 +2710,6 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3344,34 +2753,19 @@ esutils@^2.0.2: integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-target-shim@^5.0.0, event-target-shim@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@5.1.1, execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +event-target-shim@^5.0.0, event-target-shim@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +exec-sh@^0.3.2: + version "0.3.6" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" + integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== execa@^1.0.0: version "1.0.0" @@ -3386,7 +2780,7 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.0.2, execa@^4.0.3: +execa@^4.0.3: version "4.1.0" resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== @@ -3401,6 +2795,21 @@ execa@^4.0.2, execa@^4.0.3: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -3419,17 +2828,15 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.4.2.tgz#4429b0f7e307771d176de9bdf23229b101db6ef6" - integrity sha512-BjAXIDC6ZOW+WBFNg96J22D27Nq5ohn+oGcuP2rtOtcjuxNoV9McpQ60PcQWhdFOSBIQdR72e+4HdnbZTFSTyg== +expect@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.4.6.tgz#f335e128b0335b6ceb4fcab67ece7cbd14c942e6" + integrity sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag== dependencies: "@jest/types" "^27.4.2" - ansi-styles "^5.0.0" jest-get-type "^27.4.0" - jest-matcher-utils "^27.4.2" - jest-message-util "^27.4.2" - jest-regex-util "^27.4.0" + jest-matcher-utils "^27.4.6" + jest-message-util "^27.4.6" extend-shallow@^2.0.1: version "2.0.1" @@ -3446,15 +2853,6 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -3469,10 +2867,10 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== +fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -3504,13 +2902,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3528,11 +2919,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -filter-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= - finalhandler@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -3555,13 +2941,6 @@ find-cache-dir@^2.0.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -3577,15 +2956,10 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - flow-parser@0.*: - version "0.166.1" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.166.1.tgz#6869ab40bd71e1129053f53435864b08616d57e9" - integrity sha512-7iJ1cPcOYL/eOPGpGPaxwW8MytKGeXSnfvJA0uIvymXI4MnjjhZLWz1qPIqj2hfYJ7p/yXssbv7k2H3C90cyDw== + version "0.170.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.170.0.tgz#52cac19fd884c41894f39368bdf384183a597b3b" + integrity sha512-H1Fu8EM/F6MtOpHYpsFXPyySatowrXMWENxRmmKAfirfBr8kjHrms3YDuv82Nhn0xWaXV7Hhynp2tEaZsLhHLw== flow-parser@^0.121.0: version "0.121.0" @@ -3597,15 +2971,6 @@ for-in@^1.0.2: resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -form-data@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -3694,24 +3059,14 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-pkg-repo@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz#75973e1c8050c73f48190c52047c4cee3acbf385" - integrity sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA== - dependencies: - "@hutson/parse-repository-url" "^3.0.0" - hosted-git-info "^4.0.0" - through2 "^2.0.0" - yargs "^16.2.0" - -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== @@ -3728,55 +3083,6 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -git-raw-commits@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" - integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== - dependencies: - dargs "^7.0.0" - lodash "^4.17.15" - meow "^8.0.0" - split2 "^3.0.0" - through2 "^4.0.0" - -git-remote-origin-url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz#5282659dae2107145a11126112ad3216ec5fa65f" - integrity sha1-UoJlna4hBxRaERJhEq0yFuxfpl8= - dependencies: - gitconfiglocal "^1.0.0" - pify "^2.3.0" - -git-semver-tags@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz#63191bcd809b0ec3e151ba4751c16c444e5b5780" - integrity sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA== - dependencies: - meow "^8.0.0" - semver "^6.0.0" - -git-up@^4.0.0: - version "4.0.5" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.5.tgz#e7bb70981a37ea2fb8fe049669800a1f9a01d759" - integrity sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA== - dependencies: - is-ssh "^1.3.0" - parse-url "^6.0.0" - -git-url-parse@11.6.0: - version "11.6.0" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.6.0.tgz#c634b8de7faa66498a2b88932df31702c67df605" - integrity sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g== - dependencies: - git-up "^4.0.0" - -gitconfiglocal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz#41d045f3851a5ea88f03f24ca1c6178114464b9b" - integrity sha1-QdBF84UaXqiPA/JMocYXgRRGS5s= - dependencies: - ini "^1.3.2" - glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -3784,7 +3090,7 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -3796,85 +3102,27 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -global-dirs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" - integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== - dependencies: - ini "2.0.0" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globby@11.0.4, globby@^11.0.1: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== +globby@^11.0.1: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" -got@11.8.3: - version "11.8.3" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.3.tgz#f496c8fdda5d729a90b4905d2b07dbd148170770" - integrity sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -handlebars@^4.7.6: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -hard-rejection@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" - integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== has-flag@^3.0.0: version "3.0.0" @@ -3922,11 +3170,6 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -3951,18 +3194,6 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== - dependencies: - lru-cache "^6.0.0" - html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -3975,21 +3206,16 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== +http-errors@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== dependencies: depd "~1.1.2" inherits "2.0.4" - setprototypeof "1.1.1" + setprototypeof "1.2.0" statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" + toidentifier "1.0.1" http-proxy-agent@^4.0.1: version "4.0.1" @@ -4000,14 +3226,6 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -4026,35 +3244,28 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@0.4.24, iconv-lite@^0.4.24: +iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13, ieee754@^1.2.1: +ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.1.4: - version "5.1.9" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" - integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== image-size@^0.6.0: version "0.6.3" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" integrity sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA== -import-cwd@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" - integrity sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg== - dependencies: - import-from "^3.0.0" - import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -4071,22 +3282,10 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" - integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== - dependencies: - resolve-from "^5.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - import-local@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" - integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -4109,46 +3308,11 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -ini@^1.3.2, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -inquirer@8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.0.tgz#f44f008dd344bbfc4b30031f45d984e034a3ac3a" - integrity sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.2.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -4193,13 +3357,6 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-ci@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -4207,10 +3364,10 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.2.0, is-core-module@^2.5.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" - integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== +is-core-module@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== dependencies: has "^1.0.3" @@ -4251,11 +3408,6 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -4311,24 +3463,6 @@ is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-npm@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" - integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -4341,11 +3475,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - is-path-cwd@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -4356,11 +3485,6 @@ is-path-inside@^3.0.2: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -4368,11 +3492,6 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" @@ -4385,13 +3504,6 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" -is-ssh@^1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.3.tgz#7f133285ccd7f2c2c7fc897b771b53d95a2b2c7e" - integrity sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ== - dependencies: - protocols "^1.1.0" - is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -4402,13 +3514,6 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-text-path@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" - integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= - dependencies: - text-extensions "^1.0.0" - is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -4421,11 +3526,6 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -4436,18 +3536,6 @@ is-wsl@^1.1.0: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -4475,17 +3563,7 @@ istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== -istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== @@ -4514,10 +3592,10 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.1.tgz#7085857f17d2441053c6ce5c3b8fdf6882289397" - integrity sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw== +istanbul-reports@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" + integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -4531,86 +3609,86 @@ jest-changed-files@^27.4.2: execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.4.2.tgz#466f482207ca9f323b78416c28f4d1fa7588159a" - integrity sha512-2ePUSru1BGMyzxsMvRfu+tNb+PW60rUyMLJBfw1Nrh5zC8RoTPfF+zbE0JToU31a6ZVe4nnrNKWYRzlghAbL0A== +jest-circus@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.4.6.tgz#d3af34c0eb742a967b1919fbb351430727bcea6c" + integrity sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ== dependencies: - "@jest/environment" "^27.4.2" - "@jest/test-result" "^27.4.2" + "@jest/environment" "^27.4.6" + "@jest/test-result" "^27.4.6" "@jest/types" "^27.4.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.4.2" + expect "^27.4.6" is-generator-fn "^2.0.0" - jest-each "^27.4.2" - jest-matcher-utils "^27.4.2" - jest-message-util "^27.4.2" - jest-runtime "^27.4.2" - jest-snapshot "^27.4.2" + jest-each "^27.4.6" + jest-matcher-utils "^27.4.6" + jest-message-util "^27.4.6" + jest-runtime "^27.4.6" + jest-snapshot "^27.4.6" jest-util "^27.4.2" - pretty-format "^27.4.2" + pretty-format "^27.4.6" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.4.3: - version "27.4.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.4.3.tgz#89acba683b9f91c7a5e342e2ea13aa5414836a0d" - integrity sha512-zZSJBXNC/i8UnJPwcKWsqnhGgIF3uoTYP7th32Zej7KNQJdxzOMj+wCfy2Ox3kU7nXErJ36DtYyXDhfiqaiDRw== +jest-cli@^27.4.7: + version "27.4.7" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.4.7.tgz#d00e759e55d77b3bcfea0715f527c394ca314e5a" + integrity sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw== dependencies: - "@jest/core" "^27.4.3" - "@jest/test-result" "^27.4.2" + "@jest/core" "^27.4.7" + "@jest/test-result" "^27.4.6" "@jest/types" "^27.4.2" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.4" import-local "^3.0.2" - jest-config "^27.4.3" + jest-config "^27.4.7" jest-util "^27.4.2" - jest-validate "^27.4.2" + jest-validate "^27.4.6" prompts "^2.0.1" yargs "^16.2.0" -jest-config@^27.4.3: - version "27.4.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.4.3.tgz#7820e08f7526fa3f725423e2f0fa7888ee0ef9c9" - integrity sha512-DQ10HTSqYtC2pO7s9j2jw+li4xUnm2wLYWH2o7K1ftB8NyvToHsXoLlXxtsGh3AW9gUQR6KY/4B7G+T/NswJBw== +jest-config@^27.4.7: + version "27.4.7" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.4.7.tgz#4f084b2acbd172c8b43aa4cdffe75d89378d3972" + integrity sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw== dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^27.4.2" + "@babel/core" "^7.8.0" + "@jest/test-sequencer" "^27.4.6" "@jest/types" "^27.4.2" - babel-jest "^27.4.2" + babel-jest "^27.4.6" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.1" graceful-fs "^4.2.4" - jest-circus "^27.4.2" - jest-environment-jsdom "^27.4.3" - jest-environment-node "^27.4.2" + jest-circus "^27.4.6" + jest-environment-jsdom "^27.4.6" + jest-environment-node "^27.4.6" jest-get-type "^27.4.0" - jest-jasmine2 "^27.4.2" + jest-jasmine2 "^27.4.6" jest-regex-util "^27.4.0" - jest-resolve "^27.4.2" - jest-runner "^27.4.3" + jest-resolve "^27.4.6" + jest-runner "^27.4.6" jest-util "^27.4.2" - jest-validate "^27.4.2" + jest-validate "^27.4.6" micromatch "^4.0.4" - pretty-format "^27.4.2" + pretty-format "^27.4.6" slash "^3.0.0" -jest-diff@^27.0.0, jest-diff@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.4.2.tgz#786b2a5211d854f848e2dcc1e324448e9481f36f" - integrity sha512-ujc9ToyUZDh9KcqvQDkk/gkbf6zSaeEg9AiBxtttXW59H/AcqEYp1ciXAtJp+jXWva5nAf/ePtSsgWwE5mqp4Q== +jest-diff@^27.0.0, jest-diff@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.4.6.tgz#93815774d2012a2cbb6cf23f84d48c7a2618f98d" + integrity sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w== dependencies: chalk "^4.0.0" diff-sequences "^27.4.0" jest-get-type "^27.4.0" - pretty-format "^27.4.2" + pretty-format "^27.4.6" jest-docblock@^27.4.0: version "27.4.0" @@ -4619,40 +3697,40 @@ jest-docblock@^27.4.0: dependencies: detect-newline "^3.0.0" -jest-each@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.4.2.tgz#19364c82a692d0d26557642098d1f4619c9ee7d3" - integrity sha512-53V2MNyW28CTruB3lXaHNk6PkiIFuzdOC9gR3C6j8YE/ACfrPnz+slB0s17AgU1TtxNzLuHyvNlLJ+8QYw9nBg== +jest-each@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.4.6.tgz#e7e8561be61d8cc6dbf04296688747ab186c40ff" + integrity sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA== dependencies: "@jest/types" "^27.4.2" chalk "^4.0.0" jest-get-type "^27.4.0" jest-util "^27.4.2" - pretty-format "^27.4.2" + pretty-format "^27.4.6" -jest-environment-jsdom@^27.4.3: - version "27.4.3" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.4.3.tgz#74198285f6284888ca9c7486c4e5e67add75aa53" - integrity sha512-x1AUVz3G14LpEJs7KIFUaTINT2n0unOUmvdAby3s/sldUpJJetOJifHo1O/EUQC5fNBowggwJbVulko18y6OWw== +jest-environment-jsdom@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz#c23a394eb445b33621dfae9c09e4c8021dea7b36" + integrity sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA== dependencies: - "@jest/environment" "^27.4.2" - "@jest/fake-timers" "^27.4.2" + "@jest/environment" "^27.4.6" + "@jest/fake-timers" "^27.4.6" "@jest/types" "^27.4.2" "@types/node" "*" - jest-mock "^27.4.2" + jest-mock "^27.4.6" jest-util "^27.4.2" jsdom "^16.6.0" -jest-environment-node@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.4.2.tgz#bf5586a0924a8d21c13838121ac0941638c7d15e" - integrity sha512-nzTZ5nJ+FabuZPH2YVci7SZIHpvtNRHPt8+vipLkCnAgXGjVzHm7XJWdnNqXbAkExIgiKeVEkVMNZOZE/LeiIg== +jest-environment-node@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.4.6.tgz#ee8cd4ef458a0ef09d087c8cd52ca5856df90242" + integrity sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ== dependencies: - "@jest/environment" "^27.4.2" - "@jest/fake-timers" "^27.4.2" + "@jest/environment" "^27.4.6" + "@jest/fake-timers" "^27.4.6" "@jest/types" "^27.4.2" "@types/node" "*" - jest-mock "^27.4.2" + jest-mock "^27.4.6" jest-util "^27.4.2" jest-get-type@^26.3.0: @@ -4686,10 +3764,10 @@ jest-haste-map@^26.5.2: optionalDependencies: fsevents "^2.1.2" -jest-haste-map@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.2.tgz#7fc7d5e568cca704284f4850885b74a0b8b87587" - integrity sha512-foiyAEePORUN2eeJnOtcM1y8qW0ShEd9kTjWVL4sVaMcuCJM6gtHegvYPBRT0mpI/bs4ueThM90+Eoj2ncoNsA== +jest-haste-map@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.6.tgz#c60b5233a34ca0520f325b7e2cc0a0140ad0862a" + integrity sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ== dependencies: "@jest/types" "^27.4.2" "@types/graceful-fs" "^4.1.2" @@ -4700,58 +3778,57 @@ jest-haste-map@^27.4.2: jest-regex-util "^27.4.0" jest-serializer "^27.4.0" jest-util "^27.4.2" - jest-worker "^27.4.2" + jest-worker "^27.4.6" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.4.2.tgz#c956c88b9c05ca22afdc779deebc2890cb891797" - integrity sha512-VO/fyAJSH9u0THjbteFiL8qc93ufU+yW+bdieDc8tzTCWwlWzO53UHS5nFK1qmE8izb5Smkn+XHlVt6/l06MKQ== +jest-jasmine2@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz#109e8bc036cb455950ae28a018f983f2abe50127" + integrity sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw== dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^27.4.2" + "@jest/environment" "^27.4.6" "@jest/source-map" "^27.4.0" - "@jest/test-result" "^27.4.2" + "@jest/test-result" "^27.4.6" "@jest/types" "^27.4.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.4.2" + expect "^27.4.6" is-generator-fn "^2.0.0" - jest-each "^27.4.2" - jest-matcher-utils "^27.4.2" - jest-message-util "^27.4.2" - jest-runtime "^27.4.2" - jest-snapshot "^27.4.2" + jest-each "^27.4.6" + jest-matcher-utils "^27.4.6" + jest-message-util "^27.4.6" + jest-runtime "^27.4.6" + jest-snapshot "^27.4.6" jest-util "^27.4.2" - pretty-format "^27.4.2" + pretty-format "^27.4.6" throat "^6.0.1" -jest-leak-detector@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.4.2.tgz#7fc3120893a7a911c553f3f2bdff9faa4454abbb" - integrity sha512-ml0KvFYZllzPBJWDei3mDzUhyp/M4ubKebX++fPaudpe8OsxUE+m+P6ciVLboQsrzOCWDjE20/eXew9QMx/VGw== +jest-leak-detector@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz#ed9bc3ce514b4c582637088d9faf58a33bd59bf4" + integrity sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA== dependencies: jest-get-type "^27.4.0" - pretty-format "^27.4.2" + pretty-format "^27.4.6" -jest-matcher-utils@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.4.2.tgz#d17c5038607978a255e0a9a5c32c24e984b6c60b" - integrity sha512-jyP28er3RRtMv+fmYC/PKG8wvAmfGcSNproVTW2Y0P/OY7/hWUOmsPfxN1jOhM+0u2xU984u2yEagGivz9OBGQ== +jest-matcher-utils@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz#53ca7f7b58170638590e946f5363b988775509b8" + integrity sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA== dependencies: chalk "^4.0.0" - jest-diff "^27.4.2" + jest-diff "^27.4.6" jest-get-type "^27.4.0" - pretty-format "^27.4.2" + pretty-format "^27.4.6" -jest-message-util@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.4.2.tgz#07f3f1bf207d69cf798ce830cc57f1a849f99388" - integrity sha512-OMRqRNd9E0DkBLZpFtZkAGYOXl6ZpoMtQJWTAREJKDOFa0M6ptB7L67tp+cszMBkvSgKOhNtQp2Vbcz3ZZKo/w== +jest-message-util@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.4.6.tgz#9fdde41a33820ded3127465e1a5896061524da31" + integrity sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA== dependencies: "@babel/code-frame" "^7.12.13" "@jest/types" "^27.4.2" @@ -4759,14 +3836,14 @@ jest-message-util@^27.4.2: chalk "^4.0.0" graceful-fs "^4.2.4" micromatch "^4.0.4" - pretty-format "^27.4.2" + pretty-format "^27.4.6" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.4.2.tgz#184ff197a25491bfe4570c286daa5d62eb760b88" - integrity sha512-PDDPuyhoukk20JrQKeofK12hqtSka7mWH0QQuxSNgrdiPsrnYYLS6wbzu/HDlxZRzji5ylLRULeuI/vmZZDrYA== +jest-mock@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.4.6.tgz#77d1ba87fbd33ccb8ef1f061697e7341b7635195" + integrity sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw== dependencies: "@jest/types" "^27.4.2" "@types/node" "*" @@ -4786,40 +3863,40 @@ jest-regex-util@^27.4.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.4.0.tgz#e4c45b52653128843d07ad94aec34393ea14fbca" integrity sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg== -jest-resolve-dependencies@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.2.tgz#2f4f363cca26f75a22aefd496f9c7ae65b3de37f" - integrity sha512-hb++cTpqvOWfU49MCP/JQkxmnrhKoAVqXWFjgYXswRSVGk8Q6bDTSvhbCeYXDtXaymY0y7WrrSIlKogClcKJuw== +jest-resolve-dependencies@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz#fc50ee56a67d2c2183063f6a500cc4042b5e2327" + integrity sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw== dependencies: "@jest/types" "^27.4.2" jest-regex-util "^27.4.0" - jest-snapshot "^27.4.2" + jest-snapshot "^27.4.6" -jest-resolve@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.4.2.tgz#d3e4cbee7acb4a4f8c8bfc270767bec34d2aefaf" - integrity sha512-d/zqPjxCzMqHlOdRTg8cTpO9jY+1/T74KazT8Ws/LwmwxV5sRMWOkiLjmzUCDj/5IqA5XHNK4Hkmlq9Kdpb9Sg== +jest-resolve@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.4.6.tgz#2ec3110655e86d5bfcfa992e404e22f96b0b5977" + integrity sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw== dependencies: "@jest/types" "^27.4.2" chalk "^4.0.0" graceful-fs "^4.2.4" - jest-haste-map "^27.4.2" + jest-haste-map "^27.4.6" jest-pnp-resolver "^1.2.2" jest-util "^27.4.2" - jest-validate "^27.4.2" + jest-validate "^27.4.6" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^27.4.3: - version "27.4.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.4.3.tgz#9f05d4733829787778e8a143ade913834d0828dc" - integrity sha512-JgR6Om/j22Fd6ZUUIGTWNcCtuZVYbNrecb4k89W4UyFJoRtHpo2zMKWkmFFFJoqwWGrfrcPLnVBIgkJiTV3cyA== +jest-runner@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.4.6.tgz#1d390d276ec417e9b4d0d081783584cbc3e24773" + integrity sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg== dependencies: - "@jest/console" "^27.4.2" - "@jest/environment" "^27.4.2" - "@jest/test-result" "^27.4.2" - "@jest/transform" "^27.4.2" + "@jest/console" "^27.4.6" + "@jest/environment" "^27.4.6" + "@jest/test-result" "^27.4.6" + "@jest/transform" "^27.4.6" "@jest/types" "^27.4.2" "@types/node" "*" chalk "^4.0.0" @@ -4827,49 +3904,45 @@ jest-runner@^27.4.3: exit "^0.1.2" graceful-fs "^4.2.4" jest-docblock "^27.4.0" - jest-environment-jsdom "^27.4.3" - jest-environment-node "^27.4.2" - jest-haste-map "^27.4.2" - jest-leak-detector "^27.4.2" - jest-message-util "^27.4.2" - jest-resolve "^27.4.2" - jest-runtime "^27.4.2" + jest-environment-jsdom "^27.4.6" + jest-environment-node "^27.4.6" + jest-haste-map "^27.4.6" + jest-leak-detector "^27.4.6" + jest-message-util "^27.4.6" + jest-resolve "^27.4.6" + jest-runtime "^27.4.6" jest-util "^27.4.2" - jest-worker "^27.4.2" + jest-worker "^27.4.6" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.4.2.tgz#d72da8a0e97366c16ad515a2c437191a72600d38" - integrity sha512-eqPgcBaUNaw6j8T5M+dnfAEh6MIrh2YmtskCr9sl50QYpD22Sg+QqHw3J3nmaLzVMbBtOMHFFxLF0Qx8MsZVFQ== +jest-runtime@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.4.6.tgz#83ae923818e3ea04463b22f3597f017bb5a1cffa" + integrity sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ== dependencies: - "@jest/console" "^27.4.2" - "@jest/environment" "^27.4.2" - "@jest/globals" "^27.4.2" + "@jest/environment" "^27.4.6" + "@jest/fake-timers" "^27.4.6" + "@jest/globals" "^27.4.6" "@jest/source-map" "^27.4.0" - "@jest/test-result" "^27.4.2" - "@jest/transform" "^27.4.2" + "@jest/test-result" "^27.4.6" + "@jest/transform" "^27.4.6" "@jest/types" "^27.4.2" - "@types/yargs" "^16.0.0" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" execa "^5.0.0" - exit "^0.1.2" glob "^7.1.3" graceful-fs "^4.2.4" - jest-haste-map "^27.4.2" - jest-message-util "^27.4.2" - jest-mock "^27.4.2" + jest-haste-map "^27.4.6" + jest-message-util "^27.4.6" + jest-mock "^27.4.6" jest-regex-util "^27.4.0" - jest-resolve "^27.4.2" - jest-snapshot "^27.4.2" + jest-resolve "^27.4.6" + jest-snapshot "^27.4.6" jest-util "^27.4.2" - jest-validate "^27.4.2" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^16.2.0" jest-serializer@^26.6.2: version "26.6.2" @@ -4887,34 +3960,32 @@ jest-serializer@^27.4.0: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.4.2.tgz#bd1ea04a8fab402e5ab18b788809fa597ddff532" - integrity sha512-DI7lJlNIu6WSQ+esqhnJzEzU70+dV+cNjoF1c+j5FagWEd3KtOyZvVliAH0RWNQ6KSnAAnKSU0qxJ8UXOOhuUQ== +jest-snapshot@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.4.6.tgz#e2a3b4fff8bdce3033f2373b2e525d8b6871f616" + integrity sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" - "@babel/parser" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.4.2" + "@jest/transform" "^27.4.6" "@jest/types" "^27.4.2" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.4.2" + expect "^27.4.6" graceful-fs "^4.2.4" - jest-diff "^27.4.2" + jest-diff "^27.4.6" jest-get-type "^27.4.0" - jest-haste-map "^27.4.2" - jest-matcher-utils "^27.4.2" - jest-message-util "^27.4.2" - jest-resolve "^27.4.2" + jest-haste-map "^27.4.6" + jest-matcher-utils "^27.4.6" + jest-message-util "^27.4.6" jest-util "^27.4.2" natural-compare "^1.4.0" - pretty-format "^27.4.2" + pretty-format "^27.4.6" semver "^7.3.2" jest-util@^26.6.2: @@ -4953,24 +4024,24 @@ jest-validate@^26.5.2: leven "^3.1.0" pretty-format "^26.6.2" -jest-validate@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.4.2.tgz#eecfcc1b1c9429aa007da08a2bae4e32a81bbbc3" - integrity sha512-hWYsSUej+Fs8ZhOm5vhWzwSLmVaPAxRy+Mr+z5MzeaHm9AxUpXdoVMEW4R86y5gOobVfBsMFLk4Rb+QkiEpx1A== +jest-validate@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.4.6.tgz#efc000acc4697b6cf4fa68c7f3f324c92d0c4f1f" + integrity sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ== dependencies: "@jest/types" "^27.4.2" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^27.4.0" leven "^3.1.0" - pretty-format "^27.4.2" + pretty-format "^27.4.6" -jest-watcher@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.4.2.tgz#c9037edfd80354c9fe90de4b6f8b6e2b8e736744" - integrity sha512-NJvMVyyBeXfDezhWzUOCOYZrUmkSCiatpjpm+nFUid74OZEHk6aMLrZAukIiFDwdbqp6mTM6Ui1w4oc+8EobQg== +jest-watcher@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.4.6.tgz#673679ebeffdd3f94338c24f399b85efc932272d" + integrity sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw== dependencies: - "@jest/test-result" "^27.4.2" + "@jest/test-result" "^27.4.6" "@jest/types" "^27.4.2" "@types/node" "*" ansi-escapes "^4.2.1" @@ -4987,23 +4058,23 @@ jest-worker@^26.0.0, jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.2.tgz#0fb123d50955af1a450267787f340a1bf7e12bc4" - integrity sha512-0QMy/zPovLfUPyHuOuuU4E+kGACXXE84nRnq6lBVI9GJg5DCBiA97SATi+ZP8CpiJwEQy1oCPjRBf8AnLjN+Ag== +jest-worker@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" + integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^27.4.3: - version "27.4.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.4.3.tgz#cf7d1876a84c70efece2e01e4f9dfc2e464d9cbb" - integrity sha512-jwsfVABBzuN3Atm+6h6vIEpTs9+VApODLt4dk2qv1WMOpb1weI1IIZfuwpMiWZ62qvWj78MvdvMHIYdUfqrFaA== +jest@^27.4.7: + version "27.4.7" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.4.7.tgz#87f74b9026a1592f2da05b4d258e57505f28eca4" + integrity sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg== dependencies: - "@jest/core" "^27.4.3" + "@jest/core" "^27.4.7" import-local "^3.0.2" - jest-cli "^27.4.3" + jest-cli "^27.4.7" jetifier@^1.6.2, jetifier@^1.6.6: version "1.6.8" @@ -5011,9 +4082,9 @@ jetifier@^1.6.2, jetifier@^1.6.6: integrity sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw== joi@^17.2.1: - version "17.5.0" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.5.0.tgz#7e66d0004b5045d971cf416a55fb61d33ac6e011" - integrity sha512-R7hR50COp7StzLnDi4ywOXHrBrgNXuUUfJWIR5lPY5Bm/pOD3jZaTwpluUXVLRWcoWZxkrHBBJ5hLxgnlehbdw== + version "17.6.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.0.tgz#0bb54f2f006c09a96e75ce687957bd04290054b2" + integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -5107,16 +4178,6 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -5127,11 +4188,6 @@ json-parse-even-better-errors@^2.3.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== -json-stringify-safe@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - json5@^2.1.2, json5@^2.1.3: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" @@ -5167,25 +4223,6 @@ jsonify@~0.0.0: resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -keyv@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.4.tgz#f040b236ea2b06ed15ed86fbef8407e1a1c8e376" - integrity sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg== - dependencies: - json-buffer "3.0.1" - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -5205,7 +4242,7 @@ kind-of@^5.0.0: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -5222,13 +4259,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -latest-version@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -5247,24 +4277,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -5285,17 +4297,12 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= -lodash.ismatch@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" - integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= - lodash.throttle@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= -lodash@4.17.21, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5307,14 +4314,6 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - logkitty@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/logkitty/-/logkitty-0.7.1.tgz#8e8d62f4085a826e8d38987722570234e33c6aa7" @@ -5331,16 +4330,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -5348,11 +4337,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -macos-release@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.5.0.tgz#067c2c88b5f3fb3c56a375b2ec93826220fa1ff2" - integrity sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g== - make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -5380,16 +4364,6 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" - integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -5397,29 +4371,12 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -meow@^8.0.0: - version "8.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" - integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== - dependencies: - "@types/minimist" "^1.2.0" - camelcase-keys "^6.2.2" - decamelize-keys "^1.1.0" - hard-rejection "^2.1.0" - minimist-options "4.1.0" - normalize-package-data "^3.0.0" - read-pkg-up "^7.0.1" - redent "^3.0.0" - trim-newlines "^3.0.0" - type-fest "^0.18.0" - yargs-parser "^20.2.3" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -5722,7 +4679,7 @@ mime-db@1.51.0, "mime-db@>= 1.43.0 < 2": resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== -mime-types@2.1.34, mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.24: version "2.1.34" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== @@ -5749,21 +4706,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -min-indent@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -5771,15 +4713,6 @@ minimatch@^3.0.2, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist-options@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" - integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - kind-of "^6.0.3" - minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -5800,30 +4733,20 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.5" -modify-values@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" - integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== nanomatch@^1.2.9: version "1.2.13" @@ -5852,18 +4775,11 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0: +neo-async@^2.5.0: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -new-github-release-url@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/new-github-release-url/-/new-github-release-url-1.0.0.tgz#493847e6fecce39c247e9d89929be773d2e7f777" - integrity sha512-dle7yf655IMjyFUqn6Nxkb18r4AOAkzRcgcZv6WZ0IqrOH4QCEZ8Sm6I7XX21zvHdBeeMeTkhR9qT2Z0EJDx6A== - dependencies: - type-fest "^0.4.1" - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -5881,10 +4797,10 @@ node-dir@^0.1.17: dependencies: minimatch "^3.0.2" -node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1: - version "2.6.6" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" - integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== +node-fetch@^2.2.0, node-fetch@^2.6.0: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" @@ -5903,26 +4819,6 @@ node-stream-zip@^1.9.1: resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== -normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -5935,16 +4831,6 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - -normalize-url@^6.0.1, normalize-url@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -5988,11 +4874,6 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b" - integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== - object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -6056,15 +4937,7 @@ onetime@^5.1.0, onetime@^5.1.2: mimic-fn "^2.1.0" "onnxruntime-common@file:../common": - version "1.10.0" - -open@7.4.2: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" + version "1.11.0" open@^6.2.0: version "6.4.0" @@ -6090,21 +4963,6 @@ options@>=0.0.5: resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" integrity sha1-7CLTEoBrtT5zF3Pnza788cZDEo8= -ora@5.4.1, ora@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - ora@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" @@ -6114,44 +4972,19 @@ ora@^3.4.0: cli-cursor "^2.1.0" cli-spinners "^2.0.0" log-symbols "^2.2.0" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - -os-name@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-4.0.1.tgz#32cee7823de85a8897647ba4d76db46bf845e555" - integrity sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw== - dependencies: - macos-release "^2.5.0" - windows-release "^4.0.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -6159,13 +4992,6 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -6187,26 +5013,11 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -6214,16 +5025,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@5.2.0, parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -6232,25 +5033,15 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-path@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf" - integrity sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA== - dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" - qs "^6.9.4" - query-string "^6.13.8" - -parse-url@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-6.0.0.tgz#f5dd262a7de9ec00914939220410b66cff09107d" - integrity sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw== +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: - is-ssh "^1.3.0" - normalize-url "^6.1.0" - parse-path "^4.0.0" - protocols "^1.4.0" + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" parse5@6.0.1: version "6.0.1" @@ -6292,18 +5083,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -6315,29 +5099,19 @@ picocolors@^1.0.0: integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pirates@^4.0.0, pirates@^4.0.1: - version "4.0.4" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.4.tgz#07df81e61028e402735cdd49db701e4885b4e6e6" - integrity sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw== +pirates@^4.0.0, pirates@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" + integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== pkg-dir@^3.0.0: version "3.0.0" @@ -6361,10 +5135,10 @@ plist@^3.0.2, plist@^3.0.4: base64-js "^1.5.1" xmlbuilder "^9.0.7" -pod-install@^0.1.0: - version "0.1.29" - resolved "https://registry.yarnpkg.com/pod-install/-/pod-install-0.1.29.tgz#43222b5ebe9006ebf13134b25495bcede7de2f7a" - integrity sha512-fSU1bciYWXEvcDFwTKj8gBL8dYNvxPgibxhT5Z4I67AsHXH56uyPk2hE/HiH1pSkQ7ECWMAR1E0HX066T0RZ8Q== +pod-install@^0.1.31: + version "0.1.31" + resolved "https://registry.yarnpkg.com/pod-install/-/pod-install-0.1.31.tgz#f6b79ef8675eece97a87ad03bd33d765c7a1b019" + integrity sha512-iSSQD5Y4nNGEs0j8X7MwfTPPiF7YEvsG/2d861gs4ijlzHM5gq7FwtSBoMEAnaGLn4jws5mFXsOIrzdz4i/AMg== posix-character-classes@^0.1.0: version "0.1.1" @@ -6376,19 +5150,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-file/-/prepend-file-2.0.0.tgz#2d3256376a64ca3b5640153890a89cadbebaf1a9" - integrity sha512-U6on3jv5hQ+CNEO7gFn00PUlm3F/oXIQTMg6jpeQTQHLYSZl/Cxb4NpH44FA0By+maPXpfUaqmCoPUTu/Z3/8g== - dependencies: - path-exists "^4.0.0" - temp-write "^4.0.0" - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - prettier@^2.0.5: version "2.5.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" @@ -6404,12 +5165,11 @@ pretty-format@^26.5.2, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.0, pretty-format@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.2.tgz#e4ce92ad66c3888423d332b40477c87d1dac1fb8" - integrity sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw== +pretty-format@^27.0.0, pretty-format@^27.4.6: + version "27.4.6" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" + integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g== dependencies: - "@jest/types" "^27.4.2" ansi-regex "^5.0.1" ansi-styles "^5.0.0" react-is "^17.0.1" @@ -6435,18 +5195,13 @@ prompts@^2.0.1, prompts@^2.4.0: sisteransi "^1.0.5" prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" - react-is "^16.8.1" - -protocols@^1.1.0, protocols@^1.4.0: - version "1.4.8" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" - integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== + react-is "^16.13.1" psl@^1.1.33: version "1.8.0" @@ -6466,74 +5221,25 @@ punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -pupa@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - -q@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@^6.9.4: - version "6.10.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.2.tgz#c1431bea37fc5b24c5bdbafa20f16bdf2a4b9ffe" - integrity sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw== - dependencies: - side-channel "^1.0.4" - -query-string@^6.13.8: - version "6.14.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" - integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== - dependencies: - decode-uri-component "^0.2.0" - filter-obj "^1.1.0" - split-on-first "^1.0.0" - strict-uri-encode "^2.0.0" - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -quick-lru@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" - integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-devtools-core@^4.13.0: - version "4.21.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.21.0.tgz#a54c9a0fd7261491e616d6c87d1869e011d8521d" - integrity sha512-clGWwJHV5MHwTwYyKc+7FZHwzdbzrD2/AoZSkicUcr6YLc3Za9a9FaLhccWDHfjQ+ron9yzNhDT6Tv+FiPkD3g== +react-devtools-core@4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.19.1.tgz#bc37c2ef2f48f28c6af4c7292be9dca1b63deace" + integrity sha512-2wJiGffPWK0KggBjVwnTaAk+Z3MSxKInHmdzPTrBh1mAarexsa93Kw+WMX88+XjN+TtYgAiLe9xeTqcO5FfJTw== dependencies: shell-quote "^1.6.1" ws "^7" -react-is@^16.8.1: +react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -6570,26 +5276,26 @@ react-native-builder-bob@^0.18.2: optionalDependencies: jetifier "^1.6.6" -react-native-codegen@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.7.tgz#86651c5c5fec67a8077ef7f4e36f7ed459043e14" - integrity sha512-dwNgR8zJ3ALr480QnAmpTiqvFo+rDtq6V5oCggKhYFlRjzOmVSFn3YD41u8ltvKS5G2nQ8gCs2vReFFnRGLYng== +react-native-codegen@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.8.tgz#b7796a54074139d956fff2862cf1285db43c891b" + integrity sha512-k/944+0XD+8l7zDaiKfYabyEKmAmyZgS1mj+4LcSRPyHnrjgCHKrh/Y6jM6kucQ6xU1+1uyMmF/dSkikxK8i+Q== dependencies: flow-parser "^0.121.0" jscodeshift "^0.11.0" nullthrows "^1.1.1" -react-native@0.66.3: - version "0.66.3" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.66.3.tgz#25c7c4c7d81867326b3eb7a36f0fe6a61fa4104e" - integrity sha512-B/dQpuvta9YvF5MihDWefoGlTvxzUHK5X5RjdrXHAu/ihTehJXxEA+m6z/tufp1ZUMDjU+tMZK6gnehzCuYfzw== +react-native@^0.67.2: + version "0.67.2" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.67.2.tgz#312224bc2271c3cecd374d4bc425619cff4ea5dc" + integrity sha512-grEtpOLLvtSg8Bivg0ffVRCjTkresqMt7Jdog/geF6VAYhb4RnLaaUCWvyrfyB9buf135FKnqg5BIuve/XQNXA== dependencies: "@jest/create-cache-key-function" "^27.0.1" "@react-native-community/cli" "^6.0.0" "@react-native-community/cli-platform-android" "^6.0.0" "@react-native-community/cli-platform-ios" "^6.0.0" "@react-native/assets" "1.0.0" - "@react-native/normalize-color" "1.0.0" + "@react-native/normalize-color" "2.0.0" "@react-native/polyfills" "2.0.0" abort-controller "^3.0.0" anser "^1.4.9" @@ -6598,7 +5304,6 @@ react-native@0.66.3: hermes-engine "~0.9.0" invariant "^2.2.4" jsc-android "^250230.2.1" - metro-babel-register "0.66.2" metro-react-native-babel-transformer "0.66.2" metro-runtime "0.66.2" metro-source-map "0.66.2" @@ -6606,8 +5311,8 @@ react-native@0.66.3: pretty-format "^26.5.2" promise "^8.0.3" prop-types "^15.7.2" - react-devtools-core "^4.13.0" - react-native-codegen "^0.0.7" + react-devtools-core "4.19.1" + react-native-codegen "^0.0.8" react-refresh "^0.4.0" regenerator-runtime "^0.13.2" scheduler "^0.20.2" @@ -6621,7 +5326,7 @@ react-refresh@^0.4.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== -react@17.0.2: +react@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== @@ -6629,51 +5334,6 @@ react@17.0.2: loose-envify "^1.1.0" object-assign "^4.1.1" -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -6702,21 +5362,6 @@ recast@^0.20.3: source-map "~0.6.1" tslib "^2.0.1" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= - dependencies: - resolve "^1.1.6" - -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - regenerate-unicode-properties@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" @@ -6761,20 +5406,6 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - regjsgen@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" @@ -6787,41 +5418,6 @@ regjsparser@^0.7.0: dependencies: jsesc "~0.5.0" -release-it@^14.2.2: - version "14.11.8" - resolved "https://registry.yarnpkg.com/release-it/-/release-it-14.11.8.tgz#6da25daa93286d832cae4f10008a3bf0c08c2725" - integrity sha512-951DJ0kwjwU7CwGU3BCvRBgLxuJsOPRrZkqx0AsugJdSyPpUdwY9nlU0RAoSKqgh+VTerzecXLIIwgsGIpNxlA== - dependencies: - "@iarna/toml" "2.2.5" - "@octokit/rest" "18.12.0" - async-retry "1.3.3" - chalk "4.1.2" - cosmiconfig "7.0.1" - debug "4.3.2" - deprecated-obj "2.0.0" - execa "5.1.1" - form-data "4.0.0" - git-url-parse "11.6.0" - globby "11.0.4" - got "11.8.3" - import-cwd "3.0.0" - inquirer "8.2.0" - is-ci "3.0.1" - lodash "4.17.21" - mime-types "2.1.34" - new-github-release-url "1.0.0" - open "7.4.2" - ora "5.4.1" - os-name "4.0.1" - parse-json "5.2.0" - semver "7.3.5" - shelljs "0.8.4" - update-notifier "5.1.0" - url-join "4.0.1" - uuid "8.3.2" - yaml "1.10.2" - yargs-parser "20.2.9" - remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -6847,11 +5443,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -6884,27 +5475,14 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - -responselike@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" - integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== +resolve@^1.14.2, resolve@^1.20.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" + integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== dependencies: - lowercase-keys "^2.0.0" + is-core-module "^2.8.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" restore-cursor@^2.0.0: version "2.0.0" @@ -6914,24 +5492,11 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -retry@0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -6968,11 +5533,6 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6980,23 +5540,11 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@^7.2.0: - version "7.4.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" - integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== - dependencies: - tslib "~2.1.0" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -7044,39 +5592,32 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: +semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@7.3.5, semver@^7.3.2, semver@^7.3.4: +semver@^7.3.2: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" + integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== dependencies: debug "2.6.9" depd "~1.1.2" @@ -7085,9 +5626,9 @@ send@0.17.1: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.7.2" + http-errors "1.8.1" mime "1.6.0" - ms "2.1.1" + ms "2.1.3" on-finished "~2.3.0" range-parser "~1.2.1" statuses "~1.5.0" @@ -7098,14 +5639,14 @@ serialize-error@^2.1.0: integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= serve-static@^1.13.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + version "1.14.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" + integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" + send "0.17.2" set-blocking@^2.0.0: version "2.0.0" @@ -7122,10 +5663,10 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: version "3.0.1" @@ -7173,24 +5714,6 @@ shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== -shelljs@0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.6" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" @@ -7293,37 +5816,6 @@ source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== - -split-on-first@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" - integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== - split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -7331,20 +5823,6 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -7387,11 +5865,6 @@ stream-buffers@2.2.x: resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= -strict-uri-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= - string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -7400,7 +5873,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7409,13 +5882,6 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -7437,11 +5903,6 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" @@ -7457,18 +5918,6 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - sudo-prompt@^9.0.0: version "9.2.1" resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" @@ -7503,27 +5952,16 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -temp-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" - integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= - -temp-write@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-4.0.0.tgz#cd2e0825fc826ae72d201dc26eef3bf7e6fc9320" - integrity sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw== - dependencies: - graceful-fs "^4.1.15" - is-stream "^2.0.0" - make-dir "^3.0.0" - temp-dir "^1.0.0" - uuid "^3.3.2" - temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -7556,11 +5994,6 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-extensions@^1.0.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" - integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== - throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -7571,7 +6004,7 @@ throat@^6.0.1: resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== -through2@^2.0.0, through2@^2.0.1: +through2@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -7579,25 +6012,6 @@ through2@^2.0.0, through2@^2.0.1: readable-stream "~2.3.6" xtend "~4.0.1" -through2@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -through@2, "through@>=2.2.7 <3", through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -7615,11 +6029,6 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -7645,10 +6054,10 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tough-cookie@^4.0.0: version "4.0.0" @@ -7671,21 +6080,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= -trim-newlines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" - integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== - tslib@^2.0.1: version "2.3.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== -tslib@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== - type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -7698,41 +6097,16 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.18.0: - version "0.18.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" - integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -type-fest@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8" - integrity sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - type-fest@^0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -7740,15 +6114,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@^4.1.3: - version "4.5.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998" - integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw== +typescript@^4.5.5: + version "4.5.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" + integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== uglify-es@^3.1.9: version "3.3.9" @@ -7758,11 +6127,6 @@ uglify-es@^3.1.9: commander "~2.13.0" source-map "~0.6.1" -uglify-js@^3.1.4: - version "3.14.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.4.tgz#68756f17d1b90b9d289341736cb9a567d6882f90" - integrity sha512-AbiSR44J0GoCeV81+oxcy/jDOElO2Bx3d0MfQCUShq7JRXaM4KtQopZsq2vFv8bCq2yMaGrw1FgygUd03RyRDA== - ultron@1.0.x: version "1.0.2" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" @@ -7806,18 +6170,6 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -7841,43 +6193,11 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -update-notifier@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" - integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== - dependencies: - boxen "^5.0.0" - chalk "^4.1.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.4.0" - is-npm "^5.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.1.0" - pupa "^2.1.1" - semver "^7.3.4" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-join@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - use-subscription@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.5.1.tgz#73501107f02fad84c6dd57965beb0b75c68c42d1" @@ -7890,7 +6210,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -7900,33 +6220,20 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-to-istanbul@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.0.tgz#0aeb763894f1a0a1676adf8a8b7612a38902446c" - integrity sha512-/PRhfd8aTNp9Ggr62HPzXg2XasNFGy5PBt0Rp04du7/8GNNSgxFL6WBTkgMKSL9bFjH+8kKEG3f37FmxiTqUUA== + version "8.1.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" + integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" source-map "^0.7.3" -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -8033,30 +6340,11 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -windows-release@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-4.0.0.tgz#4725ec70217d1bf6e02c7772413b29cdde9ec377" - integrity sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg== - dependencies: - execa "^4.0.2" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -8127,11 +6415,6 @@ xcode@^2.0.0: simple-plist "^1.0.0" uuid "^3.3.2" -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -8174,16 +6457,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@1.10.2, yaml@^1.10.0: +yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@20.2.9, yargs-parser@^20.2.2, yargs-parser@^20.2.3: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^18.1.2: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" @@ -8192,6 +6470,11 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + yargs@^15.1.0, yargs@^15.3.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" From 97b8f6f394ae02c73ed775f456fd85639c91ced1 Mon Sep 17 00:00:00 2001 From: Rachel Guo <35738743+YUNQIUGUO@users.noreply.github.com> Date: Wed, 2 Feb 2022 15:54:19 -0800 Subject: [PATCH 17/56] Add logic to NNAPI EP to exclude pre-processing involving dynamic shapes when partitioning (#10452) * wip * wip * wip * save * address pr comments * address pr comments Co-authored-by: rachguo --- .../nnapi/nnapi_builtin/builders/helper.cc | 21 -------- .../nnapi/nnapi_builtin/builders/helper.h | 3 -- .../builders/op_support_checker.cc | 21 +++++--- .../nnapi_builtin/nnapi_execution_provider.cc | 7 --- .../test/providers/nnapi/nnapi_basic_test.cc | 32 ++++++++++++ .../testdata/ep_dynamic_graph_input_test.onnx | Bin 0 -> 314 bytes .../testdata/ep_dynamic_graph_input_test.py | 47 ++++++++++++++++++ 7 files changed, 94 insertions(+), 37 deletions(-) create mode 100644 onnxruntime/test/testdata/ep_dynamic_graph_input_test.onnx create mode 100644 onnxruntime/test/testdata/ep_dynamic_graph_input_test.py diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc index ee220b2a7ee45..1017d339a623f 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc @@ -519,27 +519,6 @@ bool IsNodeSupportedInGroup(const NodeUnit& node_unit, const GraphViewer& graph_ return true; } -bool IsInputSupported(const NodeArg& input, const std::string& parent_name) { - const auto& input_name = input.Name(); - const auto* shape_proto = input.Shape(); - // We do not support input with no shape - if (!shape_proto) { - LOGS_DEFAULT(VERBOSE) << "Input [" << input_name << "] of [" << parent_name - << "] has no shape"; - return false; - } - - for (const auto& dim : shape_proto->dim()) { - // For now we do not support dynamic shape - if (!dim.has_dim_value()) { - LOGS_DEFAULT(WARNING) << "Dynamic shape is not supported for now, for input:" << input_name; - return false; - } - } - - return true; -} - std::string Shape2String(const std::vector& shape) { std::ostringstream os; os << "[ "; diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h index c5b3e1106d966..c861968869542 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h @@ -147,9 +147,6 @@ bool IsNodeSupportedInGroup(const NodeUnit& node_unit, const GraphViewer& graph_ const OpSupportCheckParams& params, const std::unordered_set& node_outputs_in_group); -// If a graph input is supported by NNAPI -bool IsInputSupported(const NodeArg& input, const std::string& parent_name); - // If an NNAPI partition node group is valid bool IsValidSupportedNodeGroup(const std::vector& supported_node_group); diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc index a8b299e6d1ba8..5c132f42958c5 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc @@ -153,26 +153,35 @@ bool BaseOpSupportChecker::IsOpSupported(const InitializedTensorSet& initializer bool BaseOpSupportChecker::HasSupportedInputs(const NodeUnit& node_unit) const { // We do not support unknown(null) input shape - auto has_shape = [](const NodeArg& node_arg, const std::string& name, const std::string op_type) { - if (!node_arg.Shape()) { + auto has_supported_shape = [](const NodeArg& node_arg, const std::string& name, const std::string op_type) { + const auto* shape_proto = node_arg.Shape(); + if (!shape_proto) { LOGS_DEFAULT(VERBOSE) << "Node [" << name << "] type [" << op_type << "] Input [" << node_arg.Name() << "] has no shape"; return false; } + + // We do not support dynamic shape input for now + for (const auto& dim : shape_proto->dim()) { + if (!dim.has_dim_value()) { + LOGS_DEFAULT(VERBOSE) << "Dynamic shape is not supported for now, for input:" << node_arg.Name(); + return false; + } + } return true; }; for (const auto& input : node_unit.Inputs()) { - if (!has_shape(input.node_arg, node_unit.Name(), node_unit.OpType())) + if (!has_supported_shape(input.node_arg, node_unit.Name(), node_unit.OpType())) return false; if (input.quant_param.has_value()) { - if (!has_shape(input.quant_param->scale, node_unit.Name(), node_unit.OpType())) + if (!has_supported_shape(input.quant_param->scale, node_unit.Name(), node_unit.OpType())) return false; // zero point is optional if (input.quant_param->zero_point && - !has_shape(*input.quant_param->zero_point, node_unit.Name(), node_unit.OpType())) + !has_supported_shape(*input.quant_param->zero_point, node_unit.Name(), node_unit.OpType())) return false; } } @@ -1681,7 +1690,7 @@ bool FlattenOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& /* i GetFlattenOutputShape(node_unit, input_shape, dim_1, dim_2); if (dim_1 == 0 && dim_2 == 0) { - LOGS_DEFAULT(VERBOSE) << "The dynamical input shape " << Shape2String(input_shape) + LOGS_DEFAULT(VERBOSE) << "The dynamic input shape " << Shape2String(input_shape) << " is not supported"; return false; } diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/nnapi_execution_provider.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/nnapi_execution_provider.cc index 32fffec7395b3..4ff0b41a51773 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/nnapi_execution_provider.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/nnapi_execution_provider.cc @@ -110,13 +110,6 @@ NnapiExecutionProvider::GetCapability(const onnxruntime::GraphViewer& graph_view return result; } - // Disable NNAPI if the graph has any unsupported inputs - for (const auto* input : graph_viewer.GetInputs()) { - if (!nnapi::IsInputSupported(*input, "graph")) { - return result; - } - } - // Get all the NodeUnits in the graph_viewer std::vector> node_unit_holder; std::unordered_map node_unit_map; diff --git a/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc b/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc index d0cd2bb786653..c59efaae76e92 100644 --- a/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc +++ b/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc @@ -76,6 +76,38 @@ TEST(NnapiExecutionProviderTest, ReshapeFlattenTest) { #endif } +// Since NNAPI EP does not support dynamic shape input and we now switch from the approach of immediately rejecting +// the whole graph in NNAPI EP if it has a dynamic input to check at individual operator support check level, we have a +// separated test here. +// Please see BaseOpBuilder::HasSupportedInputs in /onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc +TEST(NnapiExecutionProviderTest, DynamicGraphInputTest) { + const ORTCHAR_T* model_file_name = ORT_TSTR("testdata/ep_dynamic_graph_input_test.onnx"); + +#if defined(__ANDROID__) + std::vector dims_mul_x = {1, 1, 4, 4}; + std::vector values_mul_x = {1.0f, 2.0f, 3.0f, 4.0f, 1.0f, 2.0f, 3.0f, 4.0f, 1.0f, 2.0f, 3.0f, 4.0f, 1.0f, 2.0f, 3.0f, 4.0f}; + OrtValue ml_value_x; + CreateMLValue(TestNnapiExecutionProvider()->GetAllocator(0, OrtMemTypeDefault), dims_mul_x, values_mul_x, + &ml_value_x); + + NameMLValMap feeds; + feeds.insert(std::make_pair("X", ml_value_x)); + + RunAndVerifyOutputsWithEP(model_file_name, "NnapiExecutionProviderTest.DynamicGraphInputTest", + std::make_unique(0), + feeds); +#else + // test load only + SessionOptions so; + InferenceSessionWrapper session_object{so, GetEnvironment()}; + ASSERT_STATUS_OK(session_object.RegisterExecutionProvider(std::make_unique(0))); + ASSERT_STATUS_OK(session_object.Load(model_file_name)); + ASSERT_STATUS_OK(session_object.Initialize()); + ASSERT_EQ(CountAssignedNodes(session_object.GetGraph(), kNnapiExecutionProvider), 1) + << "Exactly one node (Add) should have been taken by the NNAPI EP"; +#endif +} + // This is to test the uint8 handling of operators without "QLinear" such as Concat and Transpose // NNAPI will require scale and zero point for inputs of all quantized operations // For these operators without "Qlinear", there is no information about the scale and zero point, we can diff --git a/onnxruntime/test/testdata/ep_dynamic_graph_input_test.onnx b/onnxruntime/test/testdata/ep_dynamic_graph_input_test.onnx new file mode 100644 index 0000000000000000000000000000000000000000..67f0d39f526e40b9a4029f51ff46919b22eb2d33 GIT binary patch literal 314 zcmd;Jx7x_W<-^4o!NmZCd_k$jnN_LrhVdY(Sco6a&o3=0C@qoVD1s_bVuMI&32?FG z=BK18u_l)$WhO6RWaiT5Lf6K{?U<4hZxo-I2Q)*7F;a>-F(pNb87L?u?HUm8Qkj>S zo0%N%UX)mn5$_376d#gWT%sk#!6LwJ#lpzQ%0ChQej|duxDUk zZ~!78ZUEv1Kzsm*9{@3fBLjngqZ6_tqU3>I7LwwU;9wLI;bInIG=vj=AeLW}G#6u} YkQkQ;P=Np!69*#{GXrU6Cnf/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc +def GenerateModel(model_name): + nodes = [ + helper.make_node("Resize", ["X", "", "", "Resize_1_sizes"], [ + "Resize_1_output"], "resize_1", mode="cubic"), + helper.make_node( + "Add", ["Resize_1_output", "Add_2_input"], ["Y"], "add"), + ] + + initializers = [ + helper.make_tensor('Resize_1_sizes', TensorProto.INT64, [ + 4], [1, 1, 3, 3]), + helper.make_tensor('Add_2_input', TensorProto.FLOAT, [1, 1, 3, 3], [ + 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]) + ] + + inputs = [ + helper.make_tensor_value_info( + 'X', TensorProto.FLOAT, ["1", "1", "N", "N"]), # used dim_param here + ] + + outputs = [ + helper.make_tensor_value_info('Y', TensorProto.FLOAT, [1, 1, 3, 3]), + ] + + graph = helper.make_graph( + nodes, + "EP_Dynamic_Graph_Input_Test", + inputs, + outputs, + initializers + ) + + model = helper.make_model(graph) + onnx.save(model, model_name) + + +if __name__ == "__main__": + GenerateModel('ep_dynamic_graph_input_test.onnx') From a405658370cc05989209c6608ff9f591799c84ae Mon Sep 17 00:00:00 2001 From: Yi-Hong Lyu Date: Thu, 3 Feb 2022 10:29:30 +0800 Subject: [PATCH 18/56] Fuse Clip->Q to Q (#10434) * Fuse Clip->Q to Q * Remove unused variable argmax_node * Remove braces around scalar initializer * Move GetClipConstantMinMax under ORT_MINIMAL_BUILD * Consider epsilon so we can fuse more cases --- .../core/optimizer/conv_activation_fusion.cc | 65 +---------- .../core/optimizer/graph_transformer_utils.cc | 2 + .../qdq_transformer/clip_quantizelinear.cc | 107 ++++++++++++++++++ .../qdq_transformer/clip_quantizelinear.h | 29 +++++ onnxruntime/core/optimizer/utils.cc | 62 +++++++++- onnxruntime/core/optimizer/utils.h | 5 + .../test/optimizer/qdq_transformer_test.cc | 75 ++++++++++++ 7 files changed, 280 insertions(+), 65 deletions(-) create mode 100644 onnxruntime/core/optimizer/qdq_transformer/clip_quantizelinear.cc create mode 100644 onnxruntime/core/optimizer/qdq_transformer/clip_quantizelinear.h diff --git a/onnxruntime/core/optimizer/conv_activation_fusion.cc b/onnxruntime/core/optimizer/conv_activation_fusion.cc index da5a0f0c1e293..94211ab1b4d8e 100644 --- a/onnxruntime/core/optimizer/conv_activation_fusion.cc +++ b/onnxruntime/core/optimizer/conv_activation_fusion.cc @@ -5,73 +5,12 @@ #include "core/graph/graph_utils.h" #include "core/optimizer/conv_activation_fusion.h" #include "core/optimizer/initializer.h" +#include "core/optimizer/utils.h" using namespace ONNX_NAMESPACE; using namespace ::onnxruntime::common; namespace onnxruntime { -namespace { -// get min/max values from Clip if they are constant. Returns false if mutable and cannot be used -static bool GetClipConstantMinMax(const Graph& graph, const Node& node, float& min, float& max) { - min = std::numeric_limits::lowest(); - max = std::numeric_limits::max(); - - // Clip opset 6 has min and max as attributes. they're inputs from opset 11 on. - bool min_max_are_attributes = graph_utils::IsSupportedOptypeVersionAndDomain(node, "Clip", {6}); - bool min_max_are_constant_values = true; - - if (min_max_are_attributes) { - min = graph_utils::GetNodeAttribute(node, "min")->f(); - max = graph_utils::GetNodeAttribute(node, "max")->f(); - } else { - // update min/max if provided via a constant initializer - // return true if value is default or coming from a constant initializer and update 'value' - // return false if value is mutable - auto update_if_constant_value = [&graph](const Node& node, size_t input_idx, float& value) { - const auto& input_defs = node.InputDefs(); - const NodeArg* input = (input_defs.size() > input_idx) ? input_defs[input_idx] : nullptr; - - if (input == nullptr || !input->Exists()) { - // optional input not specified so using default value - return true; - } - - bool is_constant = true; - const ONNX_NAMESPACE::TensorProto* initializer = graph_utils::GetConstantInitializer(graph, input->Name()); - if (initializer) { - Initializer i(*initializer, graph.ModelPath()); - switch (initializer->data_type()) { - case ONNX_NAMESPACE::TensorProto_DataType_FLOAT: - value = *i.data(); - break; - // double isn't currently supported - //case ONNX_NAMESPACE::TensorProto_DataType_DOUBLE: - // value = static_cast(*i.data()); - // break; - case ONNX_NAMESPACE::TensorProto_DataType_FLOAT16: - value = math::halfToFloat(i.data()->val); - break; - default: - ORT_THROW("Unexpected data type for Clip input of ", initializer->data_type()); - } - } else { - is_constant = false; - } - - return is_constant; - }; - - // 'min' is input 1, 'max' is input 2. both are optional. - // if the input is constant, 'min' or 'max' is updated by the call to get_if_constant_value - min_max_are_constant_values = update_if_constant_value(node, 1, min) && - update_if_constant_value(node, 2, max); - } - - return min_max_are_constant_values; -} - -} // namespace - Status ConvActivationFusion::ApplyImpl(Graph& graph, bool& modified, int graph_level, const logging::Logger& logger) const { GraphViewer graph_viewer(graph); const auto& order = graph_viewer.GetNodesInTopologicalOrder(); @@ -173,7 +112,7 @@ Status ConvActivationFusion::ApplyImpl(Graph& graph, bool& modified, int graph_l activation_params.push_back(graph_utils::GetNodeAttribute(next_node, "alpha")->f()); } else if (graph_utils::IsSupportedOptypeVersionAndDomain(next_node, "Clip", {6, 11, 12, 13})) { float min, max; - if (GetClipConstantMinMax(graph, next_node, min, max)) { + if (optimizer_utils::GetClipConstantMinMax(graph, next_node, min, max)) { activation_params.push_back(min); activation_params.push_back(max); } else { diff --git a/onnxruntime/core/optimizer/graph_transformer_utils.cc b/onnxruntime/core/optimizer/graph_transformer_utils.cc index ad1da8a266642..0f1d5324098a3 100644 --- a/onnxruntime/core/optimizer/graph_transformer_utils.cc +++ b/onnxruntime/core/optimizer/graph_transformer_utils.cc @@ -44,6 +44,7 @@ #include "core/optimizer/nhwc_transformer.h" #include "core/optimizer/noop_elimination.h" #include "core/optimizer/not_where_fusion.h" +#include "core/optimizer/qdq_transformer/clip_quantizelinear.h" #include "core/optimizer/qdq_transformer/qdq_propagation.h" #include "core/optimizer/qdq_transformer/qdq_s8_to_u8.h" #include "core/optimizer/qdq_transformer/relu_quantizelinear.h" @@ -99,6 +100,7 @@ std::vector> GenerateRewriteRules( rules.push_back(std::make_unique()); rules.push_back(std::make_unique()); rules.push_back(std::make_unique()); + rules.push_back(std::make_unique()); rules.push_back(std::make_unique()); break; diff --git a/onnxruntime/core/optimizer/qdq_transformer/clip_quantizelinear.cc b/onnxruntime/core/optimizer/qdq_transformer/clip_quantizelinear.cc new file mode 100644 index 0000000000000..55d0a31e64e44 --- /dev/null +++ b/onnxruntime/core/optimizer/qdq_transformer/clip_quantizelinear.cc @@ -0,0 +1,107 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "core/optimizer/initializer.h" +#include "core/optimizer/qdq_transformer/clip_quantizelinear.h" +#include "core/optimizer/utils.h" +#include "core/graph/graph_utils.h" + +using namespace ONNX_NAMESPACE; +using namespace onnxruntime::common; +namespace onnxruntime { + +static bool GetQConstantLowerUpper(const Graph& graph, const Node& node, float& lower, float& upper) { + const auto& input_defs = node.InputDefs(); + + constexpr size_t input_cnt_required = 3; + if (input_defs.size() != input_cnt_required) { + return false; + } + + constexpr size_t s_idx = 1; + const NodeArg* s_input = input_defs[s_idx]; + + const ONNX_NAMESPACE::TensorProto* s_tensor_proto = graph_utils::GetConstantInitializer(graph, s_input->Name()); + if (!s_tensor_proto) { + return false; + } + + Initializer s_initializer(*s_tensor_proto, graph.ModelPath()); + if (s_initializer.dims().size() != 0 || + s_initializer.data_type() != ONNX_NAMESPACE::TensorProto_DataType_FLOAT) { + return false; + } + const float scale = s_initializer.data()[0]; + + constexpr size_t zp_idx = 2; + const NodeArg* zp_input = input_defs[zp_idx]; + + const ONNX_NAMESPACE::TensorProto* zp_tensor_proto = graph_utils::GetConstantInitializer(graph, zp_input->Name()); + if (!zp_tensor_proto) { + return false; + } + + Initializer zp_initializer(*zp_tensor_proto, graph.ModelPath()); + if (zp_initializer.dims().size() != 0) { + return false; + } + + switch (zp_initializer.data_type()) { + case ONNX_NAMESPACE::TensorProto_DataType_INT8: { + const int8_t zero_point = zp_initializer.data()[0]; + lower = scale * (-128 - zero_point); + upper = scale * (127 - zero_point); + break; + } + case ONNX_NAMESPACE::TensorProto_DataType_UINT8: { + const uint8_t zero_point = zp_initializer.data()[0]; + lower = scale * (0 - zero_point); + upper = scale * (255 - zero_point); + break; + } + default: + ORT_THROW("Unexpected data type for QuantizeLinear input y_zero_point of ", zp_initializer.data_type()); + } + return true; +} + +bool ClipQuantFusion::SatisfyCondition(const Graph& graph, const Node& node, const logging::Logger& /*logger*/) const { + if (!graph_utils::IsSupportedOptypeVersionAndDomain(node, "Clip", {1, 6, 11, 12, 13}) || + !optimizer_utils::CheckOutputEdges(graph, node, 1)) { + return false; + } + + // if Clip is followed by QuantizeLinear, it can be fused into QuantizeLinear potentially + const auto& next_node = *node.OutputNodesBegin(); + if (!graph_utils::IsSupportedOptypeVersionAndDomain(next_node, "QuantizeLinear", {10, 13})) { + return false; + } + + return true; +} + +Status ClipQuantFusion::Apply(Graph& graph, Node& node, RewriteRuleEffect& rule_effect, const logging::Logger&) const { + float min, max; + if (!optimizer_utils::GetClipConstantMinMax(graph, node, min, max)) { + return Status::OK(); + } + + const Node& q_node = *graph.GetNode(node.OutputNodesBegin()->Index()); + + float lower, upper; + if (!GetQConstantLowerUpper(graph, q_node, lower, upper)) { + return Status::OK(); + } + + constexpr float epsilon = std::numeric_limits::epsilon(); + if (epsilon < min - lower || epsilon < upper - max) { + return Status::OK(); + } + + if (graph_utils::RemoveNode(graph, node)) { + rule_effect = RewriteRuleEffect::kRemovedCurrentNode; + } + + return Status::OK(); +} +} // namespace onnxruntime diff --git a/onnxruntime/core/optimizer/qdq_transformer/clip_quantizelinear.h b/onnxruntime/core/optimizer/qdq_transformer/clip_quantizelinear.h new file mode 100644 index 0000000000000..870ee607ab7b2 --- /dev/null +++ b/onnxruntime/core/optimizer/qdq_transformer/clip_quantizelinear.h @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include "core/optimizer/rewrite_rule.h" + +namespace onnxruntime { + +/** + @Class ClipQuantFusion + + Rewrite rule that fuses Clip into followed QuantizeLinear + */ +class ClipQuantFusion : public RewriteRule { + public: + ClipQuantFusion() noexcept : RewriteRule("ClipQuantRewrite") {} + + std::vector TargetOpTypes() const noexcept override { + return {"Clip"}; + } + + private: + bool SatisfyCondition(const Graph& graph, const Node& node, const logging::Logger& logger) const override; + + Status Apply(Graph& graph, Node& node, RewriteRuleEffect& rule_effect, const logging::Logger& logger) const override; +}; + +} // namespace onnxruntime diff --git a/onnxruntime/core/optimizer/utils.cc b/onnxruntime/core/optimizer/utils.cc index 3faf803af4572..e9260e553b703 100644 --- a/onnxruntime/core/optimizer/utils.cc +++ b/onnxruntime/core/optimizer/utils.cc @@ -281,9 +281,67 @@ bool IsOperationDeterministic(const std::string& domain, const std::string& op) if (domain.compare(kOnnxDomain) == 0) { auto iter = std::find(kOnnxDomainNonDeterministicOps.begin(), kOnnxDomainNonDeterministicOps.end(), op); return iter == kOnnxDomainNonDeterministicOps.end(); - } + } // Unknown domain. Assume the op is not deterministic. - return false; + return false; +} + +bool GetClipConstantMinMax(const Graph& graph, const Node& node, float& min, float& max) { + min = std::numeric_limits::lowest(); + max = std::numeric_limits::max(); + + // Clip opset 1 and 6 has min and max as attributes. they're inputs from opset 11 on. + bool min_max_are_attributes = graph_utils::IsSupportedOptypeVersionAndDomain(node, "Clip", {1, 6}); + bool min_max_are_constant_values = true; + + if (min_max_are_attributes) { + min = graph_utils::GetNodeAttribute(node, "min")->f(); + max = graph_utils::GetNodeAttribute(node, "max")->f(); + } else { + // update min/max if provided via a constant initializer + // return true if value is default or coming from a constant initializer and update 'value' + // return false if value is mutable + auto update_if_constant_value = [&graph](const Node& node, size_t input_idx, float& value) { + const auto& input_defs = node.InputDefs(); + const NodeArg* input = (input_defs.size() > input_idx) ? input_defs[input_idx] : nullptr; + + if (input == nullptr || !input->Exists()) { + // optional input not specified so using default value + return true; + } + + bool is_constant = true; + const ONNX_NAMESPACE::TensorProto* initializer = graph_utils::GetConstantInitializer(graph, input->Name()); + if (initializer) { + Initializer i(*initializer, graph.ModelPath()); + switch (initializer->data_type()) { + case ONNX_NAMESPACE::TensorProto_DataType_FLOAT: + value = *i.data(); + break; + // double isn't currently supported + //case ONNX_NAMESPACE::TensorProto_DataType_DOUBLE: + // value = static_cast(*i.data()); + // break; + case ONNX_NAMESPACE::TensorProto_DataType_FLOAT16: + value = math::halfToFloat(i.data()->val); + break; + default: + ORT_THROW("Unexpected data type for Clip input of ", initializer->data_type()); + } + } else { + is_constant = false; + } + + return is_constant; + }; + + // 'min' is input 1, 'max' is input 2. both are optional. + // if the input is constant, 'min' or 'max' is updated by the call to get_if_constant_value + min_max_are_constant_values = update_if_constant_value(node, 1, min) && + update_if_constant_value(node, 2, max); + } + + return min_max_are_constant_values; } #endif // #if !defined(ORT_MINIMAL_BUILD) diff --git a/onnxruntime/core/optimizer/utils.h b/onnxruntime/core/optimizer/utils.h index 9b87ee680d9c6..d7c1fa71ead59 100644 --- a/onnxruntime/core/optimizer/utils.h +++ b/onnxruntime/core/optimizer/utils.h @@ -102,6 +102,11 @@ bool CheckOutputEdges(const Graph& graph, const Node& node, size_t expected_outp bool IsOperationDeterministic(const std::string& domain, const std::string& op); +/** Get min/max values from Clip if they are constant. +@returns false if mutable and cannot be used. +*/ +bool GetClipConstantMinMax(const Graph& graph, const Node& node, float& min, float& max); + #endif // !#if !defined(ORT_MINIMAL_BUILD) #if !defined(ORT_MINIMAL_BUILD) || defined(ORT_EXTENDED_MINIMAL_BUILD) diff --git a/onnxruntime/test/optimizer/qdq_transformer_test.cc b/onnxruntime/test/optimizer/qdq_transformer_test.cc index 97a051bdfea1e..d74160217f46a 100644 --- a/onnxruntime/test/optimizer/qdq_transformer_test.cc +++ b/onnxruntime/test/optimizer/qdq_transformer_test.cc @@ -1616,6 +1616,81 @@ TEST(QDQTransformerTests, DQForward_MutilpleSteps) { test_case({1, 13, 13, 23}, {30, 23, 3, 3}, {0, 3, 1, 2}); } +TEST(QDQTransformerTests, Clip) { + constexpr float epsilon = std::numeric_limits::epsilon(); + + auto test_case = [&](float scale, auto zero_point, int clip_count, int opset_version = 12) { + auto build_test_case = [&](ModelTestBuilder& builder) { + auto* input_arg = builder.MakeInput({1, 32, 112, 112}, + std::numeric_limits::min(), + std::numeric_limits::max()); + auto* output_arg = builder.MakeOutput(); + + // add DQ + auto* dq_output = builder.MakeIntermediate(); + builder.AddDequantizeLinearNode(input_arg, .0035f, 7, dq_output); + + // add Clip + auto* clip_output = builder.MakeIntermediate(); + constexpr float min = .0f; + constexpr float max = 6.0f; + if (opset_version >= 11) { + auto* min_initializer = builder.MakeScalarInitializer(min); + auto* max_initializer = builder.MakeScalarInitializer(max); + builder.AddNode("Clip", {dq_output, min_initializer, max_initializer}, {clip_output}); + } else { + Node& argmax_node = builder.AddNode("Clip", {dq_output}, {clip_output}); + argmax_node.AddAttribute("min", min); + argmax_node.AddAttribute("max", max); + } + + // add Q + DQ + auto* q_output = builder.MakeIntermediate(); + builder.AddQuantizeLinearNode(clip_output, scale, zero_point, q_output); + builder.AddDequantizeLinearNode(q_output, scale, zero_point, output_arg); + }; + + auto check_clip_graph = [&](InferenceSessionWrapper& session) { + auto op_to_count = CountOpsInGraph(session.GetGraph()); + EXPECT_EQ(op_to_count["QuantizeLinear"], 1); + EXPECT_EQ(op_to_count["Clip"], clip_count); + EXPECT_EQ(op_to_count["DequantizeLinear"], 2); + }; + + TransformerTester(build_test_case, check_clip_graph, + TransformerLevel::Default, + TransformerLevel::Level1, + opset_version, + epsilon, + epsilon); + }; + + test_case(.0235294122248888f, static_cast(-128), 0); // [0, 6] + test_case(.02f, static_cast(-128), 0); // [0, 5.1] + test_case(.03f, static_cast(-128), 1); // [0, 7.65] + test_case(.02f, static_cast(127), 1); // [-5.1 , 0] + test_case(.02f, static_cast(0), 1); // [-2.56, 2.54] + test_case(.04f, static_cast(-97), 1); // [-1.24, 8.96] + test_case(.02352941176f, static_cast(0), 0); // [0, 6] + test_case(.02f, static_cast(0), 0); // [0, 5.1] + test_case(.03f, static_cast(0), 1); // [0, 7.65] + test_case(.02f, static_cast(255), 1); // [-5.1, 0] + test_case(.02f, static_cast(128), 1); // [-2.56, 2.54] + test_case(.04f, static_cast(31), 1); // [-1.24, 8.96] + + // opset_version = 10 + test_case(.02f, static_cast(-128), 0, 10); // [0, 5.1] + test_case(.03f, static_cast(-128), 1, 10); // [0, 7.65] + test_case(.02f, static_cast(0), 0, 10); // [0, 5.1] + test_case(.03f, static_cast(0), 1, 10); // [0, 7.65] + + // difference between lower/upper and min/max are within epsilon + test_case(epsilon, static_cast(-127), 0); // [-epsilon, x] (x <= 6 + epsilon) + test_case((6 + epsilon) / 255, static_cast(-128), 0); // [0, 6 + epsilon] + test_case(epsilon, static_cast(1), 0); // [-epsilon, x] (x <= 6 + epsilon) + test_case((6 + epsilon) / 255, static_cast(0), 0); // [0, 6 + epsilon] +} + TEST(QDQTransformerTests, Concat) { auto test_case = [&](const std::vector>& input_shapes, int64_t axis, From 239c6ad3f021ff7cc2e6247eb074bd4208dc11e2 Mon Sep 17 00:00:00 2001 From: zhangyaobit Date: Wed, 2 Feb 2022 19:11:31 -0800 Subject: [PATCH 19/56] Support specifying an execution provider in benchmark script (#10453) * Support specifying execution providers. * Change default provider setting to None. * Add support for bert_perf_test script. * Fall back to ROCM/CUDA EP for MIGraphX/Tensorrt EP. * Assert fall back EPs are included. * Add model class AutoModelForCausalLM and other minor updates. Co-authored-by: Yao Zhang --- .../python/tools/transformers/benchmark.py | 16 +++++-- .../tools/transformers/benchmark_helper.py | 18 +++++-- .../tools/transformers/bert_perf_test.py | 48 ++++++++++++++++--- .../tools/transformers/huggingface_models.py | 3 +- .../tools/transformers/onnx_exporter.py | 1 + .../python/tools/transformers/profiler.py | 15 +++--- 6 files changed, 79 insertions(+), 22 deletions(-) diff --git a/onnxruntime/python/tools/transformers/benchmark.py b/onnxruntime/python/tools/transformers/benchmark.py index 6e5d5b98ef651..abaeaf47c984e 100644 --- a/onnxruntime/python/tools/transformers/benchmark.py +++ b/onnxruntime/python/tools/transformers/benchmark.py @@ -68,13 +68,14 @@ from transformers import (AutoConfig, AutoTokenizer, AutoModel, GPT2Model, LxmertConfig) -def run_onnxruntime(use_gpu, model_names, model_class, precision, num_threads, batch_sizes, sequence_lengths, +def run_onnxruntime(use_gpu, provider, model_names, model_class, precision, num_threads, batch_sizes, sequence_lengths, repeat_times, input_counts, optimize_onnx, validate_onnx, cache_dir, onnx_dir, verbose, overwrite, disable_ort_io_binding, use_raw_attention_mask, model_fusion_statistics, model_source): import onnxruntime results = [] - if use_gpu and ('CUDAExecutionProvider' not in onnxruntime.get_available_providers()): + if (use_gpu and ('CUDAExecutionProvider' not in onnxruntime.get_available_providers()) and + ('ROCMExecutionProvider' not in onnxruntime.get_available_providers())): logger.error( "Please install onnxruntime-gpu package instead of onnxruntime, and use a machine with GPU for testing gpu performance." ) @@ -105,6 +106,7 @@ def run_onnxruntime(use_gpu, model_names, model_class, precision, num_threads, b ort_session = create_onnxruntime_session(onnx_model_file, use_gpu, + provider, enable_all_optimization=True, num_threads=num_threads, verbose=verbose) @@ -425,7 +427,13 @@ def parse_arguments(): default=os.path.join('.', 'onnx_models'), help="Directory to store onnx models") - parser.add_argument("-g", "--use_gpu", required=False, action="store_true", help="Run on cuda device") + parser.add_argument("-g", "--use_gpu", required=False, action="store_true", help="Run on gpu device") + + parser.add_argument("--provider", + required=False, + type=str, + default=None, + help="Execution provider to use") parser.add_argument( "-p", @@ -545,7 +553,7 @@ def main(): if enable_onnxruntime: try: use_raw_attention_mask = True - results += run_onnxruntime(args.use_gpu, args.models, args.model_class, args.precision, num_threads, + results += run_onnxruntime(args.use_gpu, args.provider, args.models, args.model_class, args.precision, num_threads, args.batch_sizes, args.sequence_lengths, args.test_times, args.input_counts, args.optimize_onnx, args.validate_onnx, args.cache_dir, args.onnx_dir, args.verbose, args.overwrite, args.disable_ort_io_binding, diff --git a/onnxruntime/python/tools/transformers/benchmark_helper.py b/onnxruntime/python/tools/transformers/benchmark_helper.py index 8c9afbe6561e0..8ef162a1991c2 100644 --- a/onnxruntime/python/tools/transformers/benchmark_helper.py +++ b/onnxruntime/python/tools/transformers/benchmark_helper.py @@ -39,11 +39,11 @@ def __str__(self): def create_onnxruntime_session(onnx_model_path, use_gpu, + provider=None, enable_all_optimization=True, num_threads=-1, enable_profiling=False, - verbose=False, - use_dml=False): + verbose=False): session = None try: from onnxruntime import SessionOptions, InferenceSession, GraphOptimizationLevel, __version__ as onnxruntime_version @@ -68,8 +68,16 @@ def create_onnxruntime_session(onnx_model_path, logger.debug(f"Create session for onnx model: {onnx_model_path}") if use_gpu: - if use_dml: + if provider == 'dml': execution_providers = ['DmlExecutionProvider', 'CPUExecutionProvider'] + elif provider == 'rocm': + execution_providers = ['ROCMExecutionProvider', 'CPUExecutionProvider'] + elif provider == 'migraphx': + execution_providers = ['MIGraphXExecutionProvider', 'ROCMExecutionProvider', 'CPUExecutionProvider'] + elif provider == 'cuda': + execution_providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] + elif provider == 'tensorrt': + execution_providers = ['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider'] else: execution_providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] else: @@ -89,7 +97,7 @@ def setup_logger(verbose=True): logging.getLogger("transformers").setLevel(logging.WARNING) -def prepare_environment(cache_dir, output_dir, use_gpu, use_dml=False): +def prepare_environment(cache_dir, output_dir, use_gpu, provider=None): if cache_dir and not os.path.exists(cache_dir): os.makedirs(cache_dir) @@ -98,7 +106,7 @@ def prepare_environment(cache_dir, output_dir, use_gpu, use_dml=False): import onnxruntime if use_gpu: - if use_dml: + if provider == 'dml': assert 'DmlExecutionProvider' in onnxruntime.get_available_providers( ), "Please install onnxruntime-directml package to test GPU inference." diff --git a/onnxruntime/python/tools/transformers/bert_perf_test.py b/onnxruntime/python/tools/transformers/bert_perf_test.py index 45682eb18ab8a..6b621492b2ec2 100644 --- a/onnxruntime/python/tools/transformers/bert_perf_test.py +++ b/onnxruntime/python/tools/transformers/bert_perf_test.py @@ -36,6 +36,7 @@ class TestSetting: test_cases: int test_times: int use_gpu: bool + provider: str intra_op_num_threads: int seed: int verbose: bool @@ -50,7 +51,7 @@ class ModelSetting: opt_level: int -def create_session(model_path, use_gpu, intra_op_num_threads, graph_optimization_level=None): +def create_session(model_path, use_gpu, provider, intra_op_num_threads, graph_optimization_level=None): import onnxruntime if use_gpu and ('CUDAExecutionProvider' not in onnxruntime.get_available_providers()): @@ -61,8 +62,21 @@ def create_session(model_path, use_gpu, intra_op_num_threads, graph_optimization if intra_op_num_threads is None and graph_optimization_level is None: session = onnxruntime.InferenceSession(model_path) else: - execution_providers = ['CPUExecutionProvider' - ] if not use_gpu else ['CUDAExecutionProvider', 'CPUExecutionProvider'] + if use_gpu: + if provider == 'dml': + execution_providers = ['DmlExecutionProvider', 'CPUExecutionProvider'] + elif provider == 'rocm': + execution_providers = ['ROCMExecutionProvider', 'CPUExecutionProvider'] + elif provider == 'migraphx': + execution_providers = ['MIGraphXExecutionProvider', 'ROCMExecutionProvider', 'CPUExecutionProvider'] + elif provider == 'cuda': + execution_providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] + elif provider == 'tensorrt': + execution_providers = ['TensorrtExecutionProvider', 'CUDAExecutionProvider', 'CPUExecutionProvider'] + else: + execution_providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] + else: + execution_providers = ['CPUExecutionProvider'] sess_options = onnxruntime.SessionOptions() sess_options.execution_mode = onnxruntime.ExecutionMode.ORT_SEQUENTIAL @@ -86,7 +100,23 @@ def create_session(model_path, use_gpu, intra_op_num_threads, graph_optimization session = onnxruntime.InferenceSession(model_path, sess_options, providers=execution_providers) if use_gpu: - assert 'CUDAExecutionProvider' in session.get_providers() + if provider == 'dml': + assert 'DmlExecutionProvider' in session.get_providers() + elif provider == 'rocm': + assert 'ROCMExecutionProvider' in session.get_providers() + elif provider == 'migraphx': + assert 'MIGraphXExecutionProvider' in session.get_providers() + assert 'ROCMExecutionProvider' in session.get_providers() + elif provider == 'cuda': + assert 'CUDAExecutionProvider' in session.get_providers() + elif provider == 'tensorrt': + assert 'TensorrtExecutionProvider' in session.get_providers() + assert 'CUDAExecutionProvider' in session.get_providers() + else: + assert 'CUDAExecutionProvider' in session.get_providers() + else: + assert 'CPUExecutionProvider' in session.get_providers() + return session @@ -117,7 +147,7 @@ def to_string(model_path, session, test_setting): def run_one_test(model_setting, test_setting, perf_results, all_inputs, intra_op_num_threads): - session = create_session(model_setting.model_path, test_setting.use_gpu, intra_op_num_threads, + session = create_session(model_setting.model_path, test_setting.use_gpu, test_setting.provider, intra_op_num_threads, model_setting.opt_level) output_names = [output.name for output in session.get_outputs()] @@ -239,6 +269,12 @@ def parse_arguments(): parser.add_argument('--use_gpu', required=False, action='store_true', help="use GPU") parser.set_defaults(use_gpu=False) + parser.add_argument("--provider", + required=False, + type=str, + default=None, + help="Execution provider to use") + parser.add_argument('-n', '--intra_op_num_threads', required=False, @@ -276,7 +312,7 @@ def main(): for batch_size in batch_size_set: test_setting = TestSetting(batch_size, args.sequence_length, args.samples, args.test_times, args.use_gpu, - args.intra_op_num_threads, args.seed, args.verbose) + args.provider, args.intra_op_num_threads, args.seed, args.verbose) print("test setting", test_setting) run_performance(model_setting, test_setting, perf_results) diff --git a/onnxruntime/python/tools/transformers/huggingface_models.py b/onnxruntime/python/tools/transformers/huggingface_models.py index 051480ebb0ade..642669156cbb8 100644 --- a/onnxruntime/python/tools/transformers/huggingface_models.py +++ b/onnxruntime/python/tools/transformers/huggingface_models.py @@ -6,7 +6,8 @@ # Maps model class name to a tuple of model class MODEL_CLASSES = [ - 'AutoModel', 'AutoModelWithLMHead', 'AutoModelForSequenceClassification', 'AutoModelForQuestionAnswering' + 'AutoModel', 'AutoModelWithLMHead', 'AutoModelForSequenceClassification', 'AutoModelForQuestionAnswering', + 'AutoModelForCausalLM', ] # List of pretrained models: https://huggingface.co/transformers/pretrained_models.html diff --git a/onnxruntime/python/tools/transformers/onnx_exporter.py b/onnxruntime/python/tools/transformers/onnx_exporter.py index d12c1d13070ae..6abf72c237703 100644 --- a/onnxruntime/python/tools/transformers/onnx_exporter.py +++ b/onnxruntime/python/tools/transformers/onnx_exporter.py @@ -255,6 +255,7 @@ def load_pretrained_model(model_name, config, cache_dir, custom_model_class, is_ model_class_name = 'TF' + model_class_name transformers_module = __import__("transformers", fromlist=[model_class_name]) + logger.info(f"Model class name: {model_class_name}") model_class = getattr(transformers_module, model_class_name) return model_class.from_pretrained(model_name, config=config, cache_dir=cache_dir) diff --git a/onnxruntime/python/tools/transformers/profiler.py b/onnxruntime/python/tools/transformers/profiler.py index 753b976758af1..ddd00e94ebb7a 100644 --- a/onnxruntime/python/tools/transformers/profiler.py +++ b/onnxruntime/python/tools/transformers/profiler.py @@ -86,8 +86,11 @@ def parse_arguments(argv=None): parser.add_argument('-g', '--use_gpu', required=False, action='store_true', help="use GPU") parser.set_defaults(use_gpu=False) - parser.add_argument('-d', '--use_dml', required=False, action='store_true', help="use DML") - parser.set_defaults(use_dml=False) + parser.add_argument('--provider', + required=False, + type=str, + default='cuda', + help="Execution provider to use") parser.add_argument( '--basic_optimization', @@ -108,15 +111,15 @@ def parse_arguments(argv=None): return parser.parse_args(argv) -def run_profile(onnx_model_path, use_gpu, basic_optimization, thread_num, all_inputs, use_dml): +def run_profile(onnx_model_path, use_gpu, provider, basic_optimization, thread_num, all_inputs): from benchmark_helper import create_onnxruntime_session session = create_onnxruntime_session(onnx_model_path, use_gpu, + provider, enable_all_optimization=not basic_optimization, num_threads=thread_num, - enable_profiling=True, - use_dml=use_dml) + enable_profiling=True) for inputs in all_inputs: _ = session.run(None, inputs) @@ -604,7 +607,7 @@ def run(args): else: # default all_inputs = create_dummy_inputs(onnx_model, args.batch_size, args.sequence_length, args.samples) - profile_file = run_profile(args.model, args.use_gpu, args.basic_optimization, args.thread_num, all_inputs, args.use_dml) + profile_file = run_profile(args.model, args.use_gpu, args.provider, args.basic_optimization, args.thread_num, all_inputs) return profile_file From 63198a6566e8b3703f84477db0ec7a313cc69dd2 Mon Sep 17 00:00:00 2001 From: ytaous <4484531+ytaous@users.noreply.github.com> Date: Thu, 3 Feb 2022 11:31:14 -0800 Subject: [PATCH 20/56] [ROCm] BFloat16 support (#10447) * bf16 support * bf16 support * UTs * fix build * fix UTs Co-authored-by: root --- .../contrib_ops/rocm/rocm_contrib_kernels.cc | 20 ++ .../core/providers/rocm/math/softmax.cc | 3 +- .../providers/rocm/rocm_execution_provider.cc | 16 +- .../cpu/activation/activation_op_test.cc | 193 ++++++++++++++++++ .../test/providers/cpu/math/gemm_test.cc | 2 +- .../test/providers/cpu/math/matmul_test.cc | 2 +- .../test/providers/cpu/math/softmax_test.cc | 56 +++++ .../test/providers/provider_test_utils.h | 6 + .../training_ops/rocm/math/softmax_grad.cc | 24 +++ .../rocm/math/softmax_grad_impl.cu | 2 + .../rocm/reduction/reduction_all.cc | 3 + .../rocm/rocm_training_kernels.cc | 26 +++ 12 files changed, 342 insertions(+), 11 deletions(-) diff --git a/onnxruntime/contrib_ops/rocm/rocm_contrib_kernels.cc b/onnxruntime/contrib_ops/rocm/rocm_contrib_kernels.cc index bd940e9f520ee..99c4755c36973 100644 --- a/onnxruntime/contrib_ops/rocm/rocm_contrib_kernels.cc +++ b/onnxruntime/contrib_ops/rocm/rocm_contrib_kernels.cc @@ -17,6 +17,10 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1 class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, float, BiasGelu); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, double, BiasGelu); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, MLFloat16, BiasGelu); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16, BiasGelu); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, float, TransposeMatMul); // backward compatibility +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, double, TransposeMatMul); // backward compatibility +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, MLFloat16, TransposeMatMul); // backward compatibility class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, float, FusedMatMul); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, double, FusedMatMul); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, MLFloat16, FusedMatMul); @@ -76,6 +80,11 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1 class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, float_int8_t, QAttention); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, MLFloat16_int8_t, QAttention); +// class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16, FastGelu); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16, TransposeMatMul); // backward compatibility +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16, FusedMatMul); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 1, BFloat16_float, LayerNormalization); + template <> KernelCreateInfo BuildKernelCreateInfo() { KernelCreateInfo info; @@ -93,6 +102,10 @@ Status RegisterRocmContribKernels(KernelRegistry& kernel_registry) { BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, // backward compatibility + BuildKernelCreateInfo, // backward compatibility + BuildKernelCreateInfo, // backward compatibility BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, @@ -152,6 +165,13 @@ Status RegisterRocmContribKernels(KernelRegistry& kernel_registry) { // BuildKernelCreateInfo, // BuildKernelCreateInfo, // BuildKernelCreateInfo + + // BuildKernelCreateInfo, + // TransposedMatMul is still here for backward compatibility + BuildKernelCreateInfo, // backward compatibility + BuildKernelCreateInfo, + BuildKernelCreateInfo, + }; for (auto& function_table_entry : function_table) { diff --git a/onnxruntime/core/providers/rocm/math/softmax.cc b/onnxruntime/core/providers/rocm/math/softmax.cc index ecbd918d7f866..612423e216df7 100644 --- a/onnxruntime/core/providers/rocm/math/softmax.cc +++ b/onnxruntime/core/providers/rocm/math/softmax.cc @@ -45,7 +45,8 @@ SPECIALIZED_SOFTMAX_HELPER_IMPL(float) // SPECIALIZED_SOFTMAX_HELPER_IMPL(double) SPECIALIZED_SOFTMAX_HELPER_IMPL(MLFloat16) -// miopenSoftmaxForward/Backward doesn't support BFloat16. +// cudnnSoftmaxForward/Backward doesn't support BFloat16. +// apply the same for miopen for now #define SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(is_log_softmax) \ template <> \ Status SoftMaxComputeHelper(hipStream_t stream, const BFloat16* X, \ diff --git a/onnxruntime/core/providers/rocm/rocm_execution_provider.cc b/onnxruntime/core/providers/rocm/rocm_execution_provider.cc index 870c0f818042e..b024f388318ba 100644 --- a/onnxruntime/core/providers/rocm/rocm_execution_provider.cc +++ b/onnxruntime/core/providers/rocm/rocm_execution_provider.cc @@ -1127,9 +1127,9 @@ class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kO class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, BFloat16, Cast); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, BFloat16, Softmax); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, BFloat16, MatMul); -// class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, 13, BFloat16, Relu); -// class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, BFloat16, Sigmoid); -// class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, BFloat16, Tanh); +class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, 13, BFloat16, Relu); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, BFloat16, Sigmoid); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, BFloat16, Tanh); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, BFloat16, Gemm); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, BFloat16, ReduceSum); @@ -1192,7 +1192,7 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 14, BFloat16, Sub); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 14, BFloat16, Mul); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 14, BFloat16, Div); -// class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 14, BFloat16, Relu); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 14, BFloat16, Relu); //OpSet 15 class ONNX_OPERATOR_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 15, Pow); @@ -1971,9 +1971,9 @@ static Status RegisterRocmKernels(KernelRegistry& kernel_registry) { BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, - // BuildKernelCreateInfo, - // BuildKernelCreateInfo, - // BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, @@ -2035,7 +2035,7 @@ static Status RegisterRocmKernels(KernelRegistry& kernel_registry) { BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, - // BuildKernelCreateInfo, + BuildKernelCreateInfo, // OpSet 15 BuildKernelCreateInfo, diff --git a/onnxruntime/test/providers/cpu/activation/activation_op_test.cc b/onnxruntime/test/providers/cpu/activation/activation_op_test.cc index 75ead657aeba1..82e9690718871 100644 --- a/onnxruntime/test/providers/cpu/activation/activation_op_test.cc +++ b/onnxruntime/test/providers/cpu/activation/activation_op_test.cc @@ -3,6 +3,7 @@ #include "activation_op_test.h" #include "core/providers/cpu/activation/activations.h" +#include "test/common/cuda_op_test_utils.h" namespace onnxruntime { namespace test { @@ -120,6 +121,198 @@ TEST_F(ActivationOpTest, Relu) { /*opset_version= */ 14); } +#if defined(USE_CUDA) || defined(USE_ROCM) +TEST_F(ActivationOpTest, Sigmoid_fp16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support FP16"; + return; + } +#endif + OpTester test("Sigmoid", 14); + + auto formula = [](float x) { + auto y = 1.f / (1.f + std::exp(-std::abs(x))); // safe sigmoid + y = x > 0 ? y : 1 - y; + return y; + }; + + std::vector X = input_values.front(); + std::vector Y; + for (unsigned i = 0; i < X.size(); i++) + Y.push_back(formula(X[i])); + std::vector dims{(int64_t)X.size()}; + + std::vector f_X(X.size()); + std::vector f_Y(Y.size()); + ConvertFloatToMLFloat16(X.data(), f_X.data(), static_cast(X.size())); + ConvertFloatToMLFloat16(Y.data(), f_Y.data(), static_cast(Y.size())); + + test.AddInput("X", dims, f_X); + test.AddOutput("Y", dims, f_Y); + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); +} + +TEST_F(ActivationOpTest, Tanh_fp16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support FP16"; + return; + } +#endif + OpTester test("Tanh", 14); + + auto formula = [](float x) { return std::tanh(x); }; + + std::vector X = input_values.front(); + std::vector Y; + for (unsigned i = 0; i < X.size(); i++) + Y.push_back(formula(X[i])); + std::vector dims{(int64_t)X.size()}; + + std::vector f_X(X.size()); + std::vector f_Y(Y.size()); + ConvertFloatToMLFloat16(X.data(), f_X.data(), static_cast(X.size())); + ConvertFloatToMLFloat16(Y.data(), f_Y.data(), static_cast(Y.size())); + + test.AddInput("X", dims, f_X); + test.AddOutput("Y", dims, f_Y); + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); +} + +TEST_F(ActivationOpTest, Relu_fp16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support FP16"; + return; + } +#endif + OpTester test("Relu", 14); + + auto formula = [](float x) { return std::max(x, 0.0f); }; + + std::vector X = input_values.front(); + std::vector Y; + for (unsigned i = 0; i < X.size(); i++) + Y.push_back(formula(X[i])); + std::vector dims{(int64_t)X.size()}; + + std::vector f_X(X.size()); + std::vector f_Y(Y.size()); + ConvertFloatToMLFloat16(X.data(), f_X.data(), static_cast(X.size())); + ConvertFloatToMLFloat16(Y.data(), f_Y.data(), static_cast(Y.size())); + + test.AddInput("X", dims, f_X); + test.AddOutput("Y", dims, f_Y); + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); +} +#endif + +#if defined(USE_CUDA) || defined(USE_ROCM) +TEST_F(ActivationOpTest, Sigmoid_bfloat16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + OpTester test("Sigmoid", 14); + + auto formula = [](float x) { + auto y = 1.f / (1.f + std::exp(-std::abs(x))); // safe sigmoid + y = x > 0 ? y : 1 - y; + return y; + }; + + std::vector X = input_values.front(); + std::vector Y; + for (unsigned i = 0; i < X.size(); i++) + Y.push_back(formula(X[i])); + std::vector dims{(int64_t)X.size()}; + + std::vector bf_X = FloatsToBFloat16s(X); + std::vector bf_Y = FloatsToBFloat16s(Y); + + test.AddInput("X", dims, bf_X); + test.AddOutput("Y", dims, bf_Y); + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} + +TEST_F(ActivationOpTest, Tanh_bfloat16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + OpTester test("Tanh", 14); + + auto formula = [](float x) { return std::tanh(x); }; + + std::vector X = input_values.front(); + std::vector Y; + for (unsigned i = 0; i < X.size(); i++) + Y.push_back(formula(X[i])); + std::vector dims{(int64_t)X.size()}; + + std::vector bf_X = FloatsToBFloat16s(X); + std::vector bf_Y = FloatsToBFloat16s(Y); + + test.AddInput("X", dims, bf_X); + test.AddOutput("Y", dims, bf_Y); + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} + +TEST_F(ActivationOpTest, Relu_bfloat16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + OpTester test("Relu", 14); + + auto formula = [](float x) { return std::max(x, 0.0f); }; + + std::vector X = input_values.front(); + std::vector Y; + for (unsigned i = 0; i < X.size(); i++) + Y.push_back(formula(X[i])); + std::vector dims{(int64_t)X.size()}; + + std::vector bf_X = FloatsToBFloat16s(X); + std::vector bf_Y = FloatsToBFloat16s(Y); + + test.AddInput("X", dims, bf_X); + test.AddOutput("Y", dims, bf_Y); + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} +#endif + TEST_F(ActivationOpTest, Elu) { float alpha = 0.1f; TestActivationOp("Elu", diff --git a/onnxruntime/test/providers/cpu/math/gemm_test.cc b/onnxruntime/test/providers/cpu/math/gemm_test.cc index e96fbc1c9c929..8d0018c6e8b7b 100644 --- a/onnxruntime/test/providers/cpu/math/gemm_test.cc +++ b/onnxruntime/test/providers/cpu/math/gemm_test.cc @@ -91,7 +91,7 @@ TEST(GemmOpTest, GemmNoTrans_bfloat16) { #ifdef USE_CUDA int min_cuda_architecture = 530; if (!HasCudaEnvironment(min_cuda_architecture)) { - LOGS_DEFAULT(WARNING) << "Hardware NOT support FP16"; + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; return; } #endif diff --git a/onnxruntime/test/providers/cpu/math/matmul_test.cc b/onnxruntime/test/providers/cpu/math/matmul_test.cc index 6d2afcdc53df7..5633d12d756e7 100644 --- a/onnxruntime/test/providers/cpu/math/matmul_test.cc +++ b/onnxruntime/test/providers/cpu/math/matmul_test.cc @@ -199,7 +199,7 @@ TEST(MathOpTest, MatMul_BFloat16) { #ifdef USE_CUDA int min_cuda_architecture = 530; if (!HasCudaEnvironment(min_cuda_architecture)) { - LOGS_DEFAULT(WARNING) << "Hardware NOT support FP16"; + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; return; } #endif diff --git a/onnxruntime/test/providers/cpu/math/softmax_test.cc b/onnxruntime/test/providers/cpu/math/softmax_test.cc index eeb22f2271541..b821b16bdaeb3 100644 --- a/onnxruntime/test/providers/cpu/math/softmax_test.cc +++ b/onnxruntime/test/providers/cpu/math/softmax_test.cc @@ -4,6 +4,7 @@ #include "gmock/gmock.h" #include "gtest/gtest.h" #include "test/providers/provider_test_utils.h" +#include "test/common/cuda_op_test_utils.h" #include namespace onnxruntime { @@ -45,6 +46,61 @@ TEST(SoftmaxOperator, Simple) { RunTest(x_vals, expected_vals, dimensions); } +#if defined(USE_CUDA) || defined(USE_ROCM) +TEST(SoftmaxOperator, Simple_fp16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support FP16"; + return; + } +#endif + OpTester test("Softmax", 14); + + int64_t axis = 1; + test.AddAttribute("axis", axis); + + std::vector X = {-1.0f, 0.0f, 1.0f}; + std::vector Y = {0.09003058f, 0.24472848f, 0.66524094f}; + std::vector dimensions = {1, 3}; + + std::vector f_X(3); + std::vector f_Y(3); + ConvertFloatToMLFloat16(X.data(), f_X.data(), 3); + ConvertFloatToMLFloat16(Y.data(), f_Y.data(), 3); + + test.AddInput("X", dimensions, f_X); + test.AddOutput("Y", dimensions, f_Y); + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider, kOpenVINOExecutionProvider}); +} +#endif + +#if defined(USE_CUDA) || defined(USE_ROCM) +TEST(SoftmaxOperator, Simple_bfloat16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + OpTester test("Softmax", 14); + + int64_t axis = 1; + test.AddAttribute("axis", axis); + + test.AddInput("X", {1, 3}, MakeBFloat16({-1.0f, 0.0f, 1.0f})); + test.AddOutput("Y", {1, 3}, MakeBFloat16({0.09003058f, 0.24472848f, 0.66524094f})); + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} +#endif + TEST(SoftmaxOperator, LargeNumber) { // x = np.array([[0, 1, 2, 3], [10000, 10001, 10002, 10003]]).astype(np.float32) // expected output[[0.0320586, 0.08714432, 0.23688284, 0.64391428], diff --git a/onnxruntime/test/providers/provider_test_utils.h b/onnxruntime/test/providers/provider_test_utils.h index 6958d44a35f36..74bae67c39b1e 100644 --- a/onnxruntime/test/providers/provider_test_utils.h +++ b/onnxruntime/test/providers/provider_test_utils.h @@ -1198,6 +1198,12 @@ inline std::vector MakeBFloat16(const std::initializer_list& in return output; } +inline std::vector FloatsToBFloat16s(const std::vector& input) { + std::vector output; + std::transform(input.begin(), input.end(), std::back_inserter(output), [](float f) { return BFloat16(f); }); + return output; +} + inline CheckParams MakeCheckParams(const OpTester::Data& d) { return CheckParams{d.sort_output_, d.absolute_error_, d.relative_error_}; } diff --git a/orttraining/orttraining/training_ops/rocm/math/softmax_grad.cc b/orttraining/orttraining/training_ops/rocm/math/softmax_grad.cc index c4a52cf9a865f..8481beda3665d 100644 --- a/orttraining/orttraining/training_ops/rocm/math/softmax_grad.cc +++ b/orttraining/orttraining/training_ops/rocm/math/softmax_grad.cc @@ -62,6 +62,29 @@ Status SoftMaxGradComputeHelper( return Status::OK(); } +// cudnnSoftmaxForward/Backward doesn't support BFloat16. +// apply the same for miopen for now +#define SPECIALIZED_SOFTMAXGRAD_HELPER_IMPL_BFloat16(is_log_softmax) \ + template <> \ + Status SoftMaxGradComputeHelper(hipStream_t stream, const BFloat16* dY, \ + const TensorShape& input_shape, const BFloat16* Y, \ + BFloat16* dX, miopenHandle_t, int64_t axis) { \ + typedef typename ToHipType::MappedType HipT; \ + const int64_t normalized_axis = HandleNegativeAxis(axis, input_shape.NumDimensions()); \ + int64_t N = input_shape.SizeToDimension(normalized_axis); \ + int64_t D = input_shape.SizeFromDimension(normalized_axis); \ + auto dY_data = reinterpret_cast(dY); \ + auto Y_data = reinterpret_cast(Y); \ + auto dX_data = reinterpret_cast(dX); \ + dispatch_softmax_backward, is_log_softmax>( \ + stream, dX_data, dY_data, Y_data, gsl::narrow_cast(D), gsl::narrow_cast(D), \ + gsl::narrow_cast(N)); \ + return Status::OK(); \ + } + +SPECIALIZED_SOFTMAXGRAD_HELPER_IMPL_BFloat16(true) +SPECIALIZED_SOFTMAXGRAD_HELPER_IMPL_BFloat16(false) + #define REGISTER_GRADIENT_KERNEL_TYPED(T) \ ONNX_OPERATOR_TYPED_KERNEL_EX( \ SoftmaxGrad, \ @@ -181,6 +204,7 @@ Status SoftmaxGrad::ComputeInternal(OpKernelContext* ctx) const { SPECIALIZED_GRADIENT(float) // SPECIALIZED_GRADIENT(double) SPECIALIZED_GRADIENT(MLFloat16) +SPECIALIZED_GRADIENT(BFloat16) } // namespace rocm } // namespace onnxruntime diff --git a/orttraining/orttraining/training_ops/rocm/math/softmax_grad_impl.cu b/orttraining/orttraining/training_ops/rocm/math/softmax_grad_impl.cu index 73343cafc9cea..81a176fc73b77 100644 --- a/orttraining/orttraining/training_ops/rocm/math/softmax_grad_impl.cu +++ b/orttraining/orttraining/training_ops/rocm/math/softmax_grad_impl.cu @@ -17,6 +17,7 @@ /* Modifications Copyright (c) Microsoft. */ // The code below is mostly copied from Pytorch PersistentSoftmax.cuh +#include "hip/hip_runtime.h" #include "orttraining/training_ops/rocm/math/softmax_grad.h" @@ -190,6 +191,7 @@ template void dispatch_softmax_backward(hipStrea SPECIALIZED_SOFTMAX_GRAD_IMPL(float, float, float) SPECIALIZED_SOFTMAX_GRAD_IMPL(half, half, float) SPECIALIZED_SOFTMAX_GRAD_IMPL(double, double, double) +SPECIALIZED_SOFTMAX_GRAD_IMPL(BFloat16, BFloat16, float) } } diff --git a/orttraining/orttraining/training_ops/rocm/reduction/reduction_all.cc b/orttraining/orttraining/training_ops/rocm/reduction/reduction_all.cc index d1e7985504ea1..1577dafe9dc2a 100644 --- a/orttraining/orttraining/training_ops/rocm/reduction/reduction_all.cc +++ b/orttraining/orttraining/training_ops/rocm/reduction/reduction_all.cc @@ -104,6 +104,9 @@ REGISTER_REDUCE_ALL_KERNEL_TYPED(ReduceAllL2, float, float) REGISTER_REDUCE_ALL_KERNEL_TYPED(ReduceAllL2, MLFloat16, float) REGISTER_REDUCE_ALL_KERNEL_TYPED(ReduceAllL2, float, MLFloat16) REGISTER_REDUCE_ALL_KERNEL_TYPED(ReduceAllL2, MLFloat16, MLFloat16) +REGISTER_REDUCE_ALL_KERNEL_TYPED(ReduceAllL2, BFloat16, float) +REGISTER_REDUCE_ALL_KERNEL_TYPED(ReduceAllL2, float, BFloat16) +REGISTER_REDUCE_ALL_KERNEL_TYPED(ReduceAllL2, BFloat16, BFloat16) } // namespace rocm } // namespace onnxruntime diff --git a/orttraining/orttraining/training_ops/rocm/rocm_training_kernels.cc b/orttraining/orttraining/training_ops/rocm/rocm_training_kernels.cc index b594c7819690f..65b0bfb070f43 100644 --- a/orttraining/orttraining/training_ops/rocm/rocm_training_kernels.cc +++ b/orttraining/orttraining/training_ops/rocm/rocm_training_kernels.cc @@ -57,12 +57,16 @@ class ONNX_OPERATOR_VERSIONED_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider class ONNX_OPERATOR_VERSIONED_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 12, 12, float, int64_t, SoftmaxCrossEntropyLoss); class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, MLFloat16, int64_t, SoftmaxCrossEntropyLoss); class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, float, int64_t, SoftmaxCrossEntropyLoss); +class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kOnnxDomain, 13, BFloat16, int64_t, SoftmaxCrossEntropyLoss); class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, float, int64_t, SoftmaxCrossEntropyLossGrad); class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, MLFloat16, int64_t, SoftmaxCrossEntropyLossGrad); +class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16, int64_t, SoftmaxCrossEntropyLossGrad); class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, float, int64_t, SoftmaxCrossEntropyLossInternal); class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, MLFloat16, int64_t, SoftmaxCrossEntropyLossInternal); +class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16, int64_t, SoftmaxCrossEntropyLossInternal); class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, float, int64_t, SoftmaxCrossEntropyLossInternalGrad); class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, MLFloat16, int64_t, SoftmaxCrossEntropyLossInternalGrad); +class ONNX_OPERATOR_TWO_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16, int64_t, SoftmaxCrossEntropyLossInternalGrad); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, float, SoftmaxGrad); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, double, SoftmaxGrad); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, MLFloat16, SoftmaxGrad); @@ -167,6 +171,15 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1 class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, MLFloat16_MLFloat16_float, BatchNormInternal); class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, MLFloat16_float_float, BatchNormInternal); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16, SoftmaxGrad); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16, SoftmaxGrad_13); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16, MixedPrecisionScale); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16_float, LayerNormalizationGrad); + +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16_float, ReduceAllL2); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, float_BFloat16, ReduceAllL2); +class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, BFloat16_BFloat16, ReduceAllL2); + #if defined(ORT_USE_NCCL) || defined(USE_MPI) // P2P communication operators. class ONNX_OPERATOR_KERNEL_CLASS_NAME(kRocmExecutionProvider, kMSDomain, 1, Send); @@ -263,12 +276,16 @@ Status RegisterRocmTrainingKernels(KernelRegistry& kernel_registry) { BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, // BuildKernelCreateInfo, BuildKernelCreateInfo, @@ -349,6 +366,15 @@ Status RegisterRocmTrainingKernels(KernelRegistry& kernel_registry) { BuildKernelCreateInfo, BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + + BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, + // P2P communication operators. #if defined(ORT_USE_NCCL) || defined(USE_MPI) BuildKernelCreateInfo, From bb09acffed8323ea13664bbff96c4914b875b477 Mon Sep 17 00:00:00 2001 From: Ye Wang <52801275+wangyems@users.noreply.github.com> Date: Thu, 3 Feb 2022 12:58:49 -0800 Subject: [PATCH 21/56] Transformer model CUDA EP align with CPU on corner case (#9889) * align with cpu on no input data * review comments and add tests Co-authored-by: Ubuntu --- .../contrib_ops/cuda/bert/fast_gelu.cc | 3 ++ .../contrib_ops/cuda/bert/skip_layer_norm.cc | 14 ++++----- onnxruntime/contrib_ops/cuda/layer_norm.cc | 10 +++---- .../test/contrib_ops/fastgelu_op_test.cc | 13 +++++++++ .../test/contrib_ops/layer_norm_test.cc | 5 ++++ .../test/contrib_ops/skiplayernorm_op_test.cc | 29 +++++++++++++++++++ 6 files changed, 59 insertions(+), 15 deletions(-) diff --git a/onnxruntime/contrib_ops/cuda/bert/fast_gelu.cc b/onnxruntime/contrib_ops/cuda/bert/fast_gelu.cc index 29f823d9949c6..fe74f7efd3fca 100644 --- a/onnxruntime/contrib_ops/cuda/bert/fast_gelu.cc +++ b/onnxruntime/contrib_ops/cuda/bert/fast_gelu.cc @@ -44,6 +44,9 @@ Status FastGelu::ComputeInternal(OpKernelContext* context) const { Tensor* output = context->Output(0, input->Shape()); int64_t input_length = input->Shape().Size(); + if (input_length == 0) { + return Status::OK(); + } int64_t bias_length = (nullptr == bias) ? 0 : bias->Shape().Size(); typedef typename ToCudaType::MappedType CudaT; diff --git a/onnxruntime/contrib_ops/cuda/bert/skip_layer_norm.cc b/onnxruntime/contrib_ops/cuda/bert/skip_layer_norm.cc index d6cac35261980..1baaaa69e4183 100644 --- a/onnxruntime/contrib_ops/cuda/bert/skip_layer_norm.cc +++ b/onnxruntime/contrib_ops/cuda/bert/skip_layer_norm.cc @@ -41,12 +41,13 @@ Status SkipLayerNorm::ComputeInternal(OpKernelContext* ctx) const { Tensor* output = ctx->Output(0, input->Shape()); - if (input->SizeInBytes() == 0) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Inputs 'input' has no data from upstream nodes"); + if (input->Shape() != skip->Shape()) { + return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, + "skip is expected to have same shape as input"); } - if (skip->SizeInBytes() == 0) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Inputs 'skip' has no data from upstream nodes"); + if (input->Shape().Size() == 0) { + return Status::OK(); } const auto& input_dims = input->Shape().GetDims(); @@ -55,11 +56,6 @@ Status SkipLayerNorm::ComputeInternal(OpKernelContext* ctx) const { "input is expected to have 3 dimensions, got ", input_dims.size()); } - if (input->Shape() != skip->Shape()) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, - "skip is expected to have same shape as input"); - } - const auto& gamma_dims = gamma->Shape().GetDims(); if (gamma_dims.size() != 1) { return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, diff --git a/onnxruntime/contrib_ops/cuda/layer_norm.cc b/onnxruntime/contrib_ops/cuda/layer_norm.cc index 3f7360bd77466..7cb3f07ac6cc3 100644 --- a/onnxruntime/contrib_ops/cuda/layer_norm.cc +++ b/onnxruntime/contrib_ops/cuda/layer_norm.cc @@ -59,12 +59,6 @@ Status LayerNorm::ComputeInternal(OpKernelContext* ctx) const auto bias_data = (simplified || (nullptr == bias)) ? nullptr : reinterpret_cast(bias->template Data()); const TensorShape& x_shape = X->Shape(); - // Sometimes due to conversion issue, the input 'X' has no data which is a case that cuda kernel cannot handle. - // Provide more error infomation here instead of CUDA errors. - if (X->SizeInBytes() == 0) { - return ORT_MAKE_STATUS(ONNXRUNTIME, INVALID_ARGUMENT, "Inputs 'X' has no data from upstream nodes"); - } - const int64_t axis = HandleNegativeAxis(axis_, x_shape.NumDimensions()); int n1 = gsl::narrow(x_shape.SizeToDimension(axis)); @@ -101,6 +95,10 @@ Status LayerNorm::ComputeInternal(OpKernelContext* ctx) const inv_var_data = reinterpret_cast(var->template MutableData()); } + if (x_shape.Size() == 0) { + return Status::OK(); + } + HostApplyLayerNorm(GetDeviceProp(), Stream(), Y_data, mean_data, inv_var_data, X_data, n1, n2, epsilon_, scale_data, bias_data); return Status::OK(); } diff --git a/onnxruntime/test/contrib_ops/fastgelu_op_test.cc b/onnxruntime/test/contrib_ops/fastgelu_op_test.cc index 5e0c513397fc7..5614e065acd0a 100644 --- a/onnxruntime/test/contrib_ops/fastgelu_op_test.cc +++ b/onnxruntime/test/contrib_ops/fastgelu_op_test.cc @@ -110,6 +110,19 @@ static void RunFastGeluTest( RunFastGeluTest(input_data, bias_data, output_data, input_dims, bias_dims, output_dims, has_bias); } +TEST(FastGeluTest, FastGeluWithNullInput) { + int batch_size = 1; + int sequence_length = 0; + int hidden_size = 4; + + std::vector input_data = {}; + + std::vector bias_data = { + -0.5f, 0.6f, 1.2f, 2.1f}; + + RunFastGeluTest(input_data, bias_data, batch_size, sequence_length, hidden_size); +} + TEST(FastGeluTest, FastGeluWithBiasFloat32) { int batch_size = 1; int sequence_length = 2; diff --git a/onnxruntime/test/contrib_ops/layer_norm_test.cc b/onnxruntime/test/contrib_ops/layer_norm_test.cc index 1e2203d5204db..9c41f218a2f2f 100644 --- a/onnxruntime/test/contrib_ops/layer_norm_test.cc +++ b/onnxruntime/test/contrib_ops/layer_norm_test.cc @@ -80,6 +80,11 @@ static void TestLayerNorm(const std::vector& x_dims, #endif } +TEST(CudaKernelTest, LayerNorm_NullInput) { + const std::vector X_dims{0, 20, 128}; + TestLayerNorm(X_dims, LAYER_NORM_OP, k_epsilon_default); +} + TEST(CudaKernelTest, LayerNorm_SmallSizeTensor) { const std::vector X_dims{4, 20, 128}; TestLayerNorm(X_dims, LAYER_NORM_OP, k_epsilon_default); diff --git a/onnxruntime/test/contrib_ops/skiplayernorm_op_test.cc b/onnxruntime/test/contrib_ops/skiplayernorm_op_test.cc index 5a9a4dce6e806..009201f13072c 100644 --- a/onnxruntime/test/contrib_ops/skiplayernorm_op_test.cc +++ b/onnxruntime/test/contrib_ops/skiplayernorm_op_test.cc @@ -83,6 +83,35 @@ static void RunTest( } } +TEST(SkipLayerNormTest, SkipLayerNormNullInput) { + int batch_size = 1; + int sequence_length = 0; + int hidden_size = 4; + + std::vector input_data = {}; + + std::vector skip_data = {}; + + std::vector gamma_data = { + 0.3f, 0.2f, 4.0f, 2.2f}; + + std::vector beta_data = { + 0.2f, 0.1f, 0.4f, 1.6f}; + + std::vector output_data = {}; + + RunTest(input_data, + skip_data, + gamma_data, + beta_data, + std::vector(), + output_data, + epsilon_, + batch_size, + sequence_length, + hidden_size); +} + TEST(SkipLayerNormTest, SkipLayerNormBatch1) { int batch_size = 1; int sequence_length = 2; From 6bbf016dc4561a45191667087a9326516988a4ea Mon Sep 17 00:00:00 2001 From: "Maxiwell S. Garcia" Date: Wed, 2 Feb 2022 10:53:34 -0600 Subject: [PATCH 22/56] cmake: disable 'attributes' error to fix the build with GCC < 9.x This patch fixes the error "requested alignment X is larger than Y" in older GCC's https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89357 --- cmake/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 475cfcdf5d8e8..650caa6652386 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -491,6 +491,14 @@ if (onnxruntime_CROSS_COMPILING) endif() endif() +if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0) + check_cxx_compiler_flag(-Wno-error HAS_NOERROR) + if (HAS_NOERROR) + string(APPEND CMAKE_CXX_FLAGS " -Wno-error=attributes") + string(APPEND CMAKE_C_FLAGS " -Wno-error=attributes") + endif() +endif() + # Mark symbols to be invisible, for macOS/iOS target only # Due to many dependencies have different symbol visibility settings, set global compile flags here. if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin|iOS") From 4f13c8ac3980239d29f834cf6bf9688b96799c21 Mon Sep 17 00:00:00 2001 From: Changming Sun Date: Thu, 3 Feb 2022 13:46:16 -0800 Subject: [PATCH 23/56] Update orttraining-linux-ci-pipeline.yml (#10462) --- .../github/azure-pipelines/orttraining-linux-ci-pipeline.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/ci_build/github/azure-pipelines/orttraining-linux-ci-pipeline.yml b/tools/ci_build/github/azure-pipelines/orttraining-linux-ci-pipeline.yml index 19cf309505192..d3b8e10e2f2ff 100644 --- a/tools/ci_build/github/azure-pipelines/orttraining-linux-ci-pipeline.yml +++ b/tools/ci_build/github/azure-pipelines/orttraining-linux-ci-pipeline.yml @@ -55,6 +55,8 @@ jobs: # Test ORT with the latest ONNX release. export ONNX_VERSION=$(cat $(Build.SourcesDirectory)/cmake/external/onnx/VERSION_NUMBER) sed -i "s/git+http:\/\/github\.com\/onnx\/onnx.*/onnx==$ONNX_VERSION/" $(Build.BinariesDirectory)/requirements.txt + #Do not explicitly specify numpy version as this is not a packaging pipeline, any version should be ok + sed -i "/^numpy/d" $(Build.BinariesDirectory)/requirements.txt python3 -m pip install -r $(Build.BinariesDirectory)/requirements.txt cp $(Build.SourcesDirectory)/tools/ci_build/github/linux/docker/scripts/training/ortmodule/stage1/requirements_torch_cpu.txt $(Build.BinariesDirectory)/requirements_torch_cpu.txt python3 -m pip install -r $(Build.BinariesDirectory)/requirements_torch_cpu.txt From 0d09dd5d20c3a5133e6e6ae1218cdc45ccaf0358 Mon Sep 17 00:00:00 2001 From: Ye Wang <52801275+wangyems@users.noreply.github.com> Date: Thu, 3 Feb 2022 23:59:05 -0800 Subject: [PATCH 24/56] Support fusion for TNLR based model (#10432) * support tnlr based offensive V4 model * Update onnx_model_tnlr.py Co-authored-by: Ubuntu --- .../tools/transformers/onnx_model_tnlr.py | 180 ++++++++++++++++++ .../python/tools/transformers/optimizer.py | 18 +- 2 files changed, 190 insertions(+), 8 deletions(-) create mode 100644 onnxruntime/python/tools/transformers/onnx_model_tnlr.py diff --git a/onnxruntime/python/tools/transformers/onnx_model_tnlr.py b/onnxruntime/python/tools/transformers/onnx_model_tnlr.py new file mode 100644 index 0000000000000..c99817c410c3e --- /dev/null +++ b/onnxruntime/python/tools/transformers/onnx_model_tnlr.py @@ -0,0 +1,180 @@ +#------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +#-------------------------------------------------------------------------- +import logging +from fusion_attention import FusionAttention, AttentionMask +from fusion_utils import NumpyHelper +from onnx import helper, numpy_helper, TensorProto, NodeProto +from onnx_model import OnnxModel +from onnx_model_bert import BertOnnxModel +from typing import Union + +logger = logging.getLogger(__name__) + + +class FusionTnlrAttention(FusionAttention): + """ + Fuse TNLR Attention subgraph into one Attention node. + TNLR Attention has extra addtion after qk nodes and adopts [S, B, NH] as I/O shape. + """ + def __init__(self, model: OnnxModel, hidden_size: int, num_heads: int, attention_mask: AttentionMask): + super().__init__(model, hidden_size, num_heads, attention_mask) + + def create_attention_node(self, mask_index: str, matmul: NodeProto, add: NodeProto, num_heads: int, + hidden_size: int, input: str, output: str, add_qk_str: str) -> Union[NodeProto, None]: + + assert num_heads > 0 + if hidden_size > 0 and (hidden_size % num_heads) != 0: + logger.debug(f"input hidden size {hidden_size} is not a multiple of num of heads {num_heads}") + return None + + weight = self.model.get_initializer(matmul.input[1]) + bias = self.model.get_initializer(add.input[1]) or self.model.get_initializer(add.input[0]) + + if weight is None or bias is None: + return None + + qkv_weight = NumpyHelper.to_array(weight) + qkv_bias = NumpyHelper.to_array(bias) + + attention_node_name = self.model.create_node_name('Attention') + + weight = helper.make_tensor(name=attention_node_name + '_qkv_weight', + data_type=TensorProto.FLOAT, + dims=[hidden_size, 3 * hidden_size], + vals=qkv_weight.flatten().tolist()) + + # Sometimes weights and bias are stored in fp16 + if weight.data_type == 10: + weight.CopyFrom(numpy_helper.from_array(NumpyHelper.to_array(weight).astype(np.float16), weight.name)) + self.model.add_initializer(weight, self.this_graph_name) + + bias = helper.make_tensor(name=attention_node_name + '_qkv_bias', + data_type=TensorProto.FLOAT, + dims=[3 * hidden_size], + vals=qkv_bias.flatten().tolist()) + if bias.data_type == 10: + bias.CopyFrom(numpy_helper.from_array(NumpyHelper.to_array(bias).astype(np.float16), bias.name)) + self.model.add_initializer(bias, self.this_graph_name) + + attention_inputs = [input, attention_node_name + '_qkv_weight', attention_node_name + '_qkv_bias'] + if mask_index is not None: + attention_inputs.append(mask_index) + else: + attention_inputs.append("") + + if add_qk_str is not None: + attention_inputs.append("") + attention_inputs.append(add_qk_str) + + attention_node = helper.make_node('Attention', + inputs=attention_inputs, + outputs=[output], + name=attention_node_name) + attention_node.domain = "com.microsoft" + attention_node.attribute.extend([helper.make_attribute("num_heads", num_heads)]) + + return attention_node + + def fuse(self, normalize_node, input_name_to_nodes, output_name_to_node): + # Sometimes we can not fuse skiplayernormalization since the add before layernorm has an output that used by nodes outside skiplayernorm + # Conceptually we treat add before layernorm as skiplayernorm node since they share the same pattern + start_node = normalize_node + if normalize_node.op_type != 'SkipLayerNormalization': + return + + # SkipLayerNormalization has two inputs, and one of them is the root input for attention. + qkv_nodes = self.model.match_parent_path(start_node, + ['Where', 'Add', 'MatMul', 'Reshape', 'Transpose', 'MatMul'], + [1, 1, 1, 0, 0, 0]) + if qkv_nodes is not None: + (_, _, matmul_below, reshape_qkv, transpose_qkv, matmul_qkv) = qkv_nodes + else: + return + + other_inputs = [] + for i, input in enumerate(start_node.input): + if input not in output_name_to_node: + continue + + if input == qkv_nodes[0].output[0]: + continue + other_inputs.append(input) + if len(other_inputs) != 1: + return + + root_input = other_inputs[0] + + v_nodes = self.model.match_parent_path(matmul_qkv, ['Transpose', 'Reshape', 'Slice', 'Add', 'MatMul'], + [1, 0, 0, 0, 1]) + if v_nodes is None: + return + (_, _, _, add, matmul) = v_nodes + + upper_nodes = self.model.match_parent_path(matmul, ['Transpose'], [0]) + transpose = upper_nodes[0] + + qk_nodes = self.model.match_parent_path(matmul_qkv, ['Softmax', 'Add', 'MatMul'], [0, 0, 0]) + if qk_nodes is None: + return + (_, add_qk, matmul_qk) = qk_nodes + + q_nodes = self.model.match_parent_path(matmul_qk, ['Mul', 'Transpose', 'Reshape', 'Slice', 'Add', 'MatMul'], + [0, 0, 0, 0, 0, 1]) + if q_nodes is None: + return + add = q_nodes[-2] + matmul = q_nodes[-1] + + k_nodes = self.model.match_parent_path(matmul_qk, ['Transpose', 'Reshape', 'Slice', 'Add', 'MatMul'], + [1, 0, 0, 0, 1]) + if k_nodes is None: + return + add = k_nodes[-2] + matmul = k_nodes[-1] + + extra_add_qk_nodes = self.model.match_parent_path(add_qk, ['Reshape', 'Where'], [1, 0]) + if extra_add_qk_nodes is None: + return + + if matmul.input[0] == root_input: + mask_index = None + attention_last_node = reshape_qkv + # number of heads are same for all the paths, hence to create attention node, we pass the q_num_heads + # the input_hidden_size represents the input hidden size, this is used as needed but hidden sizes for Q, K are extracted appropriately + new_node = self.create_attention_node(mask_index, matmul, add, self.num_heads, self.hidden_size, root_input, + attention_last_node.output[0], extra_add_qk_nodes[0].input[0]) + if new_node is None: + return + + self.nodes_to_add.append(new_node) + self.node_name_to_graph_name[new_node.name] = self.this_graph_name + + # Add a transpose node after the attention node + back_transpose = helper.make_node("Transpose", ["back_transpose_in_" + new_node.name], [new_node.output[0]], + "back_transpose_" + new_node.name, + perm=[1, 0, 2]) + self.model.add_node(back_transpose, self.this_graph_name) + new_node.input[0] = transpose.input[0] + new_node.output[0] = "back_transpose_in_" + new_node.name + + self.nodes_to_remove.extend([attention_last_node, transpose_qkv, matmul_qkv]) + self.nodes_to_remove.extend(qk_nodes) + self.nodes_to_remove.extend(q_nodes) + self.nodes_to_remove.extend(k_nodes) + self.nodes_to_remove.extend(v_nodes) + + # Use prune graph to remove mask nodes since they are shared by all attention nodes. + #self.nodes_to_remove.extend(mask_nodes) + self.prune_graph = True + + +class TnlrOnnxModel(BertOnnxModel): + def __init__(self, model, num_heads, hidden_size): + super().__init__(model, num_heads, hidden_size) + self.attention_mask = AttentionMask(self) + self.attention_fusion = FusionTnlrAttention(self, self.hidden_size, self.num_heads, self.attention_mask) + + def fuse_attention(self): + self.attention_fusion.apply() diff --git a/onnxruntime/python/tools/transformers/optimizer.py b/onnxruntime/python/tools/transformers/optimizer.py index d7a25c829d916..55699ae7b0544 100644 --- a/onnxruntime/python/tools/transformers/optimizer.py +++ b/onnxruntime/python/tools/transformers/optimizer.py @@ -28,6 +28,7 @@ from onnx_model_bert_tf import BertOnnxModelTF from onnx_model_bert_keras import BertOnnxModelKeras from onnx_model_gpt2 import Gpt2OnnxModel +from onnx_model_tnlr import TnlrOnnxModel from fusion_options import FusionOptions logger = logging.getLogger(__name__) @@ -39,7 +40,8 @@ "bert_tf": (BertOnnxModelTF, "tf2onnx", 0), "bert_keras": (BertOnnxModelKeras, "keras2onnx", 0), "gpt2": (Gpt2OnnxModel, "pytorch", 1), - "gpt2_tf": (Gpt2OnnxModel, 'tf2onnx', 0) # might add a class for GPT2OnnxModel for TF later. + "gpt2_tf": (Gpt2OnnxModel, 'tf2onnx', 0), # might add a class for GPT2OnnxModel for TF later. + "tnlr": (TnlrOnnxModel, "pytorch", 1), } @@ -115,9 +117,9 @@ def optimize_by_fusion(model: ModelProto, model (ModelProto): model object model_type (str, optional): model type - like bert, bert_tf, bert_keras or gpt2. Defaults to 'bert'. num_heads (int, optional): number of attention heads. Defaults to 0. - 0 allows detect the parameter from graph automatically (for model_type "bert" only). + 0 allows detect the parameter from graph automatically (for model_type "bert" only). hidden_size (int, optional): hidden size. Defaults to 0. - 0 allows detect the parameter from graph automatically (for model_type "bert" only). + 0 allows detect the parameter from graph automatically (for model_type "bert" only). optimization_options (FusionOptions, optional): optimization options that turn on/off some fusions. Defaults to None. Returns: @@ -159,7 +161,7 @@ def optimize_model(input: str, only_onnxruntime: bool = False): """ Optimize Model by OnnxRuntime and/or python fusion logic. - ONNX Runtime has graph optimizations (https://onnxruntime.ai/docs/resources/graph-optimizations.html). + ONNX Runtime has graph optimizations (https://onnxruntime.ai/docs/resources/graph-optimizations.html). However, the coverage is limited. We also have graph fusions that implemented in Python to improve the coverage. They can combined: ONNX Runtime will run first when opt_level > 0, then graph fusions in Python will be applied. @@ -170,8 +172,8 @@ def optimize_model(input: str, When opt_level is 0 and only_onnxruntime is False, only python fusion logic is used and onnxruntime is disabled. - When opt_level > 1, use_gpu shall set properly since the optimized graph might contain operators for GPU or CPU only. - If your model is intended for GPU inference only (especially float16 or mixed precision model), it is recommended to + When opt_level > 1, use_gpu shall set properly since the optimized graph might contain operators for GPU or CPU only. + If your model is intended for GPU inference only (especially float16 or mixed precision model), it is recommended to set use_gpu to be True, otherwise the model is not optimized for GPU inference. For BERT model, num_heads and hidden_size are optional. For other model types, you need specify these parameters. @@ -180,9 +182,9 @@ def optimize_model(input: str, input (str): input model path. model_type (str, optional): model type - like bert, bert_tf, bert_keras or gpt2. Defaults to 'bert'. num_heads (int, optional): number of attention heads. Defaults to 0. - 0 allows detect the parameter from graph automatically (for model_type "bert" only). + 0 allows detect the parameter from graph automatically (for model_type "bert" only). hidden_size (int, optional): hidden size. Defaults to 0. - 0 allows detect the parameter from graph automatically (for model_type "bert" only). + 0 allows detect the parameter from graph automatically (for model_type "bert" only). optimization_options (FusionOptions, optional): optimization options that turn on/off some fusions. Defaults to None. opt_level (int, optional): onnxruntime graph optimization level (0, 1, 2 or 99) or None. Defaults to None. When the value is None, default value (1 for bert and gpt2, 0 for other model types) will be used. From d0ab881d070756d50d8b75fa03e80d78f9b0a0cc Mon Sep 17 00:00:00 2001 From: wraveane <75912517+wraveane@users.noreply.github.com> Date: Fri, 4 Feb 2022 15:10:04 -0500 Subject: [PATCH 25/56] Contrib ops for TRT plugins: EfficientNMS and Pyramid ROI Align (#9486) * Contrib ops for TRT plugins: EfficientNMS and Pyramid ROI Align * Contrib ops for TRT plugins: Multilevel Crop and Resize --- .../core/graph/contrib_ops/contrib_defs.cc | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) diff --git a/onnxruntime/core/graph/contrib_ops/contrib_defs.cc b/onnxruntime/core/graph/contrib_ops/contrib_defs.cc index 950dd1760eded..52e076cdf66b0 100644 --- a/onnxruntime/core/graph/contrib_ops/contrib_defs.cc +++ b/onnxruntime/core/graph/contrib_ops/contrib_defs.cc @@ -2820,6 +2820,169 @@ Example 4: } }); + static const char* EfficientNMS_TRT_ver1_doc = + R"DOC(Efficient NMS TensorRT Plugin.)DOC"; + + ONNX_CONTRIB_OPERATOR_SCHEMA(EfficientNMS_TRT) + .SetDomain(kOnnxDomain) + .SinceVersion(1) + .SetDoc(EfficientNMS_TRT_ver1_doc) + .Input(0, "boxes", "The boxes input tensor.", "T") + .Input(1, "scores", "The scores input tensor.", "T") + .Input(2, "anchors", "The anchors input tensor.", "T", OpSchema::Optional) + .Output(0, "num_detections", "The num_detections output tensor.", "tensor(int32)") + .Output(1, "detection_boxes", "The detection_boxes output tensor.", "T") + .Output(2, "detection_scores", "The detection_scores output tensor.", "T") + .Output(3, "detection_classes", "The detection_classes output tensor.", "tensor(int32)") + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") + .Attr("background_class", "Background class ID.", AttributeProto::INT) + .Attr("box_coding", "Encoding type for the boxes or anchors inputs.", AttributeProto::INT) + .Attr("iou_threshold", "Box IOU threshold value.", AttributeProto::FLOAT) + .Attr("max_output_boxes", "Max detections to output.", AttributeProto::INT) + .Attr("plugin_version", "Version number of the TRT plugin.", AttributeProto::STRING) + .Attr("score_activation", "Activation function to apply to the scores input.", AttributeProto::INT) + .Attr("score_threshold", "Score threshold value.", AttributeProto::FLOAT) + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + // Type inference + using namespace ONNX_NAMESPACE; + ONNX_NAMESPACE::updateOutputElemType(ctx, 0, ONNX_NAMESPACE::TensorProto::INT32); + propagateElemTypeFromInputToOutput(ctx, 0, 1); + propagateElemTypeFromInputToOutput(ctx, 0, 2); + ONNX_NAMESPACE::updateOutputElemType(ctx, 3, ONNX_NAMESPACE::TensorProto::INT32); + + // Shape Inference + if (!hasInputShape(ctx, 0)) { + return; + } + int64_t max_output_boxes = 1; + auto max_output_boxes_proto = ctx.getAttribute("max_output_boxes"); + if (max_output_boxes_proto) { + max_output_boxes = max_output_boxes_proto->i(); + } + if (max_output_boxes < 1) { + fail_shape_inference("Attribute 'max_output_boxes' must be >= 1.") + } + + Dim batch_size; + unifyInputDim(ctx, 0, 0, batch_size); + + ONNX_NAMESPACE::TensorShapeProto num_detections_shape; + *num_detections_shape.add_dim() = batch_size; + num_detections_shape.add_dim()->set_dim_value(1); + updateOutputShape(ctx, 0, num_detections_shape); + + ONNX_NAMESPACE::TensorShapeProto detection_boxes_shape; + *detection_boxes_shape.add_dim() = batch_size; + detection_boxes_shape.add_dim()->set_dim_value(max_output_boxes); + detection_boxes_shape.add_dim()->set_dim_value(4); + updateOutputShape(ctx, 1, detection_boxes_shape); + + ONNX_NAMESPACE::TensorShapeProto detection_scores_shape; + *detection_scores_shape.add_dim() = batch_size; + detection_scores_shape.add_dim()->set_dim_value(max_output_boxes); + updateOutputShape(ctx, 2, detection_scores_shape); + + ONNX_NAMESPACE::TensorShapeProto detection_classes_shape; + *detection_classes_shape.add_dim() = batch_size; + detection_classes_shape.add_dim()->set_dim_value(max_output_boxes); + updateOutputShape(ctx, 3, detection_classes_shape); + }); + + static const char* MultilevelCropAndResize_TRT_ver1_doc = + R"DOC(Multilevel Crop and Resize TensorRT Plugin.)DOC"; + + ONNX_CONTRIB_OPERATOR_SCHEMA(MultilevelCropAndResize_TRT) + .SetDomain(kOnnxDomain) + .SinceVersion(1) + .SetDoc(MultilevelCropAndResize_TRT_ver1_doc) + .Input(0, "boxes", "The boxes input tensor.", "T") + .Input(1, "feature_map_0", "The first feature map input tensor.", "T") + .Input(2, "feature_map_1", "The second feature map input tensor.", "T") + .Input(3, "feature_map_2", "The third feature map input tensor.", "T") + .Input(4, "feature_map_3", "The fourth feature map input tensor.", "T") + .Output(0, "patches", "The cropped patches output tensor.", "T") + .TypeConstraint("T", {"tensor(float)"}, "Constrain input and output types to float tensors.") + .Attr("image_size", "Image size.", AttributeProto::INTS) + .Attr("pooled_size", "Pooled size.", AttributeProto::INT) + .Attr("plugin_version", "Version number of the TRT plugin.", AttributeProto::STRING) + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + // Type inference + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + // Shape Inference + if (!hasInputShape(ctx, 0)) { + return; + } + int64_t pooled_size = 1; + auto pooled_size_proto = ctx.getAttribute("pooled_size"); + if (pooled_size_proto) { + pooled_size = pooled_size_proto->i(); + } + if (pooled_size < 1) { + fail_shape_inference("Attribute 'pooled_size' must be >= 1.") + } + + Dim batch_size, number_boxes, channels; + unifyInputDim(ctx, 0, 0, batch_size); + unifyInputDim(ctx, 0, 1, number_boxes); + unifyInputDim(ctx, 1, 1, channels); + + ONNX_NAMESPACE::TensorShapeProto output_shape; + *output_shape.add_dim() = batch_size; + *output_shape.add_dim() = number_boxes; + *output_shape.add_dim() = channels; + output_shape.add_dim()->set_dim_value(pooled_size); + output_shape.add_dim()->set_dim_value(pooled_size); + updateOutputShape(ctx, 0, output_shape); + }); + + static const char* PyramidROIAlign_TRT_ver1_doc = + R"DOC(Pyramid ROI Align TensorRT Plugin.)DOC"; + + ONNX_CONTRIB_OPERATOR_SCHEMA(PyramidROIAlign_TRT) + .SetDomain(kOnnxDomain) + .SinceVersion(1) + .SetDoc(PyramidROIAlign_TRT_ver1_doc) + .Input(0, "boxes", "The boxes input tensor.", "T") + .Input(1, "feature_map_0", "The first feature map input tensor.", "T") + .Input(2, "feature_map_1", "The second feature map input tensor.", "T") + .Input(3, "feature_map_2", "The third feature map input tensor.", "T") + .Input(4, "feature_map_3", "The fourth feature map input tensor.", "T") + .Output(0, "patches", "The cropped patches output tensor.", "T") + .TypeConstraint("T", {"tensor(float)"}, "Constrain input and output types to float tensors.") + .Attr("pooled_size", "Pooled size.", AttributeProto::INT) + .Attr("plugin_version", "Version number of the TRT plugin.", AttributeProto::STRING) + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + // Type inference + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + // Shape Inference + if (!hasInputShape(ctx, 0)) { + return; + } + int64_t pooled_size = 1; + auto pooled_size_proto = ctx.getAttribute("pooled_size"); + if (pooled_size_proto) { + pooled_size = pooled_size_proto->i(); + } + if (pooled_size < 1) { + fail_shape_inference("Attribute 'pooled_size' must be >= 1.") + } + + Dim batch_size, number_boxes, channels; + unifyInputDim(ctx, 0, 0, batch_size); + unifyInputDim(ctx, 0, 1, number_boxes); + unifyInputDim(ctx, 1, 1, channels); + + ONNX_NAMESPACE::TensorShapeProto output_shape; + *output_shape.add_dim() = batch_size; + *output_shape.add_dim() = number_boxes; + *output_shape.add_dim() = channels; + output_shape.add_dim()->set_dim_value(pooled_size); + output_shape.add_dim()->set_dim_value(pooled_size); + updateOutputShape(ctx, 0, output_shape); + }); + static const char* Gelu_ver1_doc = R"DOC(Gaussian Error Linear Unit. A high-performing neural network activation function.The GELU nonlinearity is From 927f1f18c9db4614ec5cab021c1041bb55766694 Mon Sep 17 00:00:00 2001 From: Rachel Guo <35738743+YUNQIUGUO@users.noreply.github.com> Date: Fri, 4 Feb 2022 17:04:48 -0800 Subject: [PATCH 26/56] [NNAPI QDQ] Add QDQ AveragePool op support (#10464) * wip * save * address pr comments * update * revert minor changes Co-authored-by: rachguo --- .../nnapi/nnapi_builtin/builders/helper.cc | 8 ++++ .../nnapi/nnapi_builtin/builders/helper.h | 4 ++ .../nnapi_builtin/builders/op_builder.cc | 19 +++++----- .../builders/op_support_checker.cc | 18 ++++++--- onnxruntime/test/optimizer/qdq_test_utils.h | 27 ++++++++++++++ .../test/optimizer/qdq_transformer_test.cc | 37 +++---------------- .../test/providers/nnapi/nnapi_basic_test.cc | 7 ++++ 7 files changed, 73 insertions(+), 47 deletions(-) diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc index 1017d339a623f..5b958c686d007 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc @@ -70,8 +70,11 @@ QuantizedOpType GetQuantizedOpType(const NodeUnit& node_unit) { return QuantizedOpType::QDQConv; else if (op_type == "Resize") return QuantizedOpType::QDQResize; + else if (op_type == "AveragePool") + return QuantizedOpType::QDQAveragePool; } else { // throw? + // Do we want to throw here? seems got neglected last time } return QuantizedOpType::Unknown; @@ -103,6 +106,11 @@ bool IsQuantizedConv(QuantizedOpType quant_op_type) { (quant_op_type == QuantizedOpType::QDQConv); } +bool IsQuantizedPool(QuantizedOpType quant_op_type) { + return (quant_op_type == QuantizedOpType::QLinearAveragePool) || + (quant_op_type == QuantizedOpType::QDQAveragePool); +} + bool IsQuantizedBinaryOp(QuantizedOpType quant_op_type) { return quant_op_type == QuantizedOpType::QLinearMatMul || quant_op_type == QuantizedOpType::QLinearAdd || diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h index c861968869542..2d99bce246184 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h @@ -87,6 +87,7 @@ enum class QuantizedOpType : uint8_t { // QLinearReduceMean, QDQConv, QDQResize, + QDQAveragePool, // TODO, add other QDQ NodeUnit types }; @@ -105,6 +106,9 @@ ConvType GetConvType(const NodeUnit& node_unit, const InitializedTensorSet& init // If this is a quantized Conv (QLinearConv or QDQConv) bool IsQuantizedConv(QuantizedOpType quant_op_type); +// If this is a quantized Pool (QLinearAveragePool or QDQAveragePool) +bool IsQuantizedPool(QuantizedOpType quant_op_type); + // This quantized op is an operator or qdq node unit takes 2 inputs and produces 1 output // Such as QLinearConv, QLinearMatMul, QLinearAdd, QDQConv,... bool IsQuantizedBinaryOp(QuantizedOpType quant_op_type); diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc index e29c3c6401a38..8a61e2a105127 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc @@ -996,7 +996,7 @@ void BatchNormalizationOpBuilder::AddInitializersToSkip(ModelBuilder& model_buil model_builder.AddInitializerToSkip(node_unit.Inputs()[1].node_arg.Name()); // scale model_builder.AddInitializerToSkip(node_unit.Inputs()[2].node_arg.Name()); // B model_builder.AddInitializerToSkip(node_unit.Inputs()[3].node_arg.Name()); // mean - model_builder.AddInitializerToSkip(node_unit.Inputs()[4].node_arg.Name()); //var + model_builder.AddInitializerToSkip(node_unit.Inputs()[4].node_arg.Name()); // var } Status BatchNormalizationOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const NodeUnit& node_unit) const { @@ -1106,8 +1106,7 @@ class PoolOpBuilder : public BaseOpBuilder { }; /* static */ bool PoolOpBuilder::IsQuantizedOp(const NodeUnit& node_unit) { - // TODO, add support for QDQ NodeUnit - return node_unit.OpType() == "QLinearAveragePool"; + return IsQuantizedPool(GetQuantizedOpType(node_unit)); } void PoolOpBuilder::AddInitializersToSkip(ModelBuilder& model_builder, const NodeUnit& node_unit) const { @@ -1156,8 +1155,8 @@ Status PoolOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const N const auto& op_type = node_unit.OpType(); int32_t op_code; - bool is_qlinear_average_pool = op_type == "QLinearAveragePool"; - bool is_average_pool = op_type == "AveragePool" || is_qlinear_average_pool; + bool is_quant_pool = IsQuantizedOp(node_unit); + bool is_average_pool = op_type == "AveragePool" || op_type == "QLinearAveragePool"; if (is_average_pool || op_type == "GlobalAveragePool") op_code = ANEURALNETWORKS_AVERAGE_POOL_2D; else // (op_type == "MaxPool" || op_type == "GlobalMaxPool") @@ -1200,7 +1199,7 @@ Status PoolOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const N const OperandType& input_operand_type = operand_types.at(input); float y_scale = input_operand_type.operandType.scale; int32_t y_zero_point = input_operand_type.operandType.zeroPoint; - if (is_qlinear_average_pool) { + if (is_quant_pool) { const auto& initializers = model_builder.GetInitializerTensors(); float x_scale = 0.0f; int32_t x_zero_point = 0; @@ -2624,7 +2623,7 @@ Status SliceOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const return Status::OK(); }; - ORT_RETURN_IF_ERROR(AddOperand("starts", param_dimen, compute_metadata.starts_)); //nnapi_begin + ORT_RETURN_IF_ERROR(AddOperand("starts", param_dimen, compute_metadata.starts_)); // nnapi_begin // NNAPI has 2 slice operations // - ANEURALNETWORKS_SLICE @@ -2639,7 +2638,7 @@ Status SliceOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const model_builder.GetNNAPIFeatureLevel() > ANEURALNETWORKS_FEATURE_LEVEL_2) { op_code = ANEURALNETWORKS_SLICE; // the nnapi size of the slice in this case is the output shape - ORT_RETURN_IF_ERROR(AddOperand("sizes", param_dimen, compute_metadata.output_dims_)); //nnapi_sizes + ORT_RETURN_IF_ERROR(AddOperand("sizes", param_dimen, compute_metadata.output_dims_)); // nnapi_sizes } else { // ** The special treatment of ends ** // The nnapi_end need some special handling, based on the current undocumented design of @@ -2662,8 +2661,8 @@ Status SliceOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const ends[i] = -static_cast(input_shape[i] + 1); } } - ORT_RETURN_IF_ERROR(AddOperand("ends", param_dimen, ends)); //nnapi_end - ORT_RETURN_IF_ERROR(AddOperand("steps", param_dimen, compute_metadata.steps_)); //nnapi_strides + ORT_RETURN_IF_ERROR(AddOperand("ends", param_dimen, ends)); // nnapi_end + ORT_RETURN_IF_ERROR(AddOperand("steps", param_dimen, compute_metadata.steps_)); // nnapi_strides // We do not use the following inputs in ANEURALNETWORKS_STRIDED_SLICE, set them all to 0 ADD_SCALAR_OPERAND(model_builder, input_indices, 0); // begin_mask ADD_SCALAR_OPERAND(model_builder, input_indices, 0); // end_mask diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc index 5c132f42958c5..950fb302f1b53 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc @@ -562,6 +562,8 @@ class PoolOpSupportChecker : public BaseOpSupportChecker { } bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; + bool IsNodeUnitTypeSupported(const NodeUnit& /* node_unit */) const override { return true; } + static bool IsQuantizedOp(const NodeUnit& node_unit); }; /* static */ void PoolOpSupportChecker::CreateSharedOpSupportChecker( @@ -577,6 +579,10 @@ class PoolOpSupportChecker : public BaseOpSupportChecker { }); } +/* static */ bool PoolOpSupportChecker::IsQuantizedOp(const NodeUnit& node_unit) { + return IsQuantizedPool(GetQuantizedOpType(node_unit)); +} + bool PoolOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, const OpSupportCheckParams& params) const { const auto& op_name = node_unit.Name(); @@ -594,8 +600,8 @@ bool PoolOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initial return false; } - bool is_qlinear_average_pool = op_type == "QLinearAveragePool"; - if (op_type == "AveragePool" || op_type == "MaxPool" || is_qlinear_average_pool) { + bool is_quant_pool = IsQuantizedOp(node_unit); + if (op_type == "AveragePool" || op_type == "MaxPool" || op_type == "QLinearAveragePool") { NodeAttrHelper helper(node_unit); const auto count_include_pad = helper.Get("count_include_pad", 0); @@ -636,7 +642,7 @@ bool PoolOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initial } // We need to check if we have valid scales and zero points for QLinearAveragePool - if (is_qlinear_average_pool) { + if (is_quant_pool) { // Check input scales and ZPs if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, true /* is_input */)) return false; @@ -693,11 +699,11 @@ bool PoolOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initial bool PoolOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { bool is_max_pool = node_unit.OpType() == "MaxPool"; - bool is_qlinear_average_pool = node_unit.OpType() == "QLinearAveragePool"; - if (!is_max_pool && !is_qlinear_average_pool) + bool is_quant_pool = IsQuantizedOp(node_unit); + if (!is_max_pool && !is_quant_pool) return BaseOpSupportChecker::HasSupportedInputsImpl(node_unit); - if (is_qlinear_average_pool) { + if (is_quant_pool) { return HasValidUnaryOpQuantizedInputs(node_unit); } diff --git a/onnxruntime/test/optimizer/qdq_test_utils.h b/onnxruntime/test/optimizer/qdq_test_utils.h index 118ed8697dae0..7a054c9a64352 100644 --- a/onnxruntime/test/optimizer/qdq_test_utils.h +++ b/onnxruntime/test/optimizer/qdq_test_utils.h @@ -78,6 +78,33 @@ GetQDQTestCaseFn BuildQDQConvTestCase(const std::vector& input_shape, c }; } +template +GetQDQTestCaseFn BuildQDQAveragePoolTestCase(const std::vector& input_shape) { + return [input_shape](ModelTestBuilder& builder) { + auto* input_arg = builder.MakeInput(input_shape, -1.f, 1.f); + auto* output_arg = builder.MakeOutput(); + // add QDQ + AveragePool + auto* dq_output = AddQDQNodePair(builder, input_arg, .0035f, 7); + auto* averagepool_output = builder.MakeIntermediate(); + Node& pool_node = builder.AddNode("AveragePool", {dq_output}, {averagepool_output}); + std::vector pads((input_shape.size() - 2) * 2, 1); + pool_node.AddAttribute("pads", pads); + std::vector kernel_shape(input_shape.size() - 2, 3); + pool_node.AddAttribute("kernel_shape", kernel_shape); + + // add QDQ output + auto* q_output = builder.MakeIntermediate(); + builder.AddQuantizeLinearNode(averagepool_output, + .0038f, + std::numeric_limits::max() / 2, + q_output); + builder.AddDequantizeLinearNode(q_output, + .0039f, + std::numeric_limits::max() / 2, + output_arg); + }; +} + GetQDQTestCaseFn BuildQDQResizeTestCase(const std::vector& input_shape, const std::vector& sizes_data, const std::string& mode = "nearest", diff --git a/onnxruntime/test/optimizer/qdq_transformer_test.cc b/onnxruntime/test/optimizer/qdq_transformer_test.cc index d74160217f46a..7ea62a2817100 100644 --- a/onnxruntime/test/optimizer/qdq_transformer_test.cc +++ b/onnxruntime/test/optimizer/qdq_transformer_test.cc @@ -217,31 +217,7 @@ TEST(QDQTransformerTests, ConvMaxPoolReshape_Int8) { template void QDQTransformerAveragePoolTests() { auto test_case = [&](const std::vector& input_shape) { - auto build_test_case = [&](ModelTestBuilder& builder) { - auto* input_arg = builder.MakeInput(input_shape, -1.f, 1.f); - auto* output_arg = builder.MakeOutput(); - // add QDQ + AveragePool - auto* dq_output = AddQDQNodePair(builder, input_arg, .0035f, 7); - auto* averagepool_output = builder.MakeIntermediate(); - Node& pool_node = builder.AddNode("AveragePool", {dq_output}, {averagepool_output}); - std::vector pads((input_shape.size() - 2) * 2, 1); - pool_node.AddAttribute("pads", pads); - std::vector kernel_shape(input_shape.size() - 2, 3); - pool_node.AddAttribute("kernel_shape", kernel_shape); - - // add QDQ output - auto* q_output = builder.MakeIntermediate(); - builder.AddQuantizeLinearNode(averagepool_output, - .0038f, - std::numeric_limits::max() / 2, - q_output); - builder.AddDequantizeLinearNode(q_output, - .0039f, - std::numeric_limits::max() / 2, - output_arg); - }; - - auto check_binary_op_graph = [&](InferenceSessionWrapper& session) { + auto check_averagepool_op_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); if constexpr (std::is_same::value) { EXPECT_EQ(op_to_count["com.microsoft.QLinearAveragePool"], 1); @@ -256,8 +232,8 @@ void QDQTransformerAveragePoolTests() { } }; - TransformerTester(build_test_case, - check_binary_op_graph, + TransformerTester(BuildQDQAveragePoolTestCase(input_shape), + check_averagepool_op_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -614,8 +590,7 @@ void QDQTransformerGemmTests(bool has_output_q, bool has_bias, bool beta_not_one auto check_binary_op_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); - if ((!has_output_q || std::is_same_v)&& - (!has_bias || (std::is_same_v && !beta_not_one)) && + if ((!has_output_q || std::is_same_v)&&(!has_bias || (std::is_same_v && !beta_not_one)) && (std::is_same_v || std::is_same_v)) { EXPECT_EQ(op_to_count["com.microsoft.QGemm"], 1); EXPECT_EQ(op_to_count["Gemm"], 0); @@ -800,7 +775,7 @@ TEST(QDQTransformerTests, Transpose_No_Fusion) { TEST(QDQTransformerTests, Resize) { auto test_case = [&](const std::vector& input1_shape, const std::vector& sizes_shape) { - auto check_matmul_graph = [&](InferenceSessionWrapper& session) { + auto check_resize_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["Resize"], 1); EXPECT_EQ(op_to_count["QuantizeLinear"], 0); @@ -808,7 +783,7 @@ TEST(QDQTransformerTests, Resize) { }; TransformerTester(BuildQDQResizeTestCase(input1_shape, sizes_shape), - check_matmul_graph, + check_resize_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; diff --git a/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc b/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc index c59efaae76e92..4316ff7a51d9e 100644 --- a/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc +++ b/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc @@ -319,6 +319,13 @@ TEST(NnapiExecutionProviderTest, TestQDQResize) { "nnapi_qdq_test_graph_resize"); } +TEST(NnapiExecutionProviderTest, TestQDQAveragePool) { + RunQDQModelTest(BuildQDQAveragePoolTestCase( + {1, 3, 32, 32} /* input_shape */), + "nnapi_qdq_test_graph_averagepool"); +} + #endif // !(ORT_MINIMAL_BUILD) TEST(NnapiExecutionProviderTest, NNAPIFlagsTest) { From 0f5d0a091a37db48593905c33a834597338288e8 Mon Sep 17 00:00:00 2001 From: Chi Lo <54722500+chilo-ms@users.noreply.github.com> Date: Sat, 5 Feb 2022 11:15:12 -0800 Subject: [PATCH 27/56] Make user capable of adding new field in OrtTensorRTProviderOptionsV2 as new provider option (#10450) * modify code for add additional field in OrtTensorRTProviderOptionsV2 * add include file * fix typo * fix bug * add comment * fix code * revert change --- .../tensorrt/tensorrt_provider_options.h | 4 +- .../core/session/onnxruntime_c_api.h | 3 ++ .../core/session/onnxruntime_cxx_api.h | 1 + .../core/session/onnxruntime_cxx_inline.h | 5 ++ .../tensorrt_execution_provider_info.cc | 4 +- .../tensorrt/tensorrt_provider_factory.cc | 5 +- .../core/session/provider_bridge_ort.cc | 46 ++++++++++++++++++- .../python/onnxruntime_pybind_state.cc | 3 +- .../python/onnxruntime_pybind_state_common.h | 2 + onnxruntime/test/perftest/ort_test_session.cc | 5 +- onnxruntime/test/providers/cpu/model_tests.cc | 3 +- onnxruntime/test/util/default_providers.cc | 10 ++++ .../test/util/include/default_providers.h | 2 + 13 files changed, 84 insertions(+), 9 deletions(-) diff --git a/include/onnxruntime/core/providers/tensorrt/tensorrt_provider_options.h b/include/onnxruntime/core/providers/tensorrt/tensorrt_provider_options.h index 43b0b938f130b..fd4ad0b6d9cd6 100644 --- a/include/onnxruntime/core/providers/tensorrt/tensorrt_provider_options.h +++ b/include/onnxruntime/core/providers/tensorrt/tensorrt_provider_options.h @@ -5,7 +5,9 @@ /// /// Options for the TensorRT provider that are passed to SessionOptionsAppendExecutionProvider_TensorRT_V2. -/// Please note that this struct is identical to OrtTensorRTProviderOptions but only to be used internally. +/// Please note that this struct is *similar* to OrtTensorRTProviderOptions but only to be used internally. +/// Going forward, new trt provider options are to be supported via this struct and usage of the publicly defined +/// OrtTensorRTProviderOptions will be deprecated over time. /// User can only get the instance of OrtTensorRTProviderOptionsV2 via CreateTensorRTProviderOptions. /// struct OrtTensorRTProviderOptionsV2 { diff --git a/include/onnxruntime/core/session/onnxruntime_c_api.h b/include/onnxruntime/core/session/onnxruntime_c_api.h index 8add1cddaa30a..84708c27e8649 100644 --- a/include/onnxruntime/core/session/onnxruntime_c_api.h +++ b/include/onnxruntime/core/session/onnxruntime_c_api.h @@ -482,6 +482,9 @@ typedef struct OrtTensorRTProviderOptions { int trt_engine_decryption_enable; // enable engine decryption. Default 0 = false, nonzero = true const char* trt_engine_decryption_lib_path; // specify engine decryption library path int trt_force_sequential_engine_build; // force building TensorRT engine sequentially. Default 0 = false, nonzero = true + // This is the legacy struct and don't add new fields here. + // For new field that can be represented by string, please add it in include/onnxruntime/core/providers/tensorrt/tensorrt_provider_options.h + // For non-string field, need to create a new separate api to handle it. } OrtTensorRTProviderOptions; /** \brief MIGraphX Provider Options diff --git a/include/onnxruntime/core/session/onnxruntime_cxx_api.h b/include/onnxruntime/core/session/onnxruntime_cxx_api.h index c2463977f101d..0007a9d044e7d 100644 --- a/include/onnxruntime/core/session/onnxruntime_cxx_api.h +++ b/include/onnxruntime/core/session/onnxruntime_cxx_api.h @@ -360,6 +360,7 @@ struct SessionOptions : Base { SessionOptions& AppendExecutionProvider_ROCM(const OrtROCMProviderOptions& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_ROCM SessionOptions& AppendExecutionProvider_OpenVINO(const OrtOpenVINOProviderOptions& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_OpenVINO SessionOptions& AppendExecutionProvider_TensorRT(const OrtTensorRTProviderOptions& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_TensorRT + SessionOptions& AppendExecutionProvider_TensorRT_V2(const OrtTensorRTProviderOptionsV2& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_TensorRT SessionOptions& AppendExecutionProvider_MIGraphX(const OrtMIGraphXProviderOptions& provider_options); ///< Wraps OrtApi::SessionOptionsAppendExecutionProvider_MIGraphX SessionOptions& SetCustomCreateThreadFn(OrtCustomCreateThreadFn ort_custom_create_thread_fn); ///< Wraps OrtApi::SessionOptionsSetCustomCreateThreadFn diff --git a/include/onnxruntime/core/session/onnxruntime_cxx_inline.h b/include/onnxruntime/core/session/onnxruntime_cxx_inline.h index d281bb5542797..063acb1702a84 100644 --- a/include/onnxruntime/core/session/onnxruntime_cxx_inline.h +++ b/include/onnxruntime/core/session/onnxruntime_cxx_inline.h @@ -518,6 +518,11 @@ inline SessionOptions& SessionOptions::AppendExecutionProvider_TensorRT(const Or return *this; } +inline SessionOptions& SessionOptions::AppendExecutionProvider_TensorRT_V2(const OrtTensorRTProviderOptionsV2& provider_options) { + ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider_TensorRT_V2(p_, &provider_options)); + return *this; +} + inline SessionOptions& SessionOptions::AppendExecutionProvider_MIGraphX(const OrtMIGraphXProviderOptions& provider_options) { ThrowOnError(GetApi().SessionOptionsAppendExecutionProvider_MIGraphX(p_, &provider_options)); return *this; diff --git a/onnxruntime/core/providers/tensorrt/tensorrt_execution_provider_info.cc b/onnxruntime/core/providers/tensorrt/tensorrt_execution_provider_info.cc index cfc43350a210e..7386ce6c88322 100644 --- a/onnxruntime/core/providers/tensorrt/tensorrt_execution_provider_info.cc +++ b/onnxruntime/core/providers/tensorrt/tensorrt_execution_provider_info.cc @@ -27,6 +27,7 @@ constexpr const char* kCachePath = "trt_engine_cache_path"; constexpr const char* kDecryptionEnable = "trt_engine_decryption_enable"; constexpr const char* kDecryptionLibPath = "trt_engine_decryption_lib_path"; constexpr const char* kForceSequentialEngineBuild = "trt_force_sequential_engine_build"; +// add new provider option name here. } // namespace provider_option_names } // namespace tensorrt @@ -63,7 +64,7 @@ TensorrtExecutionProviderInfo TensorrtExecutionProviderInfo::FromProviderOptions .AddAssignmentToReference(tensorrt::provider_option_names::kDecryptionEnable, info.engine_decryption_enable) .AddAssignmentToReference(tensorrt::provider_option_names::kDecryptionLibPath, info.engine_decryption_lib_path) .AddAssignmentToReference(tensorrt::provider_option_names::kForceSequentialEngineBuild, info.force_sequential_engine_build) - .Parse(options)); + .Parse(options)); // add new provider option here. return info; } @@ -87,6 +88,7 @@ ProviderOptions TensorrtExecutionProviderInfo::ToProviderOptions(const TensorrtE {tensorrt::provider_option_names::kDecryptionEnable, MakeStringWithClassicLocale(info.engine_decryption_enable)}, {tensorrt::provider_option_names::kDecryptionLibPath, MakeStringWithClassicLocale(info.engine_decryption_lib_path)}, {tensorrt::provider_option_names::kForceSequentialEngineBuild, MakeStringWithClassicLocale(info.force_sequential_engine_build)}, + // add new provider option here. }; return options; } diff --git a/onnxruntime/core/providers/tensorrt/tensorrt_provider_factory.cc b/onnxruntime/core/providers/tensorrt/tensorrt_provider_factory.cc index d65c91d88f60d..0929b193f3dba 100644 --- a/onnxruntime/core/providers/tensorrt/tensorrt_provider_factory.cc +++ b/onnxruntime/core/providers/tensorrt/tensorrt_provider_factory.cc @@ -6,6 +6,7 @@ #include #include "tensorrt_execution_provider.h" #include "core/framework/provider_options.h" +#include "core/providers/tensorrt/tensorrt_provider_options.h" #include using namespace onnxruntime; @@ -48,7 +49,7 @@ struct Tensorrt_Provider : Provider { } std::shared_ptr CreateExecutionProviderFactory(const void* provider_options) override { - auto& options = *reinterpret_cast(provider_options); + auto& options = *reinterpret_cast(provider_options); TensorrtExecutionProviderInfo info; info.device_id = options.device_id; info.has_user_compute_stream = options.has_user_compute_stream != 0; @@ -74,7 +75,7 @@ struct Tensorrt_Provider : Provider { void UpdateProviderOptions(void* provider_options, const ProviderOptions& options) override { auto internal_options = onnxruntime::TensorrtExecutionProviderInfo::FromProviderOptions(options); - auto& trt_options = *reinterpret_cast(provider_options); + auto& trt_options = *reinterpret_cast(provider_options); trt_options.device_id = internal_options.device_id; trt_options.trt_max_partition_iterations = internal_options.max_partition_iterations; trt_options.trt_min_subgraph_size = internal_options.min_subgraph_size; diff --git a/onnxruntime/core/session/provider_bridge_ort.cc b/onnxruntime/core/session/provider_bridge_ort.cc index 950c8ba657ba5..e94a58cb20dfd 100644 --- a/onnxruntime/core/session/provider_bridge_ort.cc +++ b/onnxruntime/core/session/provider_bridge_ort.cc @@ -1148,7 +1148,43 @@ std::shared_ptr CreateExecutionProviderFactory_MIGrap return nullptr; } +// Adapter to convert the legacy OrtTensorRTProviderOptions to the latest OrtTensorRTProviderOptionsV2 +OrtTensorRTProviderOptionsV2 OrtTensorRTProviderOptionsToOrtTensorRTProviderOptionsV2(const OrtTensorRTProviderOptions* legacy_trt_options) { + OrtTensorRTProviderOptionsV2 trt_options_converted; + + trt_options_converted.device_id = legacy_trt_options->device_id; + trt_options_converted.has_user_compute_stream = legacy_trt_options->has_user_compute_stream; + trt_options_converted.user_compute_stream = legacy_trt_options->user_compute_stream; + trt_options_converted.trt_max_partition_iterations = legacy_trt_options->trt_max_partition_iterations; + trt_options_converted.trt_min_subgraph_size = legacy_trt_options->trt_min_subgraph_size; + trt_options_converted.trt_max_workspace_size = legacy_trt_options->trt_max_workspace_size; + trt_options_converted.trt_fp16_enable = legacy_trt_options->trt_fp16_enable; + trt_options_converted.trt_int8_enable = legacy_trt_options->trt_int8_enable; + trt_options_converted.trt_int8_calibration_table_name = legacy_trt_options->trt_int8_calibration_table_name; + trt_options_converted.trt_int8_use_native_calibration_table = legacy_trt_options->trt_int8_use_native_calibration_table; + trt_options_converted.trt_dla_enable = legacy_trt_options->trt_dla_enable; + trt_options_converted.trt_dla_core = legacy_trt_options->trt_dla_core; + trt_options_converted.trt_dump_subgraphs = legacy_trt_options->trt_dump_subgraphs; + trt_options_converted.trt_engine_cache_enable = legacy_trt_options->trt_engine_cache_enable; + trt_options_converted.trt_engine_cache_path = legacy_trt_options->trt_engine_cache_path; + trt_options_converted.trt_engine_decryption_enable = legacy_trt_options->trt_engine_decryption_enable; + trt_options_converted.trt_engine_decryption_lib_path = legacy_trt_options->trt_engine_decryption_lib_path; + trt_options_converted.trt_force_sequential_engine_build = legacy_trt_options->trt_force_sequential_engine_build; + // Add new provider option below + // Use default value as this field is not available in OrtTensorRTProviderOptionsV + + return trt_options_converted; +} + std::shared_ptr CreateExecutionProviderFactory_Tensorrt(const OrtTensorRTProviderOptions* provider_options) { + OrtTensorRTProviderOptionsV2 trt_options_converted = onnxruntime::OrtTensorRTProviderOptionsToOrtTensorRTProviderOptionsV2(provider_options); + if (auto* provider = s_library_tensorrt.Get()) + return provider->CreateExecutionProviderFactory(&trt_options_converted); + + return nullptr; +} + +std::shared_ptr CreateExecutionProviderFactory_Tensorrt(const OrtTensorRTProviderOptionsV2* provider_options) { if (auto* provider = s_library_tensorrt.Get()) return provider->CreateExecutionProviderFactory(provider_options); @@ -1420,7 +1456,15 @@ ORT_API_STATUS_IMPL(OrtApis::SessionOptionsAppendExecutionProvider_ROCM, _In_ Or } ORT_API_STATUS_IMPL(OrtApis::SessionOptionsAppendExecutionProvider_TensorRT_V2, _In_ OrtSessionOptions* options, _In_ const OrtTensorRTProviderOptionsV2* tensorrt_options) { - return OrtApis::SessionOptionsAppendExecutionProvider_TensorRT(options, reinterpret_cast(tensorrt_options)); + API_IMPL_BEGIN + auto factory = onnxruntime::CreateExecutionProviderFactory_Tensorrt(tensorrt_options); + if (!factory) { + return OrtApis::CreateStatus(ORT_FAIL, "OrtSessionOptionsAppendExecutionProvider_TensorRT: Failed to load shared library"); + } + + options->provider_factories.push_back(factory); + return nullptr; + API_IMPL_END } ORT_API_STATUS_IMPL(OrtApis::CreateTensorRTProviderOptions, _Outptr_ OrtTensorRTProviderOptionsV2** out) { diff --git a/onnxruntime/python/onnxruntime_pybind_state.cc b/onnxruntime/python/onnxruntime_pybind_state.cc index 6834c4acb2d42..56c59406bcd56 100644 --- a/onnxruntime/python/onnxruntime_pybind_state.cc +++ b/onnxruntime/python/onnxruntime_pybind_state.cc @@ -27,6 +27,7 @@ #include "core/session/abi_session_options_impl.h" #include "core/session/onnxruntime_session_options_config_keys.h" #include "core/session/provider_bridge_ort.h" +#include "core/providers/tensorrt/tensorrt_provider_options.h" // Explicitly provide a definition for the static const var 'GPU' in the OrtDevice struct, // GCC 4.x doesn't seem to define this and it breaks the pipelines based on CentOS as it uses @@ -374,7 +375,7 @@ std::unique_ptr CreateExecutionProviderInstance( std::string calibration_table, cache_path, lib_path; auto it = provider_options_map.find(type); if (it != provider_options_map.end()) { - OrtTensorRTProviderOptions params{ + OrtTensorRTProviderOptionsV2 params{ 0, 0, nullptr, diff --git a/onnxruntime/python/onnxruntime_pybind_state_common.h b/onnxruntime/python/onnxruntime_pybind_state_common.h index 773db017e5adc..5477f3c91ad43 100644 --- a/onnxruntime/python/onnxruntime_pybind_state_common.h +++ b/onnxruntime/python/onnxruntime_pybind_state_common.h @@ -28,6 +28,7 @@ struct OrtStatus { #include "core/providers/providers.h" #include "core/providers/cpu/cpu_execution_provider.h" #include "core/providers/cpu/cpu_provider_factory_creator.h" +#include "core/providers/tensorrt/tensorrt_provider_options.h" #if defined(USE_CUDA) || defined(USE_ROCM) #define BACKEND_PROC "GPU" @@ -474,6 +475,7 @@ OrtValue FromDlpack(PyObject* dlpack_tensor, const bool is_bool_tensor); } // namespace python std::shared_ptr CreateExecutionProviderFactory_Tensorrt(const OrtTensorRTProviderOptions* params); +std::shared_ptr CreateExecutionProviderFactory_Tensorrt(const OrtTensorRTProviderOptionsV2* params); std::shared_ptr CreateExecutionProviderFactory_Tensorrt(int device_id); std::shared_ptr CreateExecutionProviderFactory_MIGraphX(const OrtMIGraphXProviderOptions* params); std::shared_ptr CreateExecutionProviderFactory_MIGraphX(int device_id); diff --git a/onnxruntime/test/perftest/ort_test_session.cc b/onnxruntime/test/perftest/ort_test_session.cc index 24f283a4285af..2334f9e11a39e 100644 --- a/onnxruntime/test/perftest/ort_test_session.cc +++ b/onnxruntime/test/perftest/ort_test_session.cc @@ -1,6 +1,7 @@ #include "ort_test_session.h" #include #include "core/session/onnxruntime_session_options_config_keys.h" +#include "core/providers/tensorrt/tensorrt_provider_options.h" #include #include "providers.h" #include "TestCase.h" @@ -209,7 +210,7 @@ OnnxRuntimeTestSession::OnnxRuntimeTestSession(Ort::Env& env, std::random_device ORT_THROW("[ERROR] [TensorRT] wrong key type entered. Choose from the following runtime key options that are available for TensorRT. ['device_id', 'trt_max_partition_iterations', 'trt_min_subgraph_size', 'trt_max_workspace_size', 'trt_fp16_enable', 'trt_int8_enable', 'trt_int8_calibration_table_name', 'trt_int8_use_native_calibration_table', 'trt_dla_enable', 'trt_dla_core', 'trt_dump_subgraphs', 'trt_engine_cache_enable', 'trt_engine_cache_path', 'trt_engine_decryption_enable', 'trt_engine_decryption_lib_path', 'trt_force_sequential_engine_build'] \n"); } } - OrtTensorRTProviderOptions tensorrt_options; + OrtTensorRTProviderOptionsV2 tensorrt_options; tensorrt_options.device_id = device_id; tensorrt_options.has_user_compute_stream = 0; tensorrt_options.user_compute_stream = nullptr; @@ -228,7 +229,7 @@ OnnxRuntimeTestSession::OnnxRuntimeTestSession(Ort::Env& env, std::random_device tensorrt_options.trt_engine_decryption_enable = trt_engine_decryption_enable; tensorrt_options.trt_engine_decryption_lib_path = trt_engine_decryption_lib_path.c_str(); tensorrt_options.trt_force_sequential_engine_build = trt_force_sequential_engine_build; - session_options.AppendExecutionProvider_TensorRT(tensorrt_options); + session_options.AppendExecutionProvider_TensorRT_V2(tensorrt_options); OrtCUDAProviderOptions cuda_options; cuda_options.device_id=device_id; diff --git a/onnxruntime/test/providers/cpu/model_tests.cc b/onnxruntime/test/providers/cpu/model_tests.cc index cba31055b7d54..ac7c6a69f948d 100644 --- a/onnxruntime/test/providers/cpu/model_tests.cc +++ b/onnxruntime/test/providers/cpu/model_tests.cc @@ -8,6 +8,7 @@ #include "core/session/onnxruntime_cxx_api.h" #include "core/session/inference_session.h" #include "core/session/ort_env.h" +#include "core/providers/tensorrt/tensorrt_provider_options.h" #include "asserts.h" #include #include "default_providers.h" @@ -591,7 +592,7 @@ TEST_P(ModelTest, Run) { ASSERT_STATUS_OK(session_object.RegisterExecutionProvider(DefaultNupharExecutionProvider())); } else if (provider_name == "tensorrt") { if (test_case_name.find(ORT_TSTR("FLOAT16")) != std::string::npos) { - OrtTensorRTProviderOptions params{ + OrtTensorRTProviderOptionsV2 params{ 0, 0, nullptr, diff --git a/onnxruntime/test/util/default_providers.cc b/onnxruntime/test/util/default_providers.cc index 209d4244229fc..5e0975d667fb9 100644 --- a/onnxruntime/test/util/default_providers.cc +++ b/onnxruntime/test/util/default_providers.cc @@ -54,6 +54,16 @@ std::unique_ptr TensorrtExecutionProviderWithOptions(const O return nullptr; } +std::unique_ptr TensorrtExecutionProviderWithOptions(const OrtTensorRTProviderOptionsV2* params) { +#ifdef USE_TENSORRT + if (auto factory = CreateExecutionProviderFactory_Tensorrt(params)) + return factory->CreateProvider(); +#else + ORT_UNUSED_PARAMETER(params); +#endif + return nullptr; +} + std::unique_ptr DefaultMIGraphXExecutionProvider() { #ifdef USE_MIGRAPHX OrtMIGraphXProviderOptions params{ diff --git a/onnxruntime/test/util/include/default_providers.h b/onnxruntime/test/util/include/default_providers.h index 6fa50c61cdefa..980129e95c7c4 100644 --- a/onnxruntime/test/util/include/default_providers.h +++ b/onnxruntime/test/util/include/default_providers.h @@ -24,6 +24,7 @@ std::shared_ptr CreateExecutionProviderFactory_OpenVI std::shared_ptr CreateExecutionProviderFactory_Rknpu(); std::shared_ptr CreateExecutionProviderFactory_Rocm(const OrtROCMProviderOptions* provider_options); std::shared_ptr CreateExecutionProviderFactory_Tensorrt(const OrtTensorRTProviderOptions* params); +std::shared_ptr CreateExecutionProviderFactory_Tensorrt(const OrtTensorRTProviderOptionsV2* params); // EP for internal testing std::shared_ptr CreateExecutionProviderFactory_InternalTesting(const std::unordered_set& supported_ops); @@ -38,6 +39,7 @@ std::unique_ptr DefaultNupharExecutionProvider(bool allow_un //std::unique_ptr DefaultStvmExecutionProvider(); std::unique_ptr DefaultTensorrtExecutionProvider(); std::unique_ptr TensorrtExecutionProviderWithOptions(const OrtTensorRTProviderOptions* params); +std::unique_ptr TensorrtExecutionProviderWithOptions(const OrtTensorRTProviderOptionsV2* params); std::unique_ptr DefaultMIGraphXExecutionProvider(); std::unique_ptr MIGraphXExecutionProviderWithOptions(const OrtMIGraphXProviderOptions* params); std::unique_ptr DefaultOpenVINOExecutionProvider(); From c696da36c70dc7befc74377d10cce7a29486e750 Mon Sep 17 00:00:00 2001 From: Yufeng Li Date: Mon, 7 Feb 2022 09:14:37 -0800 Subject: [PATCH 28/56] fix unit test of quant gemm (#10469) --- onnxruntime/test/contrib_ops/quant_gemm_test.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/onnxruntime/test/contrib_ops/quant_gemm_test.cc b/onnxruntime/test/contrib_ops/quant_gemm_test.cc index c8dbea216ec2a..3afcd6651aadd 100644 --- a/onnxruntime/test/contrib_ops/quant_gemm_test.cc +++ b/onnxruntime/test/contrib_ops/quant_gemm_test.cc @@ -35,7 +35,7 @@ void RunQuantGemmU8X8Test(const int M, constexpr int overflow_adjust = std::is_signed_v ? 2 : 1; constexpr int random_B_min = std::numeric_limits::min() / overflow_adjust; - constexpr int random_B_max = std::numeric_limits::min() / overflow_adjust; + constexpr int random_B_max = std::numeric_limits::max() / overflow_adjust; static std::uniform_int_distribution random_B(random_B_min, random_B_max); static std::uniform_real_distribution n_apha(1.0f, 2.0f); From 435e14d60aa7fa7e53f25bc73b65d41642b951e4 Mon Sep 17 00:00:00 2001 From: ytaous <4484531+ytaous@users.noreply.github.com> Date: Mon, 7 Feb 2022 22:55:15 -0800 Subject: [PATCH 29/56] [ROCm] BFloat16 support (#10465) * bf16 support * minor clean up * UTs * fix build * UTs * UTs * merge commit 6b5504c * minor * ROCm code cleanup * fix build * fix build * minor Co-authored-by: Ethan Tao Co-authored-by: root --- .../core/providers/cuda/cudnn_common.cc | 5 + .../core/providers/cuda/math/softmax.cc | 23 +-- .../core/providers/rocm/math/softmax.cc | 20 +-- .../core/providers/rocm/miopen_common.cc | 5 + .../test/contrib_ops/element_wise_ops_test.cc | 72 +++++++++ .../test/contrib_ops/fastgelu_op_test.cc | 47 ++++++ .../test/contrib_ops/fused_matmul_op_test.cc | 95 ++++++++++++ .../cpu/reduction/reduction_ops_test.cc | 101 +++++++++++++ .../cuda/mixed_precision_scale_test.cc | 140 ++++++++++++++++++ .../training_ops/cuda/math/softmax_grad.cc | 26 +--- .../training_ops/rocm/math/softmax_grad.cc | 2 - 11 files changed, 471 insertions(+), 65 deletions(-) diff --git a/onnxruntime/core/providers/cuda/cudnn_common.cc b/onnxruntime/core/providers/cuda/cudnn_common.cc index ed1d792a5259e..0b2543ec153e1 100644 --- a/onnxruntime/core/providers/cuda/cudnn_common.cc +++ b/onnxruntime/core/providers/cuda/cudnn_common.cc @@ -136,6 +136,11 @@ cudnnDataType_t CudnnTensor::GetDataType() { return CUDNN_DATA_HALF; } +template <> +cudnnDataType_t CudnnTensor::GetDataType() { + return CUDNN_DATA_BFLOAT16; +} + template <> cudnnDataType_t CudnnTensor::GetDataType() { return CUDNN_DATA_INT8; diff --git a/onnxruntime/core/providers/cuda/math/softmax.cc b/onnxruntime/core/providers/cuda/math/softmax.cc index 9116178ddad51..b2a7d4dc6a51b 100644 --- a/onnxruntime/core/providers/cuda/math/softmax.cc +++ b/onnxruntime/core/providers/cuda/math/softmax.cc @@ -43,24 +43,7 @@ Status SoftMaxComputeHelper( SPECIALIZED_SOFTMAX_HELPER_IMPL(float) SPECIALIZED_SOFTMAX_HELPER_IMPL(double) SPECIALIZED_SOFTMAX_HELPER_IMPL(MLFloat16) - -// cudnnSoftmaxForward/Backward doesn't support BFloat16. -#define SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(is_log_softmax) \ - template <> \ - Status SoftMaxComputeHelper(cudaStream_t stream, const BFloat16* X, \ - const TensorShape& input_shape, BFloat16* Y, int64_t axis) { \ - typedef typename ToCudaType::MappedType CudaT; \ - int64_t N = input_shape.SizeToDimension(axis); \ - int64_t D = input_shape.SizeFromDimension(axis); \ - auto Y_data = reinterpret_cast(Y); \ - auto X_data = reinterpret_cast(X); \ - dispatch_warpwise_softmax_forward, is_log_softmax>( \ - stream, Y_data, X_data, gsl::narrow_cast(D), gsl::narrow_cast(D), gsl::narrow_cast(N)); \ - return Status::OK(); \ - } - -SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(true) -SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(false) +SPECIALIZED_SOFTMAX_HELPER_IMPL(BFloat16) #define REGISTER_KERNEL_TYPED(T) \ ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \ @@ -112,8 +95,8 @@ SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(false) (*KernelDefBuilder::Create()).TypeConstraint("T", DataTypeImpl::GetTensorType()), \ Softmax); - template - Status Softmax::ComputeInternal(OpKernelContext* ctx) const { +template +Status Softmax::ComputeInternal(OpKernelContext* ctx) const { const Tensor* X = ctx->Input(0); const TensorShape& input_shape{X->Shape()}; size_t rank = input_shape.NumDimensions(); diff --git a/onnxruntime/core/providers/rocm/math/softmax.cc b/onnxruntime/core/providers/rocm/math/softmax.cc index 612423e216df7..59e0e54049b7c 100644 --- a/onnxruntime/core/providers/rocm/math/softmax.cc +++ b/onnxruntime/core/providers/rocm/math/softmax.cc @@ -44,25 +44,7 @@ SPECIALIZED_SOFTMAX_HELPER_IMPL(float) // MIOpen double data type not supported // SPECIALIZED_SOFTMAX_HELPER_IMPL(double) SPECIALIZED_SOFTMAX_HELPER_IMPL(MLFloat16) - -// cudnnSoftmaxForward/Backward doesn't support BFloat16. -// apply the same for miopen for now -#define SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(is_log_softmax) \ - template <> \ - Status SoftMaxComputeHelper(hipStream_t stream, const BFloat16* X, \ - const TensorShape& input_shape, BFloat16* Y, int64_t axis) { \ - typedef typename ToHipType::MappedType HipT; \ - int64_t N = input_shape.SizeToDimension(axis); \ - int64_t D = input_shape.SizeFromDimension(axis); \ - auto Y_data = reinterpret_cast(Y); \ - auto X_data = reinterpret_cast(X); \ - dispatch_warpwise_softmax_forward, is_log_softmax>( \ - stream, Y_data, X_data, gsl::narrow_cast(D), gsl::narrow_cast(D), gsl::narrow_cast(N)); \ - return Status::OK(); \ - } - -SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(true) -SPECIALIZED_SOFTMAX_HELPER_IMPL_BFloat16(false) +SPECIALIZED_SOFTMAX_HELPER_IMPL(BFloat16) #define REGISTER_KERNEL_TYPED(T) \ ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_EX( \ diff --git a/onnxruntime/core/providers/rocm/miopen_common.cc b/onnxruntime/core/providers/rocm/miopen_common.cc index 3de6c408cbb0b..88c92df14476b 100644 --- a/onnxruntime/core/providers/rocm/miopen_common.cc +++ b/onnxruntime/core/providers/rocm/miopen_common.cc @@ -91,6 +91,11 @@ miopenDataType_t MiopenTensor::GetDataType() { return miopenHalf; } +template <> +miopenDataType_t MiopenTensor::GetDataType() { + return miopenBFloat16; +} + template <> miopenDataType_t MiopenTensor::GetDataType() { return miopenInt32; diff --git a/onnxruntime/test/contrib_ops/element_wise_ops_test.cc b/onnxruntime/test/contrib_ops/element_wise_ops_test.cc index 03a67b539ba28..1c556890be308 100644 --- a/onnxruntime/test/contrib_ops/element_wise_ops_test.cc +++ b/onnxruntime/test/contrib_ops/element_wise_ops_test.cc @@ -112,6 +112,78 @@ TEST(BiasGeluTest, Two_One_Dim) { RunBiasGeluTest(input_a_data, input_b_data, {2, 4}, {4}); } +#if defined(USE_CUDA) || defined(USE_ROCM) +TEST(BiasGeluTest, Two_One_Dim_fp16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support FP16"; + return; + } +#endif + OpTester tester("BiasGelu", 1, onnxruntime::kMSDomain); + + std::vector A = { + 0.8f, -0.5f, 0.0f, 1.f, + 0.5f, 0.2f, 0.3f, -0.6f}; + + std::vector B = { + -0.5f, 0.6f, 1.2f, 2.1f}; + + std::vector Y = ComputeGeluWithErf(Add_Simple(A, B)); + + std::vector f_A(8); + std::vector f_B(4); + std::vector f_Y(8); + ConvertFloatToMLFloat16(A.data(), f_A.data(), 8); + ConvertFloatToMLFloat16(B.data(), f_B.data(), 4); + ConvertFloatToMLFloat16(Y.data(), f_Y.data(), 8); + + tester.AddInput("A", {2, 4}, f_A); + tester.AddInput("B", {4}, f_B); + tester.AddOutput("Y", {2, 4}, f_Y); + tester.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); //TensorRT: fp16 is not supported +} +#endif + +// failed test for CUDA (therefore ROCM as well) to be investigated +#if defined(USE_CUDA) || defined(USE_ROCM) +TEST(BiasGeluTest, DISABLED_Two_One_Dim_bfloat16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + OpTester tester("BiasGelu", 1, onnxruntime::kMSDomain); + + std::vector A = { + 0.8f, -0.5f, 0.0f, 1.f, + 0.5f, 0.2f, 0.3f, -0.6f}; + + std::vector B = { + -0.5f, 0.6f, 1.2f, 2.1f}; + + std::vector Y = ComputeGeluWithErf(Add_Simple(A, B)); + + std::vector f_A = FloatsToBFloat16s(A); + std::vector f_B = FloatsToBFloat16s(B); + std::vector f_Y = FloatsToBFloat16s(Y); + + tester.AddInput("A", {2, 4}, f_A); + tester.AddInput("B", {4}, f_B); + tester.AddOutput("Y", {2, 4}, f_Y); + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + tester.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} +#endif + TEST(MathOpTest, ComplexMul) { if (DefaultCudaExecutionProvider() == nullptr) return; diff --git a/onnxruntime/test/contrib_ops/fastgelu_op_test.cc b/onnxruntime/test/contrib_ops/fastgelu_op_test.cc index 5614e065acd0a..60b9bec02bba3 100644 --- a/onnxruntime/test/contrib_ops/fastgelu_op_test.cc +++ b/onnxruntime/test/contrib_ops/fastgelu_op_test.cc @@ -197,5 +197,52 @@ TEST(FastGeluTest, FastGeluWithoutBiasFloat16) { RunFastGeluTest(input_data, bias_data, output_data, input_dims, bias_dims, output_dims, false, true); } + +// failed with device error, disabled for now +// CUDA only, ROCM has not been supported yet +#ifdef USE_CUDA +TEST(FastGeluTest, DISABLED_FastGeluWithBias_BFloat16) { + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } + OpTester tester("FastGelu", 1, onnxruntime::kMSDomain); + + int batch_size = 1; + int sequence_length = 2; + int hidden_size = 4; + + std::vector X = { + 0.8f, -0.5f, 0.0f, 1.f, + 0.5f, 0.2f, 0.3f, -0.6f}; + + std::vector B = { + -0.5f, 0.6f, 1.2f, 2.1f}; + + std::vector Y = { + 0.1851806640625f, 0.054046630859375f, 1.0615234375f, 3.095703125f, + 0, 0.63037109375f, 1.3984375f, 1.3984375f}; + + std::vector input_dims = {batch_size, sequence_length, hidden_size}; + std::vector bias_dims = {hidden_size}; + std::vector output_dims = input_dims; + + std::vector f_X = FloatsToBFloat16s(X); + std::vector f_B = FloatsToBFloat16s(B); + std::vector f_Y = FloatsToBFloat16s(Y); + + tester.AddInput("X", input_dims, f_X); + tester.AddInput("bias", bias_dims, f_B); + tester.AddOutput("Y", output_dims, f_Y); + + std::vector> execution_providers; + execution_providers.push_back(DefaultCudaExecutionProvider()); + tester.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} +#endif + + + } // namespace test } // namespace onnxruntime diff --git a/onnxruntime/test/contrib_ops/fused_matmul_op_test.cc b/onnxruntime/test/contrib_ops/fused_matmul_op_test.cc index c1c7a75a186a3..75857c61b8376 100644 --- a/onnxruntime/test/contrib_ops/fused_matmul_op_test.cc +++ b/onnxruntime/test/contrib_ops/fused_matmul_op_test.cc @@ -3,6 +3,7 @@ #include "gtest/gtest.h" #include "test/providers/provider_test_utils.h" +#include "test/common/cuda_op_test_utils.h" namespace onnxruntime { namespace test { @@ -269,6 +270,100 @@ TEST(FusedMatMulOpTest, FloatTypeTransposeBatch) { RunFusedMatMulTest("FusedMatMul", 1, true, true, true, true); } +#if defined(USE_CUDA) || defined(USE_ROCM) +TEST(FusedMatMulOpTest, Float16_NoTranspose) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support FP16"; + return; + } +#endif + std::vector common_input_vals{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + for (auto t : GenerateSimpleTestCases()) { + + OpTester test("FusedMatMul", 1, onnxruntime::kMSDomain); + + std::vector input0_dims(t.input0_dims); + std::vector input0_vals; + ProcessInputs(t.input0_dims, common_input_vals, false, false, input0_dims, input0_vals); + + std::vector input1_dims(t.input1_dims); + std::vector input1_vals; + ProcessInputs(t.input1_dims, common_input_vals, false, false, input1_dims, input1_vals); + + std::vector f_A(input0_vals.size()); + std::vector f_B(input1_vals.size()); + std::vector f_Y(t.expected_vals.size()); + ConvertFloatToMLFloat16(input0_vals.data(), f_A.data(), (int)input0_vals.size()); + ConvertFloatToMLFloat16(input1_vals.data(), f_B.data(), (int)input1_vals.size()); + ConvertFloatToMLFloat16(t.expected_vals.data(), f_Y.data(), (int)t.expected_vals.size()); + + test.AddInput("A", input0_dims, f_A); + test.AddInput("B", input1_dims, f_B, false); + + test.AddAttribute("transA", (int64_t)0); + test.AddAttribute("transB", (int64_t)0); + test.AddAttribute("transBatchA", (int64_t)0); + test.AddAttribute("transBatchB", (int64_t)0); + test.AddAttribute("alpha", 1.0f); + + test.AddOutput("Y", t.expected_dims, f_Y); + + // Disable TensorRT because of unsupported data type + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {kTensorrtExecutionProvider}); + } +} +#endif + +#if defined(USE_CUDA) || defined(USE_ROCM) +TEST(FusedMatMulOpTest, BFloat16_NoTranspose) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support FP16"; + return; + } +#endif + std::vector common_input_vals{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; + for (auto t : GenerateSimpleTestCases()) { + + OpTester test("FusedMatMul", 1, onnxruntime::kMSDomain); + + std::vector input0_dims(t.input0_dims); + std::vector input0_vals; + ProcessInputs(t.input0_dims, common_input_vals, false, false, input0_dims, input0_vals); + + std::vector input1_dims(t.input1_dims); + std::vector input1_vals; + ProcessInputs(t.input1_dims, common_input_vals, false, false, input1_dims, input1_vals); + + std::vector f_A = FloatsToBFloat16s(input0_vals); + std::vector f_B = FloatsToBFloat16s(input1_vals); + std::vector f_Y = FloatsToBFloat16s(t.expected_vals); + + test.AddInput("A", input0_dims, f_A); + test.AddInput("B", input1_dims, f_B, false); + + test.AddAttribute("transA", (int64_t)0); + test.AddAttribute("transB", (int64_t)0); + test.AddAttribute("transBatchA", (int64_t)0); + test.AddAttribute("transBatchB", (int64_t)0); + test.AddAttribute("alpha", 1.0f); + + test.AddOutput("Y", t.expected_dims, f_Y); + + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); + } +} +#endif + } // namespace transpose_matmul } // namespace test } // namespace onnxruntime diff --git a/orttraining/orttraining/test/training_ops/cpu/reduction/reduction_ops_test.cc b/orttraining/orttraining/test/training_ops/cpu/reduction/reduction_ops_test.cc index eff6cd567cfcd..46d775173cdc3 100644 --- a/orttraining/orttraining/test/training_ops/cpu/reduction/reduction_ops_test.cc +++ b/orttraining/orttraining/test/training_ops/cpu/reduction/reduction_ops_test.cc @@ -6,6 +6,7 @@ #include #include "gtest/gtest.h" #include "test/providers/provider_test_utils.h" +#include "test/common/cuda_op_test_utils.h" namespace onnxruntime { namespace test { @@ -163,6 +164,106 @@ TEST_P(ReductionOpTest, ReduceAllL2HalfFloat) { } #endif +#if defined(USE_CUDA) || defined(USE_ROCM) +TEST_P(ReductionOpTest, ReduceAllL2_BFloat16_BFloat16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + OpTester test("ReduceAllL2", 1, onnxruntime::kMSDomain, true); + test.SetDeterminism(GetParam()); + + std::vector data0 = {1.0f, 2.0f, 3.0f}; + std::vector data0_bf16 = FloatsToBFloat16s(data0); + + std::vector data1 = {-1.0f, -2.0f}; + std::vector data1_bf16 = FloatsToBFloat16s(data1); + + std::vector result = {4.358898943540674f}; + std::vector result_bf16 = FloatsToBFloat16s(result); + + test.AddInput("data0", {3}, data0_bf16); + test.AddInput("data1", {2}, data1_bf16); + + test.AddOutput("reduced", {}, result_bf16); + + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} + +TEST_P(ReductionOpTest, ReduceAllL2_BFloat16_Float) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + OpTester test("ReduceAllL2", 1, onnxruntime::kMSDomain, true); + test.SetDeterminism(GetParam()); + + std::vector data0 = {1.0f, 2.0f, 3.0f}; + std::vector data0_bf16 = FloatsToBFloat16s(data0); + + std::vector data1 = {-1.0f, -2.0f}; + std::vector data1_bf16 = FloatsToBFloat16s(data1); + + std::vector result = {4.358898943540674f}; + + test.AddInput("data0", {3}, data0_bf16); + test.AddInput("data1", {2}, data1_bf16); + + test.AddOutput("reduced", {}, result); + + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} + +TEST_P(ReductionOpTest, ReduceAllL2_Float_BFloat16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + OpTester test("ReduceAllL2", 1, onnxruntime::kMSDomain, true); + test.SetDeterminism(GetParam()); + + std::vector data0 = {1.0f, 2.0f, 3.0f}; + std::vector data1 = {-1.0f, -2.0f}; + + std::vector result = {4.358898943540674f}; + std::vector result_bf16 = FloatsToBFloat16s(result); + + test.AddInput("data0", {3}, data0); + test.AddInput("data1", {2}, data1); + + test.AddOutput("reduced", {}, result_bf16); + + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} +#endif + void TestMultiTensorReduce( const int tensor_count, const int min_tensor_size, diff --git a/orttraining/orttraining/test/training_ops/cuda/mixed_precision_scale_test.cc b/orttraining/orttraining/test/training_ops/cuda/mixed_precision_scale_test.cc index f2b515a01741f..57b8d4e3afd70 100644 --- a/orttraining/orttraining/test/training_ops/cuda/mixed_precision_scale_test.cc +++ b/orttraining/orttraining/test/training_ops/cuda/mixed_precision_scale_test.cc @@ -3,6 +3,7 @@ #include "test/common/tensor_op_test_utils.h" #include "test/providers/provider_test_utils.h" +#include "test/common/cuda_op_test_utils.h" namespace onnxruntime { namespace test { @@ -18,6 +19,16 @@ struct MixedPrecisionScaleInputOutput { output2_half.resize(output2.size()); ConvertFloatToMLFloat16(input2.data(), input2_half.data(), int(input2.size())); ConvertFloatToMLFloat16(output2.data(), output2_half.data(), int(output2.size())); + + input1_bf16.resize(input1.size()); + output1_bf16.resize(output1.size()); + std::vector input1_bf16 = FloatsToBFloat16s(input1); + std::vector output1_bf16 = FloatsToBFloat16s(output1); + + input2_bf16.resize(input2.size()); + output2_bf16.resize(output2.size()); + std::vector input2_bf16 = FloatsToBFloat16s(input2); + std::vector output2_bf16 = FloatsToBFloat16s(output2); } // Fp32 Inputs/Output @@ -32,6 +43,12 @@ struct MixedPrecisionScaleInputOutput { std::vector input2_half; std::vector output1_half; std::vector output2_half; + + // BF16 Inputs/Output + std::vector input1_bf16; + std::vector input2_bf16; + std::vector output1_bf16; + std::vector output2_bf16; }; TEST(CudaKernelTest, MixedPrecisionScaleF2F) { @@ -130,5 +147,128 @@ TEST(CudaKernelTest, MixedPrecisionScaleH2H) { test.Run(); } +#if defined(USE_CUDA) || defined(USE_ROCM) +TEST(CudaKernelTest, MixedPrecisionScale_bfloat16_bfloat16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + MixedPrecisionScaleInputOutput data; + OpTester test("MixedPrecisionScale", 1, onnxruntime::kMSDomain); + test.AddAttribute("to", int64_t(ONNX_TENSOR_ELEMENT_DATA_TYPE_BFLOAT16)); + test.AddInput("scale", {1}, data.scale); + test.AddInput("input1", {3}, data.input1_bf16); + test.AddOutput("output1", {3}, data.output1_bf16); + + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} + +// failed with data error, disabled for now +TEST(CudaKernelTest, DISABLED_MixedPrecisionScale_float_bfloat16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + MixedPrecisionScaleInputOutput data; + OpTester test("MixedPrecisionScale", 1, onnxruntime::kMSDomain); + test.AddAttribute("to", int64_t(ONNX_TENSOR_ELEMENT_DATA_TYPE_BFLOAT16)); + test.AddInput("scale", {1}, data.scale); + test.AddInput("input1", {3}, data.input1); + test.AddOutput("output1", {3}, data.output1_bf16); + + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} + +TEST(CudaKernelTest, DISABLED_MixedPrecisionScale_bfloat16_float) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + MixedPrecisionScaleInputOutput data; + OpTester test("MixedPrecisionScale", 1, onnxruntime::kMSDomain); + test.AddAttribute("to", int64_t(ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT)); + test.AddInput("scale", {1}, data.scale); + test.AddInput("input1", {3}, data.input1_bf16); + test.AddOutput("output1", {3}, data.output1); + + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} + +TEST(CudaKernelTest, DISABLED_MixedPrecisionScale_half_bfloat16) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + MixedPrecisionScaleInputOutput data; + OpTester test("MixedPrecisionScale", 1, onnxruntime::kMSDomain); + test.AddAttribute("to", int64_t(ONNX_TENSOR_ELEMENT_DATA_TYPE_BFLOAT16)); + test.AddInput("scale", {1}, data.scale); + test.AddInput("input1", {3}, data.input1_half); + test.AddOutput("output1", {3}, data.output1_bf16); + + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} + +TEST(CudaKernelTest, DISABLED_MixedPrecisionScale_bfloat16_half) { +#ifdef USE_CUDA + int min_cuda_architecture = 530; + if (!HasCudaEnvironment(min_cuda_architecture)) { + LOGS_DEFAULT(WARNING) << "Hardware NOT support BFP16"; + return; + } +#endif + MixedPrecisionScaleInputOutput data; + OpTester test("MixedPrecisionScale", 1, onnxruntime::kMSDomain); + test.AddAttribute("to", int64_t(ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT16)); + test.AddInput("scale", {1}, data.scale); + test.AddInput("input1", {3}, data.input1_bf16); + test.AddOutput("output1", {3}, data.output1_half); + + std::vector> execution_providers; +#ifdef USE_CUDA + execution_providers.push_back(DefaultCudaExecutionProvider()); +#elif USE_ROCM + execution_providers.push_back(DefaultRocmExecutionProvider()); +#endif + test.Run(OpTester::ExpectResult::kExpectSuccess, "", {}, nullptr, &execution_providers); +} +#endif + } // namespace test } // namespace onnxruntime \ No newline at end of file diff --git a/orttraining/orttraining/training_ops/cuda/math/softmax_grad.cc b/orttraining/orttraining/training_ops/cuda/math/softmax_grad.cc index 4d4c4bdc76b2e..1a8af5045b50a 100644 --- a/orttraining/orttraining/training_ops/cuda/math/softmax_grad.cc +++ b/orttraining/orttraining/training_ops/cuda/math/softmax_grad.cc @@ -62,28 +62,6 @@ Status SoftMaxGradComputeHelper( return Status::OK(); } -// cudnnSoftmaxForward/Backward doesn't support BFloat16. -#define SPECIALIZED_SOFTMAXGRAD_HELPER_IMPL_BFloat16(is_log_softmax) \ - template <> \ - Status SoftMaxGradComputeHelper(cudaStream_t stream, const BFloat16* dY, \ - const TensorShape& input_shape, const BFloat16* Y, \ - BFloat16* dX, cudnnHandle_t, int64_t axis) { \ - typedef typename ToCudaType::MappedType CudaT; \ - const int64_t normalized_axis = HandleNegativeAxis(axis, input_shape.NumDimensions()); \ - int64_t N = input_shape.SizeToDimension(normalized_axis); \ - int64_t D = input_shape.SizeFromDimension(normalized_axis); \ - auto dY_data = reinterpret_cast(dY); \ - auto Y_data = reinterpret_cast(Y); \ - auto dX_data = reinterpret_cast(dX); \ - dispatch_softmax_backward, is_log_softmax>( \ - stream, dX_data, dY_data, Y_data, gsl::narrow_cast(D), gsl::narrow_cast(D), \ - gsl::narrow_cast(N)); \ - return Status::OK(); \ - } - -SPECIALIZED_SOFTMAXGRAD_HELPER_IMPL_BFloat16(true) -SPECIALIZED_SOFTMAXGRAD_HELPER_IMPL_BFloat16(false) - #define REGISTER_GRADIENT_KERNEL_TYPED(T) \ ONNX_OPERATOR_TYPED_KERNEL_EX( \ SoftmaxGrad, \ @@ -121,8 +99,8 @@ SPECIALIZED_SOFTMAXGRAD_HELPER_IMPL_BFloat16(false) (*KernelDefBuilder::Create()).TypeConstraint("T", DataTypeImpl::GetTensorType()), \ SoftmaxGrad); - template - Status SoftmaxGrad::ComputeInternal(OpKernelContext* ctx) const { +template +Status SoftmaxGrad::ComputeInternal(OpKernelContext* ctx) const { const Tensor* dY = ctx->Input(0); const TensorShape& input_shape{dY->Shape()}; const Tensor* Y = ctx->Input(1); diff --git a/orttraining/orttraining/training_ops/rocm/math/softmax_grad.cc b/orttraining/orttraining/training_ops/rocm/math/softmax_grad.cc index 8481beda3665d..b39fdf0e9c0f0 100644 --- a/orttraining/orttraining/training_ops/rocm/math/softmax_grad.cc +++ b/orttraining/orttraining/training_ops/rocm/math/softmax_grad.cc @@ -62,8 +62,6 @@ Status SoftMaxGradComputeHelper( return Status::OK(); } -// cudnnSoftmaxForward/Backward doesn't support BFloat16. -// apply the same for miopen for now #define SPECIALIZED_SOFTMAXGRAD_HELPER_IMPL_BFloat16(is_log_softmax) \ template <> \ Status SoftMaxGradComputeHelper(hipStream_t stream, const BFloat16* dY, \ From 7e5d68eea664e362c99c298e8747a8b7314dab8b Mon Sep 17 00:00:00 2001 From: ashbhandare Date: Tue, 8 Feb 2022 10:18:22 -0800 Subject: [PATCH 30/56] gradient and test (#10455) Co-authored-by: Aishwarya Bhandare --- .../core/graph/gradient_builder.cc | 19 +++++++ .../orttraining/core/graph/gradient_builder.h | 1 + .../core/graph/gradient_builder_registry.cc | 1 + .../test/gradient/gradient_ops_test.cc | 54 +++++++++++++++++++ 4 files changed, 75 insertions(+) diff --git a/orttraining/orttraining/core/graph/gradient_builder.cc b/orttraining/orttraining/core/graph/gradient_builder.cc index 55b521e13a3cc..f807fe6af4879 100755 --- a/orttraining/orttraining/core/graph/gradient_builder.cc +++ b/orttraining/orttraining/core/graph/gradient_builder.cc @@ -1838,5 +1838,24 @@ IMPLEMENT_GRADIENT_BUILDER(GetScatterNDGradient) { return result; } +IMPLEMENT_GRADIENT_BUILDER(GetScatterElementsGradient) { + auto attributes = SrcNodeAttributes(); + auto axis = utils::HasInt(attributes.at("axis")) ? attributes.at("axis").i() : 0; + std::vector result; + if (IsGradientRequiredForSrcNodeInput(0)) { + result.emplace_back(NodeDef("Shape", {I(2)}, {IA("Shape_updates")})); + result.emplace_back(NodeDef("ConstantOfShape", {IA("Shape_updates")}, {IA("Zero_Shape_updates")}, + {MakeAttribute("value", ScalarTensorProtoByElemType(0.0f, IElemType(0)))})); + result.emplace_back(NodeDef("ScatterElements", {GO(0), I(1), IA("Zero_Shape_updates")}, {GI(0)}, + {MakeAttribute("axis", axis)})); + } + + if (IsGradientRequiredForSrcNodeInput(2)) { + result.emplace_back(NodeDef("GatherElements", {GO(0), I(1)}, {GI(2)}, + {MakeAttribute("axis", axis)})); + } + return result; +} + } // namespace training } // namespace onnxruntime diff --git a/orttraining/orttraining/core/graph/gradient_builder.h b/orttraining/orttraining/core/graph/gradient_builder.h index 8947f40329968..9edccb02cbb5a 100755 --- a/orttraining/orttraining/core/graph/gradient_builder.h +++ b/orttraining/orttraining/core/graph/gradient_builder.h @@ -77,6 +77,7 @@ DECLARE_GRADIENT_BUILDER(GetPadGradient) DECLARE_GRADIENT_BUILDER(GetIdentityGradient) DECLARE_GRADIENT_BUILDER(GetPythonOpGradient) DECLARE_GRADIENT_BUILDER(GetScatterNDGradient) +DECLARE_GRADIENT_BUILDER(GetScatterElementsGradient) DECLARE_GRADIENT_BUILDER(GetTriluGradient) DECLARE_GRADIENT_BUILDER(GetExternalGradient) diff --git a/orttraining/orttraining/core/graph/gradient_builder_registry.cc b/orttraining/orttraining/core/graph/gradient_builder_registry.cc index 6fc1fda6443a2..df728a715ec5e 100755 --- a/orttraining/orttraining/core/graph/gradient_builder_registry.cc +++ b/orttraining/orttraining/core/graph/gradient_builder_registry.cc @@ -108,6 +108,7 @@ void GradientBuilderRegistry::RegisterGradientBuilders() { REGISTER_GRADIENT_BUILDER("Identity", GetIdentityGradient); REGISTER_GRADIENT_BUILDER("PythonOp", GetPythonOpGradient); REGISTER_GRADIENT_BUILDER("ScatterND", GetScatterNDGradient); + REGISTER_GRADIENT_BUILDER("ScatterElements", GetScatterElementsGradient); REGISTER_GRADIENT_BUILDER("Trilu", GetTriluGradient); REGISTER_GRADIENT_BUILDER("ExternalGradient", GetExternalGradient); diff --git a/orttraining/orttraining/test/gradient/gradient_ops_test.cc b/orttraining/orttraining/test/gradient/gradient_ops_test.cc index 3b7818a25262b..05c27198df182 100644 --- a/orttraining/orttraining/test/gradient/gradient_ops_test.cc +++ b/orttraining/orttraining/test/gradient/gradient_ops_test.cc @@ -2760,6 +2760,60 @@ TEST(GradientCheckerTest, ScatterNDGrad) { } } +TEST(GradientCheckerTest, ScatterElementsGrad) { + float max_error; + GradientChecker gradient_checker; + OpDef op_def{"ScatterElements", kOnnxDomain, 13}; + + { // without axis + TensorInfo data_info({3, 3}, true); + TensorInfo indices_info({2, 3}, false, nullptr, DataTypeImpl::GetTensorType()); + TensorInfo updates_info({2, 3}, true); + std::vector> input_datas = {{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f}, + {1, 0, 2, 0, 2, 1}, + {1.0f, 1.1f, 1.2f, 2.0f, 2.1f, 2.2f}}; + + TensorInfo output_info({3, 3}, true); + + ASSERT_STATUS_OK(gradient_checker.ComputeGradientError(op_def, {data_info, indices_info, updates_info}, + {output_info}, &max_error, input_datas)); + EXPECT_IS_TINY(max_error); + } + + { // with axis + TensorInfo data_info({1, 5}, true); + TensorInfo indices_info({1, 2}, false, nullptr, DataTypeImpl::GetTensorType()); + TensorInfo updates_info({1, 2}, true); + std::vector> input_datas = {{1.0f, 2.0f, 3.0f, 4.0f, 5.0f}, + {1, 3}, + {1.1f, 2.1f}}; + + TensorInfo output_info({1, 5}, true); + + ASSERT_STATUS_OK(gradient_checker.ComputeGradientError(op_def, {data_info, indices_info, updates_info}, + {output_info}, &max_error, input_datas, + {MakeAttribute("axis", static_cast(1))})); + EXPECT_IS_TINY(max_error); + } + + { // with -ve axis + TensorInfo data_info({1, 5}, true); + TensorInfo indices_info({1, 2}, false, nullptr, DataTypeImpl::GetTensorType()); + TensorInfo updates_info({1, 2}, true); + std::vector> input_datas = {{1.0f, 2.0f, 3.0f, 4.0f, 5.0f}, + {1, 3}, + {1.1f, 2.1f}}; + + TensorInfo output_info({1, 5}, true); + + ASSERT_STATUS_OK(gradient_checker.ComputeGradientError(op_def, {data_info, indices_info, updates_info}, + {output_info}, &max_error, input_datas, + {MakeAttribute("axis", static_cast(-1))})); + EXPECT_IS_TINY(max_error); + } +} + TEST(GradientCheckerTest, TriluGrad) { float max_error; GradientChecker gradient_checker; From 655f490c9564c27543d53121c20a157cb2aba76b Mon Sep 17 00:00:00 2001 From: Vincent Wang Date: Wed, 9 Feb 2022 07:39:57 +0800 Subject: [PATCH 31/56] Remove BFloat16 Specialized Code for ReduceSum (#10476) --- .../cuda/math/unary_elementwise_ops_impl.cu | 8 +- .../providers/cuda/reduction/reduction_ops.cc | 107 +----------------- .../core/providers/rocm/miopen_common.cc | 14 +++ .../core/providers/rocm/miopen_common.h | 12 ++ .../providers/rocm/reduction/reduction_ops.cc | 107 +----------------- 5 files changed, 34 insertions(+), 214 deletions(-) diff --git a/onnxruntime/core/providers/cuda/math/unary_elementwise_ops_impl.cu b/onnxruntime/core/providers/cuda/math/unary_elementwise_ops_impl.cu index 9bb5a2d855651..bb17158e29473 100644 --- a/onnxruntime/core/providers/cuda/math/unary_elementwise_ops_impl.cu +++ b/onnxruntime/core/providers/cuda/math/unary_elementwise_ops_impl.cu @@ -55,6 +55,10 @@ UNARY_OPS() SPECIALIZED_UNARY_ELEMENTWISE_IMPL(name, float) \ SPECIALIZED_UNARY_ELEMENTWISE_IMPL(name, double) +#define SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFDB(name) \ + SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFD(name) \ + SPECIALIZED_UNARY_ELEMENTWISE_IMPL(name, BFloat16) + #define SPECIALIZED_UNARY_ELEMENTWISE_IMPL_CSILHFD(name) \ SPECIALIZED_UNARY_ELEMENTWISE_IMPL(name, int8_t) \ SPECIALIZED_UNARY_ELEMENTWISE_IMPL(name, int16_t) \ @@ -75,8 +79,8 @@ SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFD(Floor) SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFD(Ceil) SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFD(Reciprocal) SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFD(Sqrt) -SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFD(Log) -SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFD(Exp) +SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFDB(Log) +SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFDB(Exp) SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFD(Erf) SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFD(Round) SPECIALIZED_UNARY_ELEMENTWISE_IMPL_HFD(Sin) diff --git a/onnxruntime/core/providers/cuda/reduction/reduction_ops.cc b/onnxruntime/core/providers/cuda/reduction/reduction_ops.cc index 5b055487289e1..7726c63573ae4 100644 --- a/onnxruntime/core/providers/cuda/reduction/reduction_ops.cc +++ b/onnxruntime/core/providers/cuda/reduction/reduction_ops.cc @@ -521,7 +521,7 @@ Status ReduceComputeCore(CUDAExecutionProvider& cuda_ep, const Tensor& input, Pr } CudnnReduceDescriptor reduce_desc; - if (std::is_same::value) { + ORT_IF_CONSTEXPR (std::is_same::value || std::is_same::value) { ORT_RETURN_IF_ERROR(reduce_desc.Set(cudnn_reduce_op, CudnnTensor::GetDataType(), ReduceTensorIndices)); } else { ORT_RETURN_IF_ERROR(reduce_desc.Set(cudnn_reduce_op, cudnn_type_X, ReduceTensorIndices)); @@ -835,111 +835,6 @@ SPECIALIZED_REDUCEKERNEL_COMPUTEIMPL(int64_t) SPECIALIZED_REDUCEKERNEL_COMPUTEIMPL(int8_t) SPECIALIZED_REDUCEKERNEL_COMPUTEIMPL(uint8_t) -template <> -template <> -Status ReduceKernel::ComputeImpl( - OpKernelContext* ctx, cudnnReduceTensorOp_t cudnn_reduce_op) const { - typedef typename ToCudaType::MappedType CudaT; - const Tensor* X = ctx->Input(0); - TensorShapeVector axes; - size_t num_inputs = ctx->InputCount(); - if (num_inputs == 2) { - const Tensor* axes_tensor = ctx->Input(1); - ORT_ENFORCE(axes_tensor != nullptr, "Axes input is null"); - ORT_ENFORCE(axes_tensor->Shape().NumDimensions() == 1, "An axes tensor must be a vector tensor."); - auto nDims = static_cast(axes_tensor->Shape()[0]); - const auto* data = axes_tensor->template Data(); - axes.assign(data, data + nDims); - } else { - axes.assign(axes_.begin(), axes_.end()); - } - - if (axes.empty() && noop_with_empty_axes_) { - auto* Y = ctx->Output(0, X->Shape()); - CUDA_RETURN_IF_ERROR(cudaMemcpyAsync(Y->template MutableData(), X->template Data(), - X->SizeInBytes(), cudaMemcpyDeviceToDevice, Stream())); - return Status::OK(); - } - - PrepareReduceMetadata prepare_reduce_metadata; - ORT_RETURN_IF_ERROR(PrepareForReduce(X, keepdims_, axes, prepare_reduce_metadata)); - - Tensor* Y = ctx->Output(0, prepare_reduce_metadata.squeezed_output_dims); - - int64_t input_count = prepare_reduce_metadata.input_count; - int64_t output_count = prepare_reduce_metadata.output_count; - auto& input_dims_cudnn = prepare_reduce_metadata.input_dims_cudnn; - auto& output_dims_cudnn = prepare_reduce_metadata.output_dims_cudnn; - - if (input_count == 0) { - assert(Y->Shape().Size() == 0); - return Status::OK(); - } - - if (input_count == output_count) { - if (Y->template MutableData() != X->template Data()) { - CUDA_RETURN_IF_ERROR(cudaMemcpyAsync(Y->template MutableData(), X->template Data(), - input_count * sizeof(BFloat16), cudaMemcpyDeviceToDevice, Stream())); - } - return Status::OK(); - } - - if (fast_reduction_ && !ctx->GetUseDeterministicCompute()) { - int m{}, n{}; - const auto applicable_matrix_reduction = - get_applicable_matrix_reduction(cudnn_reduce_op, X->Shape().GetDims(), axes, m, n); - switch (applicable_matrix_reduction) { - case ApplicableMatrixReduction::Rows: { - return reduce_matrix_rows(Stream(), reinterpret_cast(X->template Data()), - reinterpret_cast(Y->template MutableData()), m, n); - } - case ApplicableMatrixReduction::Columns: { - const auto buffer_size_bytes = compute_reduce_matrix_columns_buffer_size(m, n); - auto buffer = cuda_ep_->GetScratchBuffer(buffer_size_bytes); - return reduce_matrix_columns(Stream(), reinterpret_cast(X->template Data()), - reinterpret_cast(Y->template MutableData()), m, n, buffer.get(), - buffer_size_bytes); - } - default: - break; - } - } - - CUDA_RETURN_IF_ERROR(cudaMemsetAsync(Y->MutableDataRaw(), 0, Y->SizeInBytes(), Stream())); - - size_t indices_bytes = 0; - size_t workspace_bytes = 0; - CudnnTensor input_tensor; - CudnnTensor output_tensor; - CudnnReduceDescriptor reduce_desc; - - cudnnDataType_t cudnn_type_X = CUDNN_DATA_FLOAT; - IAllocatorUniquePtr temp_X = GetScratchBuffer(input_count); - Impl_Cast(Stream(), reinterpret_cast(X->template Data()), temp_X.get(), - X->Shape().Size()); - - ORT_RETURN_IF_ERROR(reduce_desc.Set(cudnn_reduce_op, cudnn_type_X, CUDNN_REDUCE_TENSOR_NO_INDICES)); - ORT_RETURN_IF_ERROR(input_tensor.Set(input_dims_cudnn, cudnn_type_X)); - ORT_RETURN_IF_ERROR(output_tensor.Set(output_dims_cudnn, cudnn_type_X)); - CUDNN_RETURN_IF_ERROR( - cudnnGetReductionIndicesSize(CudnnHandle(), reduce_desc, input_tensor, output_tensor, &indices_bytes)); - CUDNN_RETURN_IF_ERROR( - cudnnGetReductionWorkspaceSize(CudnnHandle(), reduce_desc, input_tensor, output_tensor, &workspace_bytes)); - IAllocatorUniquePtr indices_cuda = GetScratchBuffer(indices_bytes); - IAllocatorUniquePtr workspace_cuda = GetScratchBuffer(workspace_bytes); - - const auto one = Consts::One; - const auto zero = Consts::Zero; - auto temp_Y = GetScratchBuffer(output_count); - CUDNN_RETURN_IF_ERROR(cudnnReduceTensor(CudnnHandle(), reduce_desc, indices_cuda.get(), indices_bytes, - workspace_cuda.get(), workspace_bytes, &one, input_tensor, temp_X.get(), - &zero, output_tensor, temp_Y.get())); - - Impl_Cast(Stream(), temp_Y.get(), reinterpret_cast(Y->template MutableData()), output_count); - - return Status::OK(); -} - namespace ReductionOps { template diff --git a/onnxruntime/core/providers/rocm/miopen_common.cc b/onnxruntime/core/providers/rocm/miopen_common.cc index 88c92df14476b..24f23853f15b3 100644 --- a/onnxruntime/core/providers/rocm/miopen_common.cc +++ b/onnxruntime/core/providers/rocm/miopen_common.cc @@ -122,10 +122,18 @@ const float Consts::Zero = 0; const float Consts::One = 1; +const float Consts::Zero = 0; + +const float Consts::One = 1; + #if ROCM_VERSION >= 40300 const float ReduceConsts::One = 1; const float ReduceConsts::Zero = 0; + +const float ReduceConsts::One = 1; + +const float ReduceConsts::Zero = 0; #else // Up until ROCm 4.2, miopenReduceTensor() required alpha/beta to be the same data // type as the input type. This differs from cudnnReduceTensor() and other @@ -135,6 +143,12 @@ const half ReduceConsts::One = 1.f; template <> const half ReduceConsts::Zero = 0.f; + +template <> +const BFloat16 ReduceConsts::One = 1.f; + +template <> +const BFloat16 ReduceConsts::Zero = 0.f; #endif template <> diff --git a/onnxruntime/core/providers/rocm/miopen_common.h b/onnxruntime/core/providers/rocm/miopen_common.h index 8140cad54bf7d..b2da1ae9902ed 100644 --- a/onnxruntime/core/providers/rocm/miopen_common.h +++ b/onnxruntime/core/providers/rocm/miopen_common.h @@ -64,6 +64,12 @@ struct Consts { static const float One; }; +template <> +struct Consts { + static const float Zero; + static const float One; +}; + template struct ReduceConsts { static const ElemType Zero; @@ -79,6 +85,12 @@ struct ReduceConsts { static const float Zero; static const float One; }; + +template <> +struct ReduceConsts { + static const float Zero; + static const float One; +}; #endif inline double ClampMiopenBatchNormEpsilon(double epsilon) { diff --git a/onnxruntime/core/providers/rocm/reduction/reduction_ops.cc b/onnxruntime/core/providers/rocm/reduction/reduction_ops.cc index 34537897b9f98..14f129214d1d9 100644 --- a/onnxruntime/core/providers/rocm/reduction/reduction_ops.cc +++ b/onnxruntime/core/providers/rocm/reduction/reduction_ops.cc @@ -519,7 +519,7 @@ Status ReduceComputeCore(ROCMExecutionProvider& rocm_ep, const Tensor& input, Pr } MiopenReduceDescriptor reduce_desc; - if (std::is_same::value) { + ORT_IF_CONSTEXPR (std::is_same::value || std::is_same::value) { ORT_RETURN_IF_ERROR(reduce_desc.Set(miopen_reduce_op, MiopenTensor::GetDataType(), ReduceTensorIndices)); } else { ORT_RETURN_IF_ERROR(reduce_desc.Set(miopen_reduce_op, miopen_type_X, ReduceTensorIndices)); @@ -823,111 +823,6 @@ SPECIALIZED_REDUCEKERNEL_COMPUTEIMPL(int64_t) SPECIALIZED_REDUCEKERNEL_COMPUTEIMPL(int8_t) SPECIALIZED_REDUCEKERNEL_COMPUTEIMPL(uint8_t) -template <> -template <> -Status ReduceKernel::ComputeImpl( - OpKernelContext* ctx, miopenReduceTensorOp_t miopen_reduce_op) const { - typedef typename ToHipType::MappedType HipT; - const Tensor* X = ctx->Input(0); - TensorShapeVector axes; - size_t num_inputs = ctx->InputCount(); - if (num_inputs == 2) { - const Tensor* axes_tensor = ctx->Input(1); - ORT_ENFORCE(axes_tensor != nullptr, "Axes input is null"); - ORT_ENFORCE(axes_tensor->Shape().NumDimensions() == 1, "An axes tensor must be a vector tensor."); - auto nDims = static_cast(axes_tensor->Shape()[0]); - const auto* data = axes_tensor->template Data(); - axes.assign(data, data + nDims); - } else { - axes.assign(axes_.begin(), axes_.end()); - } - - if (axes.empty() && noop_with_empty_axes_) { - auto* Y = ctx->Output(0, X->Shape()); - HIP_RETURN_IF_ERROR(hipMemcpyAsync(Y->template MutableData(), X->template Data(), - X->SizeInBytes(), hipMemcpyDeviceToDevice, Stream())); - return Status::OK(); - } - - PrepareReduceMetadata prepare_reduce_metadata; - ORT_RETURN_IF_ERROR(PrepareForReduce(X, keepdims_, axes, prepare_reduce_metadata)); - - Tensor* Y = ctx->Output(0, prepare_reduce_metadata.squeezed_output_dims); - - int64_t input_count = prepare_reduce_metadata.input_count; - int64_t output_count = prepare_reduce_metadata.output_count; - auto& input_dims_miopen = prepare_reduce_metadata.input_dims_miopen; - auto& output_dims_miopen = prepare_reduce_metadata.output_dims_miopen; - - if (input_count == 0) { - assert(Y->Shape().Size() == 0); - return Status::OK(); - } - - if (input_count == output_count) { - if (Y->template MutableData() != X->template Data()) { - HIP_RETURN_IF_ERROR(hipMemcpyAsync(Y->template MutableData(), X->template Data(), - input_count * sizeof(BFloat16), hipMemcpyDeviceToDevice, Stream())); - } - return Status::OK(); - } - - if (fast_reduction_ && !ctx->GetUseDeterministicCompute()) { - int m{}, n{}; - const auto applicable_matrix_reduction = - get_applicable_matrix_reduction(miopen_reduce_op, X->Shape().GetDims(), axes, m, n); - switch (applicable_matrix_reduction) { - case ApplicableMatrixReduction::Rows: { - return reduce_matrix_rows(Stream(), reinterpret_cast(X->template Data()), - reinterpret_cast(Y->template MutableData()), m, n); - } - case ApplicableMatrixReduction::Columns: { - const auto buffer_size_bytes = compute_reduce_matrix_columns_buffer_size(m, n); - auto buffer = rocm_ep_->GetScratchBuffer(buffer_size_bytes); - return reduce_matrix_columns(Stream(), reinterpret_cast(X->template Data()), - reinterpret_cast(Y->template MutableData()), m, n, buffer.get(), - buffer_size_bytes); - } - default: - break; - } - } - - HIP_RETURN_IF_ERROR(hipMemsetAsync(Y->MutableDataRaw(), 0, Y->SizeInBytes(), Stream())); - - size_t indices_bytes = 0; - size_t workspace_bytes = 0; - MiopenTensor input_tensor; - MiopenTensor output_tensor; - MiopenReduceDescriptor reduce_desc; - - miopenDataType_t miopen_type_X = miopenFloat; - IAllocatorUniquePtr temp_X = GetScratchBuffer(input_count); - Impl_Cast(Stream(), reinterpret_cast(X->template Data()), temp_X.get(), - X->Shape().Size()); - - ORT_RETURN_IF_ERROR(reduce_desc.Set(miopen_reduce_op, miopen_type_X, MIOPEN_REDUCE_TENSOR_NO_INDICES)); - ORT_RETURN_IF_ERROR(input_tensor.Set(input_dims_miopen, miopen_type_X)); - ORT_RETURN_IF_ERROR(output_tensor.Set(output_dims_miopen, miopen_type_X)); - MIOPEN_RETURN_IF_ERROR( - miopenGetReductionIndicesSize(MiopenHandle(), reduce_desc, input_tensor, output_tensor, &indices_bytes)); - MIOPEN_RETURN_IF_ERROR( - miopenGetReductionIndicesSize(MiopenHandle(), reduce_desc, input_tensor, output_tensor, &workspace_bytes)); - IAllocatorUniquePtr indices_rocm = GetScratchBuffer(indices_bytes); - IAllocatorUniquePtr workspace_rocm = GetScratchBuffer(workspace_bytes); - - const auto one = Consts::One; - const auto zero = Consts::Zero; - auto temp_Y = GetScratchBuffer(output_count); - MIOPEN_RETURN_IF_ERROR(miopenReduceTensor(MiopenHandle(), reduce_desc, indices_rocm.get(), indices_bytes, - workspace_rocm.get(), workspace_bytes, &one, input_tensor, temp_X.get(), - &zero, output_tensor, temp_Y.get())); - - Impl_Cast(Stream(), temp_Y.get(), reinterpret_cast(Y->template MutableData()), output_count); - - return Status::OK(); -} - namespace ReductionOps { template From e4dc4e4d3c79a7346dbd78e9badc89dfac384bee Mon Sep 17 00:00:00 2001 From: Guoyu Wang <62914304+gwang-msft@users.noreply.github.com> Date: Tue, 8 Feb 2022 20:44:15 -0800 Subject: [PATCH 32/56] [NNAPI QDQ] AddQDQAdd/Mul, update to NNAPI QDQ handling, update some test settings (#10483) * Squashed commit of the following: commit 12380491a917493401a9bd65c6ed21122263a2df Author: Guoyu Wang Date: Mon Feb 7 12:59:04 2022 -0800 Add qdq mul support commit 9cadda7f2cad19ff9e67ee648c7f04d96dd98561 Merge: 7a32847761 0f5d0a091a Author: Guoyu Wang Date: Mon Feb 7 11:24:47 2022 -0800 Merge remote-tracking branch 'origin/master' into gwang-msft/qdq_mul commit 7a328477612cafe690a5479b1ce60ee9b87bd4c4 Author: Guoyu Wang Date: Mon Feb 7 00:41:30 2022 -0800 move test case to util commit c1a8f0d81e7e75e74dc7e9c45b27ccb77ca82282 Author: Guoyu Wang Date: Fri Feb 4 13:04:26 2022 -0800 update input/output check commit a6f0a0d50466f65d6b222ca7dfe31fe1a13c7113 Author: Guoyu Wang Date: Thu Feb 3 18:37:21 2022 -0800 update quantized io check functions commit 87f4d1dcfeafea1208b03e1ce06fb0b78a956964 Merge: 7849f07109 97b8f6f394 Author: Guoyu Wang Date: Wed Feb 2 17:22:58 2022 -0800 Merge remote-tracking branch 'origin/master' into gwang-msft/qdq_mul commit 7849f07109ddb5a5f82edf27431aded729dd3872 Author: Guoyu Wang Date: Wed Feb 2 17:22:55 2022 -0800 minor update commit 7196cdf4197d3275ba83d9a9bd6c6cbeb859b8a4 Author: Guoyu Wang Date: Wed Feb 2 10:50:10 2022 -0800 init change commit 84c00772a1eab9fb3a4002683e723152bb48c247 Merge: a8c7dce22f 7318361645 Author: Guoyu Wang Date: Tue Feb 1 18:21:17 2022 -0800 Merge remote-tracking branch 'origin/master' into gwang-msft/qdq_mul commit a8c7dce22f089def87be263d65357ca1d4293499 Merge: 55e536c182 ef7b4dc05c Author: Guoyu Wang Date: Tue Feb 1 13:51:04 2022 -0800 Merge remote-tracking branch 'origin/master' into gwang-msft/qdq_mul commit 55e536c182f151cbc360451164f78a548bd3ae71 Author: Guoyu Wang Date: Tue Feb 1 11:44:34 2022 -0800 address cr comments commit d460f5b776f53b2adc6c503fc7f0a120ea9c4775 Author: Guoyu Wang Date: Tue Feb 1 00:33:54 2022 -0800 fix android UT failure commit 52146cf06f5671299af27852fae6c31cf486f391 Author: Guoyu Wang Date: Mon Jan 31 16:01:13 2022 -0800 fix build break commit ec6d07df8bf59caf35d1b8e0d6b46d14b8676e49 Author: Guoyu Wang Date: Mon Jan 31 15:41:52 2022 -0800 minor update to UT commit 8ec8490b4fda73da91036935841792389b010ed8 Author: Guoyu Wang Date: Mon Jan 31 15:01:30 2022 -0800 Add NNAPI support of QDQ Resize * Update qdq add/mul test case, fix build break * Address CR comments * Add QLinearMul support * remove unused params * Address CR comments --- .../nnapi/nnapi_builtin/builders/helper.cc | 217 +----- .../nnapi/nnapi_builtin/builders/helper.h | 23 +- .../nnapi_builtin/builders/model_builder.cc | 2 +- .../nnapi_builtin/builders/op_builder.cc | 21 +- .../builders/op_support_checker.cc | 618 +++++++++++------- .../contrib_ops/qlinear_binary_op_test.cc | 222 +++---- onnxruntime/test/optimizer/qdq_test_utils.h | 87 ++- .../test/optimizer/qdq_transformer_test.cc | 179 ++--- .../test/providers/nnapi/nnapi_basic_test.cc | 43 +- onnxruntime/test/util/include/test_utils.h | 19 +- onnxruntime/test/util/test_utils.cc | 24 +- 11 files changed, 710 insertions(+), 745 deletions(-) diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc index 5b958c686d007..f492a4cbbcb4b 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.cc @@ -61,6 +61,8 @@ QuantizedOpType GetQuantizedOpType(const NodeUnit& node_unit) { return QuantizedOpType::QLinearMatMul; else if (op_type == "QLinearAdd") return QuantizedOpType::QLinearAdd; + else if (op_type == "QLinearMul") + return QuantizedOpType::QLinearMul; else if (op_type == "QLinearSigmoid") return QuantizedOpType::QLinearSigmoid; else if (op_type == "QLinearAveragePool") @@ -72,6 +74,10 @@ QuantizedOpType GetQuantizedOpType(const NodeUnit& node_unit) { return QuantizedOpType::QDQResize; else if (op_type == "AveragePool") return QuantizedOpType::QDQAveragePool; + else if (op_type == "Add") + return QuantizedOpType::QDQAdd; + else if (op_type == "Mul") + return QuantizedOpType::QDQMul; } else { // throw? // Do we want to throw here? seems got neglected last time @@ -114,25 +120,13 @@ bool IsQuantizedPool(QuantizedOpType quant_op_type) { bool IsQuantizedBinaryOp(QuantizedOpType quant_op_type) { return quant_op_type == QuantizedOpType::QLinearMatMul || quant_op_type == QuantizedOpType::QLinearAdd || + quant_op_type == QuantizedOpType::QLinearMul || + quant_op_type == QuantizedOpType::QDQAdd || + quant_op_type == QuantizedOpType::QDQMul || IsQuantizedConv(quant_op_type); } -bool HasValidUnaryOpQuantizedInputs(const NodeUnit& node_unit) { - int32_t input_type; - if (!GetType(node_unit.Inputs()[0].node_arg, input_type)) - return false; - - if (input_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8) { - LOGS_DEFAULT(VERBOSE) << "[" << node_unit.OpType() - << "] Input type: [" << input_type - << "] is not supported for now"; - return false; - } - - return true; -} - -bool HasValidBinaryOpQuantizedInputs(const NodeUnit& node_unit) { +bool HasValidBinaryOpQuantizedInputTypes(const NodeUnit& node_unit) { auto quant_op_type = GetQuantizedOpType(node_unit); int32_t a_input_type, b_input_type; if (!IsQuantizedBinaryOp(quant_op_type)) { @@ -146,16 +140,17 @@ bool HasValidBinaryOpQuantizedInputs(const NodeUnit& node_unit) { if (!GetType(inputs[1].node_arg, b_input_type)) return false; - // QlinearConv supports u8u8 or u8s8 - // QLinearMatMul/Add only support u8u8 - bool is_quant_conv = IsQuantizedConv(quant_op_type); + // QlinearConv/MatMul supports u8u8 or u8s8 + // QLinearAdd/QLinearMul only support u8u8 + bool is_quant_conv_or_matmul = IsQuantizedConv(quant_op_type) || (quant_op_type == QuantizedOpType::QLinearMatMul); + bool has_valid_qlinear_conv_weight = (b_input_type == ONNX_NAMESPACE::TensorProto_DataType_UINT8 || b_input_type == ONNX_NAMESPACE::TensorProto_DataType_INT8); if (a_input_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8 || - (!is_quant_conv && a_input_type != b_input_type) || - (is_quant_conv && !has_valid_qlinear_conv_weight)) { + (!is_quant_conv_or_matmul && a_input_type != b_input_type) || + (is_quant_conv_or_matmul && !has_valid_qlinear_conv_weight)) { LOGS_DEFAULT(VERBOSE) << "[" << node_unit.OpType() << "] A Input type: [" << a_input_type << "] B Input type: [" << b_input_type @@ -166,182 +161,6 @@ bool HasValidBinaryOpQuantizedInputs(const NodeUnit& node_unit) { return true; } -bool HasValidQuantizationScales(const InitializedTensorSet& initializers, const NodeUnit& node_unit, - const std::vector& indices, const OpSupportCheckParams& params, bool is_input) { - const auto& op_type = node_unit.OpType(); - auto quant_op_type = GetQuantizedOpType(node_unit); - bool is_quant_conv = IsQuantizedConv(quant_op_type); - bool is_quant_matmul = (quant_op_type == QuantizedOpType::QLinearMatMul); - const auto& io_defs = is_input ? node_unit.Inputs() : node_unit.Outputs(); - for (const auto idx : indices) { - if (idx >= io_defs.size()) { - LOGS_DEFAULT(VERBOSE) << (is_input ? "Input" : "Output") << " index, " << idx - << " >= size, " << io_defs.size() - << " of NodeUnit: " << node_unit.Name(); - return false; - } - - const auto& io_def = io_defs[idx]; - if (!io_def.quant_param.has_value()) { - LOGS_DEFAULT(VERBOSE) << "HasValidQuantizationZeroPoints, Input index, " << idx - << " has no quant_param"; - return false; - } - - const auto scale_name = io_def.quant_param->scale.Name(); - - if (!Contains(initializers, scale_name)) { - LOGS_DEFAULT(VERBOSE) << "The scale of " << op_type << " must be an initializer tensor"; - return false; - } - - // If this op is Qlinear[Conv/MatMul], we want to check u8s8 support for weight tensor (or B tensor for QlinearMatMul) - bool is_conv_matmul_weight = is_input && (is_quant_conv || is_quant_matmul) && idx == 1; - bool is_conv_matmul_u8s8_weight = false; - - if (is_conv_matmul_weight) { - const auto& weight_tensor = *initializers.at(io_def.node_arg.Name()); - is_conv_matmul_u8s8_weight = weight_tensor.data_type() == ONNX_NAMESPACE::TensorProto_DataType_INT8; - } - - const auto& scale_tensor = *initializers.at(scale_name); - int64_t scales_dim = scale_tensor.dims().empty() ? 1 : scale_tensor.dims()[0]; - if (!is_conv_matmul_u8s8_weight) { - if (scales_dim != 1) { - LOGS_DEFAULT(VERBOSE) << op_type << " does not support per-channel quantization, " - << " for now, only u8s8 QlinearConv supports per-channel quantization on API 29+"; - return false; - } - } else if (scales_dim != 1) { - // For u8s8 Qlinear[Conv/MatMul], we support - // 1. Per-tensor, the weight will be transformed to uint8 later - // 2. Per-channel, only from Android API level 29 - if (is_quant_matmul) { - LOGS_DEFAULT(VERBOSE) << "QLinearMatMul does not support per-channel quantization"; - return false; - } - - if (params.android_feature_level < ANEURALNETWORKS_FEATURE_LEVEL_3) { - LOGS_DEFAULT(VERBOSE) << op_type << " only supports per-channel quantization on Android API 29+, " - << "system NNAPI feature level: " << params.android_feature_level; - return false; - } - - const auto& weight_tensor = *initializers.at(io_def.node_arg.Name()); - if (weight_tensor.dims()[0] != scales_dim) { - LOGS_DEFAULT(VERBOSE) << op_type << " mismatch int8 per-channel quantization weight," - << " weight dimension[0] " << weight_tensor.dims()[0] - << " scale dimension " << scales_dim; - return false; - } - } - } - - return true; -} - -bool HasValidQuantizationZeroPoints(const InitializedTensorSet& initializers, const NodeUnit& node_unit, - const std::vector& indices, bool is_input) { - const auto& op_type = node_unit.OpType(); - auto quant_op_type = GetQuantizedOpType(node_unit); - bool is_quant_conv = IsQuantizedConv(quant_op_type); - bool is_quant_matmul = (quant_op_type == QuantizedOpType::QLinearMatMul); - - const auto& io_defs = is_input ? node_unit.Inputs() : node_unit.Outputs(); - for (const auto idx : indices) { - if (idx >= io_defs.size()) { - LOGS_DEFAULT(VERBOSE) << "HasValidQuantizationZeroPoints, " - << (is_input ? "Input" : "Output") << " index, " << idx - << " >= size, " << io_defs.size(); - return false; - } - - const auto& io_def = io_defs[idx]; - if (!io_def.quant_param.has_value()) { - LOGS_DEFAULT(VERBOSE) << "HasValidQuantizationZeroPoints, Input index, " << idx - << " has no quant_param"; - return false; - } - - // zero point is optional here - if (!io_def.quant_param->zero_point) - return true; - - const auto& zero_point_name = io_def.quant_param->zero_point->Name(); - if (!Contains(initializers, zero_point_name)) { - LOGS_DEFAULT(VERBOSE) << "The zero point of " << op_type << " must be an initializer tensor"; - return false; - } - - bool is_conv_matmul_weight = is_input && (is_quant_conv || is_quant_matmul) && idx == 1; - bool is_conv_matmul_u8s8_weight = false; - - if (is_conv_matmul_weight) { - const auto& weight_tensor = *initializers.at(io_def.node_arg.Name()); - is_conv_matmul_u8s8_weight = weight_tensor.data_type() == ONNX_NAMESPACE::TensorProto_DataType_INT8; - } - - const auto& zero_tensor = *initializers.at(zero_point_name); - int64_t zero_dim = zero_tensor.dims().empty() ? 1 : zero_tensor.dims()[0]; - - if (!is_conv_matmul_u8s8_weight) { - if (zero_dim != 1) { - LOGS_DEFAULT(VERBOSE) << op_type << " does not support per-channel quantization, " - << " for now, only u8s8 QlinearConv supports per-channel quantization on API 29+"; - return false; - } - } else { - // For u8s8 Qlinear[Conv/MatMul], we support - // 1. Per-tensor, the weight will be transformed to uint8 later - // 2. Per-channel, only from Android API level 29 - if (zero_tensor.data_type() != ONNX_NAMESPACE::TensorProto_DataType_INT8) { - LOGS_DEFAULT(VERBOSE) << "u8s8 Qlinear[Conv/MatMul] only supports int8 zero point for weight, " - << "actual zero point type: [" << zero_tensor.data_type() << "]"; - return false; - } - - if (zero_dim != 1) { - if (is_quant_matmul) { - LOGS_DEFAULT(VERBOSE) << "QLinearMatMul does not support per-channel quantization"; - return false; - } - } - - // For onnx, u8s8 QlinearConv, the weight zero point can be a scalar, - // or a tensor with same channel as weight, for NNAPI we only support it be - // 0 (scalar) or all 0 (tensor), NNAPI will assume the zero point for per-channel - // quantization is 0 there is no input for it - const auto& weight_tensor = *initializers.at(io_def.node_arg.Name()); - if (weight_tensor.dims()[0] != zero_dim && zero_dim != 1) { - LOGS_DEFAULT(VERBOSE) << op_type << " mismatch int8 per-channel quantization weight," - << " weight dimension[0] " << weight_tensor.dims()[0] - << " zero point dimension " << zero_dim; - return false; - } - - std::vector unpacked_tensor; - auto status = onnxruntime::utils::UnpackInitializerData(zero_tensor, node_unit.ModelPath(), unpacked_tensor); - if (!status.IsOK()) { - LOGS_DEFAULT(ERROR) << "Qlinear[Conv/MatMul] error when unpack zero tensor: " << zero_point_name - << ", error msg: " << status.ErrorMessage(); - return false; - } - - // Verify all onnx weight zero point(s) are 0(s) - const int8_t* zero_points = reinterpret_cast(unpacked_tensor.data()); - for (size_t i = 0; i < unpacked_tensor.size(); i++) { - if (zero_points[i] != 0) { - LOGS_DEFAULT(VERBOSE) << "u8s8 Qlinear[Conv/MatMul] only support 0 as zero point, " - << "zero_points[" << i << "] has value: " << zero_points[i]; - return false; - } - } - } - } - - return true; -} - common::Status GetQuantizationScaleAndZeroPoint( const InitializedTensorSet& initializers, const NodeUnitIODef& io_def, const Path& model_path, float& scale, int32_t& zero_point) { @@ -387,8 +206,8 @@ common::Status GetQuantizationScaleAndZeroPoint( common::Status GetQuantizationScaleAndZeroPoint( const InitializedTensorSet& initializers, const NodeUnit& node_unit, const std::string& name, - float& scale, int32_t& zero_point, bool is_input) { - const auto& io_defs = is_input ? node_unit.Inputs() : node_unit.Outputs(); + float& scale, int32_t& zero_point, IOKind io_kind) { + const auto& io_defs = io_kind == IOKind::Input ? node_unit.Inputs() : node_unit.Outputs(); for (const auto& io_def : io_defs) { if (io_def.node_arg.Name() == name) return GetQuantizationScaleAndZeroPoint(initializers, io_def, node_unit.ModelPath(), diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h index 2d99bce246184..73ea329d0b31b 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/helper.h @@ -82,12 +82,14 @@ enum class QuantizedOpType : uint8_t { QLinearAdd, QLinearSigmoid, QLinearAveragePool, + QLinearMul, // Not yet supported - // QLinearMul, // QLinearReduceMean, QDQConv, QDQResize, QDQAveragePool, + QDQAdd, + QDQMul, // TODO, add other QDQ NodeUnit types }; @@ -97,6 +99,11 @@ enum class ConvType : uint8_t { Grouped, }; +enum class IOKind : uint8_t { + Input, + Output, +}; + QuantizedOpType GetQuantizedOpType(const NodeUnit& node_unit); // Return the type of the conv ops, @@ -113,18 +120,8 @@ bool IsQuantizedPool(QuantizedOpType quant_op_type); // Such as QLinearConv, QLinearMatMul, QLinearAdd, QDQConv,... bool IsQuantizedBinaryOp(QuantizedOpType quant_op_type); -// Check if a qlinear unary op has valid inputs, Qlinear[Sigmoid/AveragePool] -bool HasValidUnaryOpQuantizedInputs(const NodeUnit& node_unit); // Check if a qlinear binary op has valid inputs, Qlinear[Conv/MatMul/Add] -bool HasValidBinaryOpQuantizedInputs(const NodeUnit& node_unit); - -// Check if a qlinear op has valid scales for given indices -bool HasValidQuantizationScales(const InitializedTensorSet& initializers, const NodeUnit& node_unit, - const std::vector& indices, const OpSupportCheckParams& params, bool is_input); - -// Check if a qlinear op has valid zero points for given indices -bool HasValidQuantizationZeroPoints(const InitializedTensorSet& initializers, const NodeUnit& node_unit, - const std::vector& indices, bool is_input); +bool HasValidBinaryOpQuantizedInputTypes(const NodeUnit& node_unit); common::Status GetQuantizationScaleAndZeroPoint( const InitializedTensorSet& initializers, const NodeUnitIODef& io_def, const Path& model_path, @@ -132,7 +129,7 @@ common::Status GetQuantizationScaleAndZeroPoint( common::Status GetQuantizationScaleAndZeroPoint( const InitializedTensorSet& initializers, const NodeUnit& node_unit, const std::string& name, - float& scale, int32_t& zero_point, bool is_input = true); + float& scale, int32_t& zero_point, IOKind io_kind = IOKind::Input); // Get Shape/Type of a NodeArg // TODO, move to shared_utils diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/model_builder.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/model_builder.cc index 0037e1a1d487d..3f95048335358 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/model_builder.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/model_builder.cc @@ -210,7 +210,7 @@ static Status GetInputDataType( // TODO, verify the scale and zero point match if there are multiple op using same input const auto* node_unit = all_quantized_op_inputs.at(name)[0]; ORT_RETURN_IF_ERROR(GetQuantizationScaleAndZeroPoint( - initializers, *node_unit, name, scale, zero_point, true /* is_input */)); + initializers, *node_unit, name, scale, zero_point, IOKind::Input)); break; } // case ONNX_NAMESPACE::TensorProto_DataType_INT8: diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc index 8a61e2a105127..47e8fe2eef749 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_builder.cc @@ -452,7 +452,7 @@ static Status HandleAutoPad(const Shape& input_shape, } // Get scales and zero points for the qlinear binary ops (which has 2 input and 1 output) -// QLinearConv, QLinearMatmul, QLinearAdd +// QLinearConv, QLinearMatmul, QLinearAdd, QLinearMul // a, b are inputs, and y is output static Status GetBinaryOpQuantizationScaleAndZeroPoint( const InitializedTensorSet& initializers, const NodeUnit& node_unit, @@ -656,8 +656,11 @@ class BinaryOpBuilder : public BaseOpBuilder { }; /* static */ bool BinaryOpBuilder::IsQuantizedOp(const NodeUnit& node_unit) { - // TODO, add support for QDQ NodeUnit - return node_unit.OpType() == "QLinearAdd"; + const auto quant_type = GetQuantizedOpType(node_unit); + return quant_type == QuantizedOpType::QLinearAdd || + quant_type == QuantizedOpType::QLinearMul || + quant_type == QuantizedOpType::QDQAdd || + quant_type == QuantizedOpType::QDQMul; } void BinaryOpBuilder::AddInitializersToSkip(ModelBuilder& model_builder, const NodeUnit& node_unit) const { @@ -680,6 +683,7 @@ void BinaryOpBuilder::AddInitializersToSkip(ModelBuilder& model_builder, const N "Mul", "Div", "QLinearAdd", + "QLinearMul", "Pow", }); } @@ -690,12 +694,12 @@ Status BinaryOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const int32_t op_code; bool add_activation = true; - bool op_is_qlinear = op_type == "QLinearAdd"; - if (op_type == "Add" || op_is_qlinear) { + bool is_quant_op = IsQuantizedOp(node_unit); + if (op_type == "Add" || op_type == "QLinearAdd") { // Add/QLinearAdd/QDQAdd op_code = ANEURALNETWORKS_ADD; } else if (op_type == "Sub") { op_code = ANEURALNETWORKS_SUB; - } else if (op_type == "Mul") { + } else if (op_type == "Mul" || op_type == "QLinearMul") { // Mul/QLinearMul/QDQMul op_code = ANEURALNETWORKS_MUL; } else if (op_type == "Div") { op_code = ANEURALNETWORKS_DIV; @@ -721,7 +725,7 @@ Status BinaryOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const b_zero_point = 0, y_zero_point = 0; - if (op_is_qlinear) { + if (is_quant_op) { ORT_RETURN_IF_ERROR(GetBinaryOpQuantizationScaleAndZeroPoint( model_builder.GetInitializerTensors(), node_unit, a_scale, b_scale, y_scale, @@ -729,7 +733,7 @@ Status BinaryOpBuilder::AddToModelBuilderImpl(ModelBuilder& model_builder, const } // Verify if the scale and zero point matchs from onnx input and nnapi input match - if (op_is_qlinear) { + if (is_quant_op) { ORT_RETURN_IF_ERROR(IsValidInputQuantizedType(model_builder, input1, a_scale, a_zero_point)); ORT_RETURN_IF_ERROR(IsValidInputQuantizedType(model_builder, input2, b_scale, b_zero_point)); } @@ -2717,6 +2721,7 @@ static OpBuilderRegistrations CreateOpBuilderRegistrations() { NNAPI_EP_ADD_SHARED_OP_BUILDER("Mul", BinaryOpBuilder); NNAPI_EP_ADD_SHARED_OP_BUILDER("Pow", BinaryOpBuilder); NNAPI_EP_ADD_SHARED_OP_BUILDER("QLinearAdd", BinaryOpBuilder); + NNAPI_EP_ADD_SHARED_OP_BUILDER("QLinearMul", BinaryOpBuilder); NNAPI_EP_ADD_SHARED_OP_BUILDER("Sub", BinaryOpBuilder); } diff --git a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc index 950fb302f1b53..01b51fed399f6 100644 --- a/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc +++ b/onnxruntime/core/providers/nnapi/nnapi_builtin/builders/op_support_checker.cc @@ -22,7 +22,21 @@ struct OpSupportCheckerRegistrations { std::unordered_map op_support_checker_map; }; -bool HasExternalInitializer(const InitializedTensorSet& initializers, const NodeUnit& node_unit) { +template +void CreateSharedOpSupportCheckerImpl(const std::string& op_type, + OpSupportCheckerRegistrations& op_registrations, + const std::vector& op_types) { + // The shared OpSupportChecker is already in the OpSupportCheckerRegistrations + if (op_registrations.op_support_checker_map.find(op_type) != op_registrations.op_support_checker_map.cend()) + return; + + op_registrations.support_checkers.push_back(std::make_unique()); + for (const auto& op : op_types) { + op_registrations.op_support_checker_map.emplace(op, op_registrations.support_checkers.back().get()); + } +} + +static bool HasExternalInitializer(const InitializedTensorSet& initializers, const NodeUnit& node_unit) { const auto is_ext_initializer = [&](const NodeArg& node_arg) { const auto& input_name(node_arg.Name()); @@ -58,18 +72,200 @@ bool HasExternalInitializer(const InitializedTensorSet& initializers, const Node return false; } -template -void CreateSharedOpSupportCheckerImpl(const std::string& op_type, - OpSupportCheckerRegistrations& op_registrations, - const std::vector& op_types) { - // The shared OpSupportChecker is already in the OpSupportCheckerRegistrations - if (op_registrations.op_support_checker_map.find(op_type) != op_registrations.op_support_checker_map.cend()) - return; +static bool IsQuantizationScaleSupported(const InitializedTensorSet& initializers, + const NodeUnitIODef& io_def, + const OpSupportCheckParams& params, + const std::string& op_type, + bool is_quant_matmul, + bool is_conv_matmul_u8s8_weight) { + const auto scale_name = io_def.quant_param->scale.Name(); + auto it = initializers.find(scale_name); + if (it == initializers.cend()) { + LOGS_DEFAULT(VERBOSE) << "The scale of " << op_type << " must be an initializer tensor"; + return false; + } + + const auto& scale_tensor = *it->second; + int64_t scales_dim = scale_tensor.dims().empty() ? 1 : scale_tensor.dims()[0]; + if (!is_conv_matmul_u8s8_weight) { + if (scales_dim != 1) { + LOGS_DEFAULT(VERBOSE) << op_type << " does not support per-channel quantization, " + << " for now, only u8s8 QlinearConv supports per-channel quantization on API 29+"; + return false; + } + } else if (scales_dim != 1) { + // For u8s8 Qlinear[Conv/MatMul], we support + // 1. Per-tensor, the weight will be transformed to uint8 later + // 2. Per-channel, only from Android API level 29 + if (is_quant_matmul) { + LOGS_DEFAULT(VERBOSE) << "QLinearMatMul does not support per-channel quantization"; + return false; + } - op_registrations.support_checkers.push_back(std::make_unique()); - for (const auto& op : op_types) { - op_registrations.op_support_checker_map.emplace(op, op_registrations.support_checkers.back().get()); + if (params.android_feature_level < ANEURALNETWORKS_FEATURE_LEVEL_3) { + LOGS_DEFAULT(VERBOSE) << op_type << " only supports per-channel quantization on Android API 29+, " + << "system NNAPI feature level: " << params.android_feature_level; + return false; + } + + Shape weight_shape; + if (!GetShape(io_def.node_arg, weight_shape)) + return false; + + if (weight_shape[0] != scales_dim) { + LOGS_DEFAULT(VERBOSE) << op_type << " mismatch int8 per-channel quantization weight," + << " weight dimension[0] " << weight_shape[0] + << " scale dimension " << scales_dim; + return false; + } + } + + return true; +} + +static bool IsQuantizationZeroPointSupported(const InitializedTensorSet& initializers, + const NodeUnitIODef& io_def, + const std::string& op_type, + const Path& model_path, + bool is_quant_matmul, + bool is_conv_matmul_u8s8_weight) { + // zero point is optional here + if (!io_def.quant_param->zero_point) + return true; + + const auto& zero_point_name = io_def.quant_param->zero_point->Name(); + if (!Contains(initializers, zero_point_name)) { + LOGS_DEFAULT(VERBOSE) << "The zero point of " << op_type << " must be an initializer tensor"; + return false; + } + + const auto& zero_tensor = *initializers.at(zero_point_name); + int64_t zero_dim = zero_tensor.dims().empty() ? 1 : zero_tensor.dims()[0]; + + if (!is_conv_matmul_u8s8_weight) { + if (zero_dim != 1) { + LOGS_DEFAULT(VERBOSE) << op_type << " does not support per-channel quantization, " + << " for now, only u8s8 QlinearConv supports per-channel quantization on API 29+"; + return false; + } + } else { + // For u8s8 Qlinear[Conv/MatMul], we support + // 1. Per-tensor, the weight will be transformed to uint8 later + // 2. Per-channel, only from Android API level 29 + if (zero_tensor.data_type() != ONNX_NAMESPACE::TensorProto_DataType_INT8) { + LOGS_DEFAULT(VERBOSE) << "u8s8 Qlinear[Conv/MatMul] only supports int8 zero point for weight, " + << "actual zero point type: [" << zero_tensor.data_type() << "]"; + return false; + } + + if (zero_dim != 1) { + if (is_quant_matmul) { + LOGS_DEFAULT(VERBOSE) << "QLinearMatMul does not support per-channel quantization"; + return false; + } + } + + // For onnx, u8s8 QlinearConv, the weight zero point can be a scalar, + // or a tensor with same channel as weight, for NNAPI we only support it be + // 0 (scalar) or all 0 (tensor), NNAPI will assume the zero point for per-channel + // quantization is 0 there is no input for it + Shape weight_shape; + if (!GetShape(io_def.node_arg, weight_shape)) + return false; + + if (weight_shape[0] != zero_dim && zero_dim != 1) { + LOGS_DEFAULT(VERBOSE) << op_type << " mismatch int8 per-channel quantization weight," + << " weight dimension[0] " << weight_shape[0] + << " zero point dimension " << zero_dim; + return false; + } + + std::vector unpacked_tensor; + auto status = onnxruntime::utils::UnpackInitializerData(zero_tensor, model_path, unpacked_tensor); + if (!status.IsOK()) { + LOGS_DEFAULT(ERROR) << "Qlinear[Conv/MatMul] error when unpack zero tensor: " << zero_point_name + << ", error msg: " << status.ErrorMessage(); + return false; + } + + // Verify all onnx weight zero point(s) are 0(s) + const int8_t* zero_points = reinterpret_cast(unpacked_tensor.data()); + for (size_t i = 0; i < unpacked_tensor.size(); i++) { + if (zero_points[i] != 0) { + LOGS_DEFAULT(VERBOSE) << "u8s8 Qlinear[Conv/MatMul] only support 0 as zero point, " + << "zero_points[" << i << "] has value: " << zero_points[i]; + return false; + } + } } + + return true; +} + +// Check if the given quantized input(s) or output(s) is supported +static bool IsQuantizedIOSupported(const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const std::vector& indices, const OpSupportCheckParams& params, IOKind io_kind) { + const auto& op_type = node_unit.OpType(); + auto quant_op_type = GetQuantizedOpType(node_unit); + + ORT_ENFORCE(quant_op_type != QuantizedOpType::Unknown, "[", op_type, "] is not a quantized op"); + + bool is_input = io_kind == IOKind::Input; + bool is_quant_conv = IsQuantizedConv(quant_op_type); + bool is_quant_matmul = (quant_op_type == QuantizedOpType::QLinearMatMul); + const auto& io_defs = is_input ? node_unit.Inputs() : node_unit.Outputs(); + + for (const auto idx : indices) { + if (idx >= io_defs.size()) { + LOGS_DEFAULT(VERBOSE) << (is_input ? "Input" : "Output") << " index, " << idx + << " >= size, " << io_defs.size() + << " of NodeUnit: " << node_unit.Name(); + return false; + } + + const auto& io_def = io_defs[idx]; + ORT_ENFORCE(io_def.quant_param.has_value(), "Input index, ", idx, " has no quant_param"); + + // If this op is Qlinear[Conv/MatMul], we want to check u8s8 support for weight tensor (or B tensor for QlinearMatMul) + bool is_conv_matmul_weight = is_input && (is_quant_conv || is_quant_matmul) && idx == 1; + bool is_conv_matmul_u8s8_weight = false; + + if (is_conv_matmul_weight) { + int32_t weight_type; + if (!GetType(io_def.node_arg, weight_type)) + return false; + is_conv_matmul_u8s8_weight = weight_type == ONNX_NAMESPACE::TensorProto_DataType_INT8; + } + + int32_t input_type; + if (!GetType(io_def.node_arg, input_type)) + return false; + + // We only support u8 for most of the inputs and all outputs, with the exception for Quantized MatMul and Conv, + // which allows s8 weight (u8s8) + // TODO, add support of s8s8 + if (input_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8 && + !(input_type == ONNX_NAMESPACE::TensorProto_DataType_INT8 && is_conv_matmul_u8s8_weight)) { + LOGS_DEFAULT(VERBOSE) << op_type << "NodeUnit [" << node_unit.Name() + << "], type [" << op_type << "]'s " + << (is_input ? "Input" : "Output") << " index [" << idx + << "] has unsupported type [" << input_type << "]"; + return false; + } + + // Check scale and zero point + if (!IsQuantizationScaleSupported(initializers, io_def, params, op_type, + is_quant_matmul, is_conv_matmul_u8s8_weight)) { + return false; + } + + if (!IsQuantizationZeroPointSupported(initializers, io_def, op_type, node_unit.ModelPath(), + is_quant_matmul, is_conv_matmul_u8s8_weight)) { + return false; + } + } + + return true; } #pragma endregion helpers @@ -100,7 +296,9 @@ class BaseOpSupportChecker : public IOpSupportChecker { return ANEURALNETWORKS_FEATURE_LEVEL_1; } - virtual bool HasSupportedInputsImpl(const NodeUnit& node_unit) const; + virtual bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const; virtual int GetMinSupportedOpSet(const NodeUnit& /* node_unit */) const { return 1; } virtual int GetMaxSupportedOpSet(const NodeUnit& /* node_unit */) const { return 15; } @@ -112,7 +310,8 @@ class BaseOpSupportChecker : public IOpSupportChecker { private: bool HasSupportedOpSet(const NodeUnit& node_unit) const; - bool HasSupportedInputs(const NodeUnit& node_unit) const; + bool HasSupportedInputOutputs(const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const; }; /* static */ void BaseOpSupportChecker::CreateSharedOpSupportChecker( @@ -138,7 +337,7 @@ bool BaseOpSupportChecker::IsOpSupported(const InitializedTensorSet& initializer if (!IsNodeUnitTypeSupported(node_unit)) return false; - if (!HasSupportedInputs(node_unit)) + if (!HasSupportedInputOutputs(initializers, node_unit, params)) return false; // We do not support external initializers for now @@ -151,7 +350,8 @@ bool BaseOpSupportChecker::IsOpSupported(const InitializedTensorSet& initializer return IsOpSupportedImpl(initializers, node_unit, params); } -bool BaseOpSupportChecker::HasSupportedInputs(const NodeUnit& node_unit) const { +bool BaseOpSupportChecker::HasSupportedInputOutputs(const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const { // We do not support unknown(null) input shape auto has_supported_shape = [](const NodeArg& node_arg, const std::string& name, const std::string op_type) { const auto* shape_proto = node_arg.Shape(); @@ -185,10 +385,12 @@ bool BaseOpSupportChecker::HasSupportedInputs(const NodeUnit& node_unit) const { return false; } } - return HasSupportedInputsImpl(node_unit); + return HasSupportedInputOutputsImpl(initializers, node_unit, params); } -bool BaseOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { +bool BaseOpSupportChecker::HasSupportedInputOutputsImpl( + const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, + const OpSupportCheckParams& /* params */) const { // We only check the type of input 0 by default // specific op builder can override this const auto& input = node_unit.Inputs()[0].node_arg; @@ -245,8 +447,13 @@ class BinaryOpSupportChecker : public BaseOpSupportChecker { const OpSupportCheckParams& params) const override; bool IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, const OpSupportCheckParams& params) const override; - bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; + bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const override; int GetMinSupportedOpSet(const NodeUnit& node_unit) const override; + + bool IsNodeUnitTypeSupported(const NodeUnit& node_unit) const override; + static bool IsQuantizedOp(const NodeUnit& node_unit); }; /* static */ void BinaryOpSupportChecker::CreateSharedOpSupportChecker( @@ -259,10 +466,29 @@ class BinaryOpSupportChecker : public BaseOpSupportChecker { "Mul", "Div", "QLinearAdd", + "QLinearMul", "Pow", }); } +bool BinaryOpSupportChecker::IsNodeUnitTypeSupported(const NodeUnit& node_unit) const { + if (node_unit.UnitType() == NodeUnit::Type::QDQGroup) { + const auto quant_type = GetQuantizedOpType(node_unit); + return quant_type == QuantizedOpType::QDQAdd || + quant_type == QuantizedOpType::QDQMul; + } + + return true; +} + +/* static */ bool BinaryOpSupportChecker::IsQuantizedOp(const NodeUnit& node_unit) { + const auto quant_type = GetQuantizedOpType(node_unit); + return quant_type == QuantizedOpType::QLinearAdd || + quant_type == QuantizedOpType::QLinearMul || + quant_type == QuantizedOpType::QDQAdd || + quant_type == QuantizedOpType::QDQMul; +} + int32_t BinaryOpSupportChecker::GetMinSupportedNNAPIFeatureLevel( const NodeUnit& node_unit, const OpSupportCheckParams& /* params */) const { const auto& op(node_unit.OpType()); @@ -281,21 +507,29 @@ int BinaryOpSupportChecker::GetMinSupportedOpSet(const NodeUnit& node_unit) cons const auto& op(node_unit.OpType()); // Add/Sub/Mul/Div/Pow opset 6- has broadcast attributes we do not support now - if (op != "QLinearAdd") + if (op != "QLinearAdd" && op != "QLinearMul") return 7; return 1; } -bool BinaryOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { - bool is_qlinear_add = node_unit.OpType() == "QLinearAdd"; +bool BinaryOpSupportChecker::HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const { + bool is_quantized_op = IsQuantizedOp(node_unit); bool is_pow = node_unit.OpType() == "Pow"; - if (!is_qlinear_add && !is_pow) - return BaseOpSupportChecker::HasSupportedInputsImpl(node_unit); + if (!is_quantized_op && !is_pow) + return BaseOpSupportChecker::HasSupportedInputOutputsImpl(initializers, node_unit, params); - if (is_qlinear_add) { - // QLinearAdd - if (!HasValidBinaryOpQuantizedInputs(node_unit)) + if (is_quantized_op) { + // QLinearAdd/QDQAdd/QLinearMul/QDQMul + if (!HasValidBinaryOpQuantizedInputTypes(node_unit)) + return false; + + if (!IsQuantizedIOSupported(initializers, node_unit, {0, 1}, params, IOKind::Input)) + return false; + + if (!IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Output)) return false; } @@ -320,11 +554,10 @@ bool BinaryOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) c return true; } -bool BinaryOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, - const OpSupportCheckParams& params) const { +bool BinaryOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, + const OpSupportCheckParams& /* params */) const { const auto& op_type(node_unit.OpType()); const auto& inputs = node_unit.Inputs(); - bool op_is_qlinear = op_type == "QLinearAdd"; Shape input1_shape, input2_shape; if (!GetShape(inputs[0].node_arg, input1_shape) || !GetShape(inputs[1].node_arg, input2_shape)) @@ -339,32 +572,6 @@ bool BinaryOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initi return false; } - if (op_is_qlinear) { - // For QLinearAdd, we only support uint8 output now - int32_t output_type; - if (!GetType(node_unit.Outputs()[0].node_arg, output_type)) - return false; - - if (output_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8) { - LOGS_DEFAULT(VERBOSE) << "[" << op_type - << "] output type: [" << output_type - << "] is not supported for now"; - return false; - } - - // Check input scales and ZPs - if (!HasValidQuantizationScales(initializers, node_unit, {0, 1}, params, true /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0, 1}, true /* is_input */)) - return false; - - // Check output scale and ZP - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, false /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, false /* is_input */)) - return false; - } - return true; } @@ -382,7 +589,9 @@ class TransposeOpSupportChecker : public BaseOpSupportChecker { return ANEURALNETWORKS_FEATURE_LEVEL_2; } - bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; + bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const override; }; bool TransposeOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, @@ -401,7 +610,9 @@ bool TransposeOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& /* return true; } -bool TransposeOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { +bool TransposeOpSupportChecker::HasSupportedInputOutputsImpl( + const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, + const OpSupportCheckParams& /* params */) const { int32_t input_type; if (!GetType(node_unit.Inputs()[0].node_arg, input_type)) return false; @@ -561,8 +772,10 @@ class PoolOpSupportChecker : public BaseOpSupportChecker { return params.use_nchw ? ANEURALNETWORKS_FEATURE_LEVEL_3 : ANEURALNETWORKS_FEATURE_LEVEL_2; } - bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; - bool IsNodeUnitTypeSupported(const NodeUnit& /* node_unit */) const override { return true; } + bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const override; + bool IsNodeUnitTypeSupported(const NodeUnit& /* node_unit */) const override; static bool IsQuantizedOp(const NodeUnit& node_unit); }; @@ -579,12 +792,21 @@ class PoolOpSupportChecker : public BaseOpSupportChecker { }); } +bool PoolOpSupportChecker::IsNodeUnitTypeSupported(const NodeUnit& node_unit) const { + if (node_unit.UnitType() == NodeUnit::Type::QDQGroup) { + const auto quant_type = GetQuantizedOpType(node_unit); + return quant_type == QuantizedOpType::QDQAveragePool; + } + + return true; +} + /* static */ bool PoolOpSupportChecker::IsQuantizedOp(const NodeUnit& node_unit) { return IsQuantizedPool(GetQuantizedOpType(node_unit)); } bool PoolOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, - const OpSupportCheckParams& params) const { + const OpSupportCheckParams& /* params */) const { const auto& op_name = node_unit.Name(); const auto& op_type = node_unit.OpType(); const auto& inputs = node_unit.Inputs(); @@ -601,7 +823,8 @@ bool PoolOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initial } bool is_quant_pool = IsQuantizedOp(node_unit); - if (op_type == "AveragePool" || op_type == "MaxPool" || op_type == "QLinearAveragePool") { + bool is_average_pool = op_type == "AveragePool" || op_type == "QLinearAveragePool"; + if (is_average_pool || op_type == "MaxPool") { NodeAttrHelper helper(node_unit); const auto count_include_pad = helper.Get("count_include_pad", 0); @@ -642,20 +865,7 @@ bool PoolOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initial } // We need to check if we have valid scales and zero points for QLinearAveragePool - if (is_quant_pool) { - // Check input scales and ZPs - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, true /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, true /* is_input */)) - return false; - - // Check output scale and ZP - - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, false /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, false /* is_input */)) - return false; - + if (is_average_pool && is_quant_pool) { // NNAPI requires Quantized Average Pool has same scale and zero point for both input and output float input_scale = 0.0f; int32_t input_zp = 0; @@ -697,14 +907,23 @@ bool PoolOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initial return true; } -bool PoolOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { - bool is_max_pool = node_unit.OpType() == "MaxPool"; +bool PoolOpSupportChecker::HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const { + const auto& op_type = node_unit.OpType(); bool is_quant_pool = IsQuantizedOp(node_unit); - if (!is_max_pool && !is_quant_pool) - return BaseOpSupportChecker::HasSupportedInputsImpl(node_unit); + bool is_max_pool = op_type == "MaxPool"; + bool is_average_pool = op_type == "AveragePool" || op_type == "QLinearAveragePool"; + bool is_quant_average_pool = is_quant_pool && is_average_pool; + if (!is_max_pool && !is_quant_average_pool) + return BaseOpSupportChecker::HasSupportedInputOutputsImpl(initializers, node_unit, params); + + if (is_quant_average_pool) { + if (!IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Input)) + return false; - if (is_quant_pool) { - return HasValidUnaryOpQuantizedInputs(node_unit); + if (!IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Output)) + return false; } // is_max_pool @@ -742,7 +961,9 @@ class ConvOpSupportChecker : public BaseOpSupportChecker { return params.use_nchw ? ANEURALNETWORKS_FEATURE_LEVEL_3 : ANEURALNETWORKS_FEATURE_LEVEL_2; } - bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; + bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, + const OpSupportCheckParams& /* params */) const override; bool IsNodeUnitTypeSupported(const NodeUnit& /* node_unit */) const override { return true; } static bool IsQuantizedOp(const NodeUnit& node_unit); }; @@ -761,12 +982,20 @@ class ConvOpSupportChecker : public BaseOpSupportChecker { return IsQuantizedConv(GetQuantizedOpType(node_unit)); } -bool ConvOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { +bool ConvOpSupportChecker::HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const { if (!IsQuantizedOp(node_unit)) - return BaseOpSupportChecker::HasSupportedInputsImpl(node_unit); + return BaseOpSupportChecker::HasSupportedInputOutputsImpl(initializers, node_unit, params); // QLinearConv only supports input of uint8 for now - if (!HasValidBinaryOpQuantizedInputs(node_unit)) + if (!HasValidBinaryOpQuantizedInputTypes(node_unit)) + return false; + + if (!IsQuantizedIOSupported(initializers, node_unit, {0, 1}, params, IOKind::Input)) + return false; + + if (!IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Output)) return false; return true; @@ -813,34 +1042,10 @@ bool ConvOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initial } if (is_quant_conv) { - // For QLinearConv, we only support uint8 output now - int32_t output_type; - if (!GetType(node_unit.Outputs()[0].node_arg, output_type)) - return false; - - if (output_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8) { - LOGS_DEFAULT(VERBOSE) << "[" << op_type - << "] output type: [" << output_type - << "] is not supported for now"; - return false; - } - if (inputs.size() > 2 && !Contains(initializers, inputs[2].node_arg.Name())) { LOGS_DEFAULT(VERBOSE) << "Bias of QLinearConv must be known"; return false; } - - // Check input scales and ZPs - if (!HasValidQuantizationScales(initializers, node_unit, {0, 1}, params, true /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0, 1}, true /* is_input */)) - return false; - - // Check output scale and ZP - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, false /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, false /* is_input */)) - return false; } return true; @@ -931,16 +1136,26 @@ class GemmOpSupportChecker : public BaseOpSupportChecker { private: bool IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, const OpSupportCheckParams& params) const override; - bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; + bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, + const OpSupportCheckParams& /* params */) const override; int GetMinSupportedOpSet(const NodeUnit& node_unit) const override; }; -bool GemmOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { +bool GemmOpSupportChecker::HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const { if (node_unit.OpType() != "QLinearMatMul") - return BaseOpSupportChecker::HasSupportedInputsImpl(node_unit); + return BaseOpSupportChecker::HasSupportedInputOutputsImpl(initializers, node_unit, params); // QLinearMatMul - if (!HasValidBinaryOpQuantizedInputs(node_unit)) + if (!HasValidBinaryOpQuantizedInputTypes(node_unit)) + return false; + + if (!IsQuantizedIOSupported(initializers, node_unit, {0, 1}, params, IOKind::Input)) + return false; + + if (!IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Output)) return false; return true; @@ -1077,33 +1292,6 @@ bool GemmOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initial LOGS_DEFAULT(VERBOSE) << "B of MatMul must be known"; return false; } - - if (is_qlinear_matmul) { - // For QLinearMatMul, we only support uint8 output now - int32_t output_type; - if (!GetType(node_unit.Outputs()[0].node_arg, output_type)) - return false; - - if (output_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8) { - LOGS_DEFAULT(VERBOSE) << "[" << op_type - << "] output type: [" << output_type - << "] is not supported for now"; - return false; - } - - // All scale/zero points are initializer scalars - // Check input scales and ZPs - if (!HasValidQuantizationScales(initializers, node_unit, {0, 1}, params, true /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0, 1}, true /* is_input */)) - return false; - - // Check output scale and ZP - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, false /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, false /* is_input */)) - return false; - } } else { LOGS_DEFAULT(VERBOSE) << "GemmOpSupportChecker, unknown op: " << op_type; } @@ -1127,7 +1315,9 @@ class UnaryOpSupportChecker : public BaseOpSupportChecker { int32_t GetMinSupportedNNAPIFeatureLevel(const NodeUnit& /* node_unit */, const OpSupportCheckParams& params) const override; - bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; + bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, + const OpSupportCheckParams& /* params */) const override; int GetMinSupportedOpSet(const NodeUnit& node_unit) const override; @@ -1176,12 +1366,20 @@ int32_t UnaryOpSupportChecker::GetMinSupportedNNAPIFeatureLevel(const NodeUnit& return ANEURALNETWORKS_FEATURE_LEVEL_1; } -bool UnaryOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { +bool UnaryOpSupportChecker::HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const { // We only need to override input check for QLinearSigmoid if (node_unit.OpType() != "QLinearSigmoid") - return BaseOpSupportChecker::HasSupportedInputsImpl(node_unit); + return BaseOpSupportChecker::HasSupportedInputOutputsImpl(initializers, node_unit, params); - return HasValidUnaryOpQuantizedInputs(node_unit); + if (!IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Input)) + return false; + + if (!IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Output)) + return false; + + return true; } // All ops except "Sin" opset 5- uses consumed_inputs attribute which is not supported for now @@ -1195,24 +1393,11 @@ int UnaryOpSupportChecker::GetMinSupportedOpSet(const NodeUnit& node_unit) const } /* static */ bool UnaryOpSupportChecker::IsQuantizedOpSupported( - const InitializedTensorSet& initializers, const NodeUnit& node_unit, const OpSupportCheckParams& params) { + const InitializedTensorSet& initializers, const NodeUnit& node_unit, const OpSupportCheckParams& /* params */) { const auto& op_type = node_unit.OpType(); ORT_ENFORCE(op_type == "QLinearSigmoid"); - const auto& op_name = node_unit.Name(); - // Check input scales and ZPs - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, true /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, true /* is_input */)) - return false; - - // Check output scale and ZP - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, false /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, false /* is_input */)) - return false; - // NNAPI requires the scale be 1.f/256 and zero point to be 0 // See https://android.googlesource.com/platform/frameworks/ml/+/refs/heads/android10-c2f2-release/nn/common/operations/Activation.cpp#180 float output_scale = 0.0f; @@ -1249,7 +1434,9 @@ class ConcatOpSupportChecker : public BaseOpSupportChecker { bool IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, const OpSupportCheckParams& params) const override; - bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; + bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, + const OpSupportCheckParams& /* params */) const override; }; bool ConcatOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, @@ -1268,7 +1455,9 @@ bool ConcatOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& /* in return true; } -bool ConcatOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { +bool ConcatOpSupportChecker::HasSupportedInputOutputsImpl( + const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, + const OpSupportCheckParams& /* params */) const { int32_t input_type; if (!GetType(node_unit.Inputs()[0].node_arg, input_type)) return false; @@ -1331,37 +1520,17 @@ bool SqueezeOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& init class QuantizeLinearOpSupportChecker : public BaseOpSupportChecker { private: - bool IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, - const OpSupportCheckParams& params) const override; - int32_t GetMinSupportedNNAPIFeatureLevel(const NodeUnit& /* node_unit */, const OpSupportCheckParams& /* params */) const override { return ANEURALNETWORKS_FEATURE_LEVEL_3; } -}; -bool QuantizeLinearOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, - const OpSupportCheckParams& params) const { - int32_t output_type; - if (!GetType(node_unit.Outputs()[0].node_arg, output_type)) - return false; - - if (output_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8) { - LOGS_DEFAULT(VERBOSE) << "[" << node_unit.OpType() - << "] output type: [" << output_type - << "] is not supported for now"; - return false; + bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const override { + return IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Output); } - - // For QuantizeLinear only output is quantized - // Check output scale and ZP - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, false /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, false /* is_input */)) - return false; - - return true; -} +}; #pragma endregion @@ -1369,42 +1538,17 @@ bool QuantizeLinearOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSe class DequantizeLinearOpSupportChecker : public BaseOpSupportChecker { private: - bool IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, - const OpSupportCheckParams& params) const override; - int32_t GetMinSupportedNNAPIFeatureLevel(const NodeUnit& /* node_unit */, const OpSupportCheckParams& /* params */) const override { return ANEURALNETWORKS_FEATURE_LEVEL_1; } - bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; -}; -bool DequantizeLinearOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initializers, const NodeUnit& node_unit, - const OpSupportCheckParams& params) const { - // For DequantizeLinear only input is quantized - // Check input scale and ZP - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, true /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, true /* is_input */)) - return false; - - return true; -} - -bool DequantizeLinearOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { - int32_t input_type; - if (!GetType(node_unit.Inputs()[0].node_arg, input_type)) - return false; - - if (input_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8) { - LOGS_DEFAULT(VERBOSE) << "[" << node_unit.OpType() - << "] Input type: [" << input_type - << "] is not supported for now"; - return false; + bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const override { + return IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Input); } - - return true; -} +}; #pragma endregion @@ -1480,7 +1624,9 @@ class ResizeOpSupportChecker : public BaseOpSupportChecker { // We only support Resize opset 11+ here int GetMinSupportedOpSet(const NodeUnit& /* node_unit */) const override { return 11; } - bool HasSupportedInputsImpl(const NodeUnit& node_unit) const override; + bool HasSupportedInputOutputsImpl( + const InitializedTensorSet& /* initializers */, const NodeUnit& node_unit, + const OpSupportCheckParams& /* params */) const override; bool IsNodeUnitTypeSupported(const NodeUnit& /* node_unit */) const override { return true; } static bool IsQuantizedOp(const NodeUnit& node_unit) ORT_MUST_USE_RESULT; // TODO, see if we want to move this to BaseOpBuilder }; @@ -1609,33 +1755,6 @@ bool ResizeOpSupportChecker::IsOpSupportedImpl(const InitializedTensorSet& initi } } - if (IsQuantizedOp(node_unit)) { - // For QDQResize, we only support uint8 output now - // TODO, add int8 support to NNAPI, and maybe move all the output type check into a virtual function - // similar to HasSupportedInputsImpl - int32_t output_type; - if (!GetType(node_unit.Outputs()[0].node_arg, output_type)) - return false; - - if (output_type != ONNX_NAMESPACE::TensorProto_DataType_UINT8) { - LOGS_DEFAULT(VERBOSE) << "[Resize] output type: [" << output_type - << "] is not supported for now"; - return false; - } - - // Check input scales and ZPs - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, true /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, true /* is_input */)) - return false; - - // Check output scale and ZP - if (!HasValidQuantizationScales(initializers, node_unit, {0}, params, false /* is_input */)) - return false; - if (!HasValidQuantizationZeroPoints(initializers, node_unit, {0}, false /* is_input */)) - return false; - } - return true; } @@ -1653,7 +1772,9 @@ int32_t ResizeOpSupportChecker::GetMinSupportedNNAPIFeatureLevel(const NodeUnit& return ANEURALNETWORKS_FEATURE_LEVEL_2; } -bool ResizeOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) const { +bool ResizeOpSupportChecker::HasSupportedInputOutputsImpl( + const InitializedTensorSet& initializers, const NodeUnit& node_unit, + const OpSupportCheckParams& params) const { int32_t input_type; if (!GetType(node_unit.Inputs()[0].node_arg, input_type)) return false; @@ -1666,6 +1787,14 @@ bool ResizeOpSupportChecker::HasSupportedInputsImpl(const NodeUnit& node_unit) c return false; } + if (IsQuantizedOp(node_unit)) { + if (!IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Input)) + return false; + + if (!IsQuantizedIOSupported(initializers, node_unit, {0}, params, IOKind::Output)) + return false; + } + return true; } @@ -1870,6 +1999,7 @@ static OpSupportCheckerRegistrations CreateOpSupportCheckerRegistrations() { NNAPI_EP_ADD_SHARED_OP_SUPPORT_CHECKER("Mul", BinaryOpSupportChecker); NNAPI_EP_ADD_SHARED_OP_SUPPORT_CHECKER("Pow", BinaryOpSupportChecker); NNAPI_EP_ADD_SHARED_OP_SUPPORT_CHECKER("QLinearAdd", BinaryOpSupportChecker); + NNAPI_EP_ADD_SHARED_OP_SUPPORT_CHECKER("QLinearMul", BinaryOpSupportChecker); NNAPI_EP_ADD_SHARED_OP_SUPPORT_CHECKER("Sub", BinaryOpSupportChecker); } diff --git a/onnxruntime/test/contrib_ops/qlinear_binary_op_test.cc b/onnxruntime/test/contrib_ops/qlinear_binary_op_test.cc index 8dbc58c12ce74..c63d79806e777 100644 --- a/onnxruntime/test/contrib_ops/qlinear_binary_op_test.cc +++ b/onnxruntime/test/contrib_ops/qlinear_binary_op_test.cc @@ -43,61 +43,87 @@ void RunQLinearMathTestFromFloat( const quantization::Params& a_params, const std::vector& b, const std::vector& b_shape_origin, const quantization::Params& b_params, - const quantization::Params& c_params, - bool input_b_is_initializer = false, - bool all_initializer_scale_zero_point = false) { - size_t number_dims = std::max(a_shape_origin.size(), b_shape_origin.size()); - std::vector a_shape = PrefixingDims(a_shape_origin, number_dims); - std::vector b_shape = PrefixingDims(b_shape_origin, number_dims); - // calc broadcasting shaped - std::vector c_shape(number_dims, 1); - for (size_t axis = 0; axis < number_dims; ++axis) { - if (a_shape[axis] != b_shape[axis] && (a_shape[axis] != 1 && b_shape[axis] != 1)) { - ORT_THROW("Shapes can not be broadcasted"); + const quantization::Params& c_params) { + const auto run_test = [&](bool input_b_is_initializer, + bool all_initializer_scale_zero_point) { + size_t number_dims = std::max(a_shape_origin.size(), b_shape_origin.size()); + std::vector a_shape = PrefixingDims(a_shape_origin, number_dims); + std::vector b_shape = PrefixingDims(b_shape_origin, number_dims); + // calc broadcasting shaped + std::vector c_shape(number_dims, 1); + for (size_t axis = 0; axis < number_dims; ++axis) { + if (a_shape[axis] != b_shape[axis] && (a_shape[axis] != 1 && b_shape[axis] != 1)) { + ORT_THROW("Shapes can not be broadcasted"); + } + c_shape[axis] = std::max(a_shape[axis], b_shape[axis]); } - c_shape[axis] = std::max(a_shape[axis], b_shape[axis]); - } - std::vector a_strides, b_strides, c_strides; - auto c_size = CalcStrides(c_shape, c_strides, false); - auto a_size = CalcStrides(a_shape, a_strides, true); - auto b_size = CalcStrides(b_shape, b_strides, true); - if (a_size != static_cast(a.size()) || b_size != static_cast(b.size())) { - ORT_THROW("Input size not match input shape!"); - } - constexpr int qmax = std::numeric_limits::max(); - constexpr int qmin = std::numeric_limits::min(); - - OpTester test(op_name, 1, onnxruntime::kMSDomain); - std::vector a_quantized = QuantizeTestVector(a, a_params); - test.template AddInput("A", a_shape_origin, a_quantized); - test.AddInput("A_scale", {}, {a_params.scale}, all_initializer_scale_zero_point); - test.template AddInput("A_zero_point", {}, {a_params.zero_point}, all_initializer_scale_zero_point); - - std::vector b_quantized = QuantizeTestVector(b, b_params); - test.template AddInput("B", b_shape_origin, b_quantized, input_b_is_initializer); - test.AddInput("B_scale", {}, {b_params.scale}, all_initializer_scale_zero_point); - test.template AddInput("B_zero_point", {}, {b_params.zero_point}, all_initializer_scale_zero_point); - - test.AddInput("C_scale", {}, {c_params.scale}, all_initializer_scale_zero_point); - test.template AddInput("C_zero_point", {}, {c_params.zero_point}, all_initializer_scale_zero_point); - std::vector c(c_size); - for (int64_t offset = 0; offset < c_size; ++offset) { - int64_t remain = offset, a_offset = 0, b_offset = 0; - for (size_t axis = 0; axis < number_dims; ++axis) { - int64_t index = remain / c_strides[axis]; - remain = remain % c_strides[axis]; - a_offset += index * a_strides[axis]; - b_offset += index * b_strides[axis]; + std::vector a_strides, b_strides, c_strides; + auto c_size = CalcStrides(c_shape, c_strides, false); + auto a_size = CalcStrides(a_shape, a_strides, true); + auto b_size = CalcStrides(b_shape, b_strides, true); + if (a_size != static_cast(a.size()) || b_size != static_cast(b.size())) { + ORT_THROW("Input size not match input shape!"); + } + constexpr int qmax = std::numeric_limits::max(); + constexpr int qmin = std::numeric_limits::min(); + + OpTester test(op_name, 1, onnxruntime::kMSDomain); + std::vector a_quantized = QuantizeTestVector(a, a_params); + test.template AddInput("A", a_shape_origin, a_quantized); + test.AddInput("A_scale", {}, {a_params.scale}, all_initializer_scale_zero_point); + test.template AddInput("A_zero_point", {}, {a_params.zero_point}, all_initializer_scale_zero_point); + + std::vector b_quantized = QuantizeTestVector(b, b_params); + test.template AddInput("B", b_shape_origin, b_quantized, input_b_is_initializer); + test.AddInput("B_scale", {}, {b_params.scale}, all_initializer_scale_zero_point); + test.template AddInput("B_zero_point", {}, {b_params.zero_point}, all_initializer_scale_zero_point); + + test.AddInput("C_scale", {}, {c_params.scale}, all_initializer_scale_zero_point); + test.template AddInput("C_zero_point", {}, {c_params.zero_point}, all_initializer_scale_zero_point); + std::vector c(c_size); + for (int64_t offset = 0; offset < c_size; ++offset) { + int64_t remain = offset, a_offset = 0, b_offset = 0; + for (size_t axis = 0; axis < number_dims; ++axis) { + int64_t index = remain / c_strides[axis]; + remain = remain % c_strides[axis]; + a_offset += index * a_strides[axis]; + b_offset += index * b_strides[axis]; + } + + float a_dequantized = quantization::Dequantize(a_quantized[a_offset], a_params); + float b_dequantized = quantization::Dequantize(b_quantized[b_offset], b_params); + c[offset] = clampi(static_cast(std::nearbyintf(calc(a_dequantized, b_dequantized) / c_params.scale)) + c_params.zero_point, qmin, qmax); } - float a_dequantized = quantization::Dequantize(a_quantized[a_offset], a_params); - float b_dequantized = quantization::Dequantize(b_quantized[b_offset], b_params); - c[offset] = clampi(static_cast(std::nearbyintf(calc(a_dequantized, b_dequantized) / c_params.scale)) + c_params.zero_point, qmin, qmax); - } - test.template AddOutput("C", c_shape, c); + float abs_error = 0.0f; + + // For quantized models, NNAPI's rounding is different than CPU provider + // Sometimes the result is within +/-1 of result of CPU provider + // For ONNX, we use rounding to nearest ties to even. + // For NNAPI, it is using std::round which is HALF_AWAY_FROM_ZERO, see + // https://android.googlesource.com/platform/frameworks/ml/+/refs/heads/master/nn/common/operations/Quantize.cpp + // Use 1 as abs_error which is the smallest possbile for uint8_t + // + // NOTE, for now the tolerance will only apply if the NNAPI is actually used, + // if for any reason the execution falls back to CPU, we still expect an exact match + // See, 'void Check(...' in onnxruntime/test/providers/provider_test_utils.cc +#ifdef USE_NNAPI + abs_error = 1.0f; +#endif + + test.template AddOutput("C", c_shape, c, false /* sort_output */, 0.0f /* rel_error */, abs_error); + + test.Run(); + }; + + run_test(false /* input_b_is_initializer */, false /* all_initializer_scale_zero_point */); - test.Run(); + // NNAPI will require all the scales and zero points be initializers + run_test(false /* input_b_is_initializer */, true /* all_initializer_scale_zero_point */); + + // We also want to test the case input B is an initializer + run_test(true /* input_b_is_initializer */, true /* all_initializer_scale_zero_point */); } // total 32 + 31 elements to cover all path @@ -145,22 +171,6 @@ TEST(QLinearBinaryOpTest, AddU8VectorVectorFull) { A, {63}, A_params, B, {63}, B_params, C_params); - - // NNAPI will require all the scales and zero points be initializers - // We also want to test the case input B is an initializer - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - A, {63}, A_params, - B, {63}, B_params, - C_params, - false /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); - - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - A, {63}, A_params, - B, {63}, B_params, - C_params, - true /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); } TEST(QLinearBinaryOpTest, AddU8VectorVectorBroadcast) { @@ -180,22 +190,6 @@ TEST(QLinearBinaryOpTest, AddU8VectorVectorBroadcast) { A, {3, 3, 7}, A_params, B, {3, 1, 7}, B_params, C_params); - - // NNAPI will require all the scales and zero points be initializers - // We also want to test the case input B is an initializer - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - A, {3, 3, 7}, A_params, - B, {3, 1, 7}, B_params, - C_params, - false /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); - - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - A, {3, 3, 7}, A_params, - B, {3, 1, 7}, B_params, - C_params, - true /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); } TEST(QLinearBinaryOpTest, AddU8ScalarVectorFull) { @@ -212,22 +206,6 @@ TEST(QLinearBinaryOpTest, AddU8ScalarVectorFull) { B, {1}, B_params, A, {63}, A_params, C_params); - - // NNAPI will require all the scales and zero points be initializers - // We also want to test the case input B is an initializer - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - B, {1}, B_params, - A, {63}, A_params, - C_params, - false /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); - - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - B, {1}, B_params, - A, {63}, A_params, - C_params, - true /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); } TEST(QLinearBinaryOpTest, AddU8ScalarVectorBroadcast) { @@ -244,22 +222,6 @@ TEST(QLinearBinaryOpTest, AddU8ScalarVectorBroadcast) { B, {3, 1, 1}, B_params, A, {3, 7, 3}, A_params, C_params); - - // NNAPI will require all the scales and zero points be initializers - // We also want to test the case input B is an initializer - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - B, {3, 1, 1}, B_params, - A, {3, 7, 3}, A_params, - C_params, - false /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); - - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - B, {3, 1, 1}, B_params, - A, {3, 7, 3}, A_params, - C_params, - true /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); } TEST(QLinearBinaryOpTest, AddU8VectorScalarFull) { @@ -276,22 +238,6 @@ TEST(QLinearBinaryOpTest, AddU8VectorScalarFull) { A, {63}, A_params, B, {1}, B_params, C_params); - - // NNAPI will require all the scales and zero points be initializers - // We also want to test the case input B is an initializer - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - A, {63}, A_params, - B, {1}, B_params, - C_params, - false /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); - - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - A, {63}, A_params, - B, {1}, B_params, - C_params, - true /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); } TEST(QLinearBinaryOpTest, AddU8VectorScalarBroadcast) { @@ -308,22 +254,6 @@ TEST(QLinearBinaryOpTest, AddU8VectorScalarBroadcast) { A, {3, 7, 3}, A_params, B, {1, 1, 3}, B_params, C_params); - - // NNAPI will require all the scales and zero points be initializers - // We also want to test the case input B is an initializer - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - A, {3, 7, 3}, A_params, - B, {1, 1, 3}, B_params, - C_params, - false /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); - - RunQLinearMathTestFromFloat("QLinearAdd", add_function, - A, {3, 7, 3}, A_params, - B, {1, 1, 3}, B_params, - C_params, - true /* input_b_is_initializer */, - true /* all_initializer_scale_zero_point */); } TEST(QLinearBinaryOpTest, AddS8VectorVectorFull) { diff --git a/onnxruntime/test/optimizer/qdq_test_utils.h b/onnxruntime/test/optimizer/qdq_test_utils.h index 7a054c9a64352..fbbb0b8af1028 100644 --- a/onnxruntime/test/optimizer/qdq_test_utils.h +++ b/onnxruntime/test/optimizer/qdq_test_utils.h @@ -81,10 +81,27 @@ GetQDQTestCaseFn BuildQDQConvTestCase(const std::vector& input_shape, c template GetQDQTestCaseFn BuildQDQAveragePoolTestCase(const std::vector& input_shape) { return [input_shape](ModelTestBuilder& builder) { + +#ifdef USE_NNAPI // NNAPI require consistent scales/ZPs for DQ -> Pool -> Q + float dq_scale = 0.0038f; + float pool_output_scale = 0.0038f; + float q_scale = 0.0038f; + InputType dq_zp = std::numeric_limits::max() / 2; + InputType pool_output_zp = std::numeric_limits::max() / 2; + InputType q_zp = std::numeric_limits::max() / 2; +#else + float dq_scale = 0.0035f; + float pool_output_scale = 0.0038f; + float q_scale = 0.0039f; + InputType dq_zp = 7; + InputType pool_output_zp = std::numeric_limits::max() / 2; + InputType q_zp = std::numeric_limits::max() / 2; +#endif + auto* input_arg = builder.MakeInput(input_shape, -1.f, 1.f); auto* output_arg = builder.MakeOutput(); // add QDQ + AveragePool - auto* dq_output = AddQDQNodePair(builder, input_arg, .0035f, 7); + auto* dq_output = AddQDQNodePair(builder, input_arg, dq_scale, dq_zp); auto* averagepool_output = builder.MakeIntermediate(); Node& pool_node = builder.AddNode("AveragePool", {dq_output}, {averagepool_output}); std::vector pads((input_shape.size() - 2) * 2, 1); @@ -95,12 +112,12 @@ GetQDQTestCaseFn BuildQDQAveragePoolTestCase(const std::vector& input_s // add QDQ output auto* q_output = builder.MakeIntermediate(); builder.AddQuantizeLinearNode(averagepool_output, - .0038f, - std::numeric_limits::max() / 2, + pool_output_scale, + pool_output_zp, q_output); builder.AddDequantizeLinearNode(q_output, - .0039f, - std::numeric_limits::max() / 2, + q_scale, + q_zp, output_arg); }; } @@ -110,5 +127,65 @@ GetQDQTestCaseFn BuildQDQResizeTestCase(const std::vector& input_shape, const std::string& mode = "nearest", const std::string& coordinate_transformation_mode = "half_pixel"); +template +GetQDQTestCaseFn BuildBinaryOpTestCase(const std::vector& input_shape, + const std::string& op_type) { + return [input_shape, op_type](ModelTestBuilder& builder) { + auto* input1_arg = builder.MakeInput(input_shape, -1.f, 1.f); + auto* input2_arg = builder.MakeInput(input_shape, -1.f, 1.f); + auto* output_arg = builder.MakeOutput(); + +#ifdef USE_NNAPI // NNAPI require consistent scales for DQ -> bin_op_input and bin_op_output-> Q + float q_scale = 0.008f; + float op_input_scale = 0.008f; + float op_output_scale = 0.0076f; + float dq_scale = 0.0076f; +#else + float q_scale = 0.008f; + float op_input_scale = 0.0079f; + float op_output_scale = 0.0076f; + float dq_scale = 0.0078f; +#endif + + // add QDQ 1 + auto* q1_output = builder.MakeIntermediate(); + auto* dq1_output = builder.MakeIntermediate(); + builder.AddQuantizeLinearNode(input1_arg, + q_scale, + std::numeric_limits::max() / 2, + q1_output); + builder.AddDequantizeLinearNode(q1_output, + op_input_scale, + std::numeric_limits::max() / 2, + dq1_output); + + // add QDQ 2 + auto* q2_output = builder.MakeIntermediate(); + auto* dq2_output = builder.MakeIntermediate(); + builder.AddQuantizeLinearNode(input2_arg, + q_scale, + std::numeric_limits::max() / 2, + q2_output); + builder.AddDequantizeLinearNode(q2_output, + op_input_scale, + std::numeric_limits::max() / 2, + dq2_output); + + // add binary operator + auto* binary_op_output = builder.MakeIntermediate(); + builder.AddNode(op_type, {dq1_output, dq2_output}, {binary_op_output}); + + // add QDQ output + auto* q3_output = builder.MakeIntermediate(); + builder.AddQuantizeLinearNode(binary_op_output, + op_output_scale, + std::numeric_limits::max() / 2, + q3_output); + builder.AddDequantizeLinearNode(q3_output, + dq_scale, + std::numeric_limits::max() / 2, + output_arg); + }; +} } // namespace test } // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/test/optimizer/qdq_transformer_test.cc b/onnxruntime/test/optimizer/qdq_transformer_test.cc index 7ea62a2817100..73b07e8adbd6b 100644 --- a/onnxruntime/test/optimizer/qdq_transformer_test.cc +++ b/onnxruntime/test/optimizer/qdq_transformer_test.cc @@ -39,7 +39,7 @@ namespace test { template void QDQTransformerConvTests() { auto test_case = [&](const std::vector& input_shape, const std::vector& weights_shape) { - auto check_conv_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); if constexpr (std::is_same::value && std::is_same::value && @@ -57,7 +57,7 @@ void QDQTransformerConvTests() { }; TransformerTester(BuildQDQConvTestCase(input_shape, weights_shape), - check_conv_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -136,7 +136,7 @@ TEST(QDQTransformerTests, ConvMaxPoolReshape_UInt8) { builder.AddQuantizeLinearNode(reshape_output, .0039f, 135, output_arg); }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QLinearConv"], 1); EXPECT_EQ(op_to_count["MaxPool"], 1); @@ -146,7 +146,7 @@ TEST(QDQTransformerTests, ConvMaxPoolReshape_UInt8) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, opset_version); @@ -197,7 +197,7 @@ TEST(QDQTransformerTests, ConvMaxPoolReshape_Int8) { } }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QLinearConv"], 1); EXPECT_EQ(op_to_count["MaxPool"], 1); @@ -206,7 +206,7 @@ TEST(QDQTransformerTests, ConvMaxPoolReshape_Int8) { EXPECT_EQ(op_to_count["DequantizeLinear"], 0); }; - TransformerTester(build_test_case, check_mp_reshape_graph, TransformerLevel::Level1, TransformerLevel::Level2); + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; test_case({1, 12, 37}, {32, 12, 5}); @@ -217,7 +217,7 @@ TEST(QDQTransformerTests, ConvMaxPoolReshape_Int8) { template void QDQTransformerAveragePoolTests() { auto test_case = [&](const std::vector& input_shape) { - auto check_averagepool_op_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); if constexpr (std::is_same::value) { EXPECT_EQ(op_to_count["com.microsoft.QLinearAveragePool"], 1); @@ -233,7 +233,7 @@ void QDQTransformerAveragePoolTests() { }; TransformerTester(BuildQDQAveragePoolTestCase(input_shape), - check_averagepool_op_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -266,52 +266,7 @@ TEST(QDQTransformerTests, AveragePool_U8S8) { template void QDQTransformerBinaryOpTests(const std::string& op_type) { auto test_case = [&](const std::vector& input_shape) { - auto build_test_case = [&](ModelTestBuilder& builder) { - auto* input1_arg = builder.MakeInput(input_shape, -1.f, 1.f); - auto* input2_arg = builder.MakeInput(input_shape, -1.f, 1.f); - auto* output_arg = builder.MakeOutput(); - - // add QDQ 1 - auto* q1_output = builder.MakeIntermediate(); - auto* dq1_output = builder.MakeIntermediate(); - builder.AddQuantizeLinearNode(input1_arg, - .004f, - std::numeric_limits::max() / 2, - q1_output); - builder.AddDequantizeLinearNode(q1_output, - .0039f, - std::numeric_limits::max() / 2, - dq1_output); - - // add QDQ 2 - auto* q2_output = builder.MakeIntermediate(); - auto* dq2_output = builder.MakeIntermediate(); - builder.AddQuantizeLinearNode(input2_arg, - .004f, - std::numeric_limits::max() / 2, - q2_output); - builder.AddDequantizeLinearNode(q2_output, - .0039f, - std::numeric_limits::max() / 2, - dq2_output); - - // add binary operator - auto* binary_op_output = builder.MakeIntermediate(); - builder.AddNode(op_type, {dq1_output, dq2_output}, {binary_op_output}); - - // add QDQ output - auto* q3_output = builder.MakeIntermediate(); - builder.AddQuantizeLinearNode(binary_op_output, - .0038f, - std::numeric_limits::max() / 2, - q3_output); - builder.AddDequantizeLinearNode(q3_output, - .0039f, - std::numeric_limits::max() / 2, - output_arg); - }; - - auto check_binary_op_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); if (std::is_same::value && std::is_same::value) { @@ -327,8 +282,8 @@ void QDQTransformerBinaryOpTests(const std::string& op_type) { } }; - TransformerTester(build_test_case, - check_binary_op_graph, + TransformerTester(BuildBinaryOpTestCase(input_shape, op_type), + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -426,7 +381,7 @@ void QDQTransformerMatMulTests(bool has_output_q) { } }; - auto check_binary_op_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); if (has_output_q) { if constexpr (std::is_same::value && @@ -459,7 +414,7 @@ void QDQTransformerMatMulTests(bool has_output_q) { }; TransformerTester(build_test_case, - check_binary_op_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -696,14 +651,14 @@ TEST(QDQTransformerTests, Gather) { builder.AddQuantizeLinearNode(gather_output, .003f, 1, output_arg); }; - auto check_matmul_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["Gather"], 1); EXPECT_EQ(op_to_count["QuantizeLinear"], 0); EXPECT_EQ(op_to_count["DequantizeLinear"], 0); }; - TransformerTester(build_test_case, check_matmul_graph, TransformerLevel::Level1, TransformerLevel::Level2); + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; test_case({12, 37}, {24, 12}); @@ -728,14 +683,14 @@ TEST(QDQTransformerTests, Transpose) { builder.AddQuantizeLinearNode(transpose_output, .003f, 1, output_arg); }; - auto check_matmul_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["Transpose"], 1); EXPECT_EQ(op_to_count["QuantizeLinear"], 0); EXPECT_EQ(op_to_count["DequantizeLinear"], 0); }; - TransformerTester(build_test_case, check_matmul_graph, TransformerLevel::Level1, TransformerLevel::Level2); + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; test_case({2, 13, 12, 37}, {0, 3, 1, 2}); @@ -760,13 +715,13 @@ TEST(QDQTransformerTests, Transpose_No_Fusion) { builder.AddQuantizeLinearNode(transpose_output, .003f, 1, output_arg); }; - auto check_matmul_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QuantizeLinear"], 1); EXPECT_EQ(op_to_count["DequantizeLinear"], 1); }; - TransformerTester(build_test_case, check_matmul_graph, TransformerLevel::Level1, TransformerLevel::Level2); + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; test_case({2, 13, 12, 37}, {0, 3, 1, 2}); @@ -775,7 +730,7 @@ TEST(QDQTransformerTests, Transpose_No_Fusion) { TEST(QDQTransformerTests, Resize) { auto test_case = [&](const std::vector& input1_shape, const std::vector& sizes_shape) { - auto check_resize_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["Resize"], 1); EXPECT_EQ(op_to_count["QuantizeLinear"], 0); @@ -783,7 +738,7 @@ TEST(QDQTransformerTests, Resize) { }; TransformerTester(BuildQDQResizeTestCase(input1_shape, sizes_shape), - check_resize_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -828,7 +783,7 @@ TEST(QDQTransformerTests, Resize_No_Fusion) { builder.AddQuantizeLinearNode(resize_output, .003f, 1, output_arg); }; - auto check_qdq_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["Resize"], 1); EXPECT_EQ(op_to_count["Concat"], 1); @@ -836,7 +791,7 @@ TEST(QDQTransformerTests, Resize_No_Fusion) { EXPECT_EQ(op_to_count["DequantizeLinear"], 1); }; - TransformerTester(build_test_case, check_qdq_graph, + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -867,7 +822,7 @@ TEST(QDQTransformerTests, ResizeReshape) { builder.AddNode("Reshape", {qdq_resize_output, reshape_shape}, {output_arg}); }; - auto check_qdq_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["Resize"], 1); EXPECT_EQ(op_to_count["Reshape"], 1); @@ -875,7 +830,7 @@ TEST(QDQTransformerTests, ResizeReshape) { EXPECT_EQ(op_to_count["DequantizeLinear"], 1); }; - TransformerTester(build_test_case, check_qdq_graph, + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -905,13 +860,13 @@ TEST(QDQTransformerTests, ArgMax) { argmax_node.AddAttribute("select_last_index", static_cast(select_last_index)); }; - auto check_argmax_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["ArgMax"], 1); EXPECT_EQ(op_to_count["DequantizeLinear"], 0); }; - TransformerTester(build_test_case, check_argmax_graph, + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2, /* opset_version */ 13); @@ -939,14 +894,14 @@ TEST(QDQTransformerTests, QLinearMatMul) { builder.AddQuantizeLinearNode(matmul_output, .0039f, 135, output_arg); }; - auto check_matmul_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QLinearMatMul"], 1); EXPECT_EQ(op_to_count["QuantizeLinear"], 2); EXPECT_EQ(op_to_count["DequantizeLinear"], 0); }; - TransformerTester(build_test_case, check_matmul_graph, TransformerLevel::Level1, TransformerLevel::Level2); + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; test_case({12, 37}, {37, 12}); @@ -970,7 +925,7 @@ TEST(QDQTransformerTests, MatMul_No_Fusion) { builder.AddQuantizeLinearNode(matmul_output, .0039f, 135, output_arg); }; - auto check_matmul_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["MatMul"], 1); EXPECT_EQ(op_to_count["QLinearMatMul"], 0); @@ -978,7 +933,7 @@ TEST(QDQTransformerTests, MatMul_No_Fusion) { EXPECT_EQ(op_to_count["DequantizeLinear"], 1); }; - TransformerTester(build_test_case, check_matmul_graph, TransformerLevel::Level1, TransformerLevel::Level2); + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; test_case({12, 37}, {37, 12}); @@ -1006,7 +961,7 @@ TEST(QDQTransformerTests, MatMul_1st_Input_Int8) { builder.AddQuantizeLinearNode(matmul_output, .0039f, 135, output_arg); }; - auto check_matmul_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["MatMul"], 1); EXPECT_EQ(op_to_count["QLinearMatMul"], 0); @@ -1014,7 +969,7 @@ TEST(QDQTransformerTests, MatMul_1st_Input_Int8) { EXPECT_EQ(op_to_count["DequantizeLinear"], 2); }; - TransformerTester(build_test_case, check_matmul_graph, TransformerLevel::Level1, TransformerLevel::Level2); + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; test_case({12, 37}, {37, 12}); @@ -1043,7 +998,7 @@ TEST(QDQTransformerTests, MatMulIntegerToFloat) { builder.AddNode("MatMul", {dq_output_1, dq_output_2}, {output_arg}); }; - auto check_matmul_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["com.microsoft.MatMulIntegerToFloat"], 1); EXPECT_EQ(op_to_count["QuantizeLinear"], 0); @@ -1051,7 +1006,7 @@ TEST(QDQTransformerTests, MatMulIntegerToFloat) { }; TransformerTester(build_test_case, - check_matmul_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -1086,7 +1041,7 @@ TEST(QDQTransformerTests, ConvRelu) { builder.AddQuantizeLinearNode(relu_output, .0039f, is_zp_zero ? 0 : 1, output_arg); }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); if (is_zp_zero) { EXPECT_EQ(op_to_count["QLinearConv"], 1); @@ -1104,7 +1059,7 @@ TEST(QDQTransformerTests, ConvRelu) { } }; - TransformerTester(build_test_case, check_mp_reshape_graph, TransformerLevel::Level1, TransformerLevel::Level2); + TransformerTester(build_test_case, check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; test_case({1, 12, 37}, {32, 12, 5}, true); @@ -1150,7 +1105,7 @@ TEST(QDQTransformerTests, ConvAveragePoolReshape_UInt8) { builder.AddDequantizeLinearNode(q_output, .0035f, 135, output_arg); }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QLinearConv"], 1); EXPECT_EQ(op_to_count["com.microsoft.QLinearAveragePool"], 1); @@ -1160,7 +1115,7 @@ TEST(QDQTransformerTests, ConvAveragePoolReshape_UInt8) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -1213,7 +1168,7 @@ TEST(QDQTransformerTests, ConvAveragePoolReshape_Int8) { } }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QLinearConv"], 1); EXPECT_EQ(op_to_count["com.microsoft.QLinearAveragePool"], 1); @@ -1223,7 +1178,7 @@ TEST(QDQTransformerTests, ConvAveragePoolReshape_Int8) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -1277,7 +1232,7 @@ TEST(QDQTransformerTests, ConvAveragePoolReshape_Int8_Fail) { } }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["Conv"], 1); EXPECT_EQ(op_to_count["QLinearConv"], 0); @@ -1288,7 +1243,7 @@ TEST(QDQTransformerTests, ConvAveragePoolReshape_Int8_Fail) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -1325,7 +1280,7 @@ void QDQTransformerLeakyReluTests() { output_arg); }; - auto check_binary_op_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); if constexpr (std::is_same::value) { EXPECT_EQ(op_to_count["com.microsoft.QLinearLeakyRelu"], 1); @@ -1341,7 +1296,7 @@ void QDQTransformerLeakyReluTests() { }; TransformerTester(build_test_case, - check_binary_op_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -1401,7 +1356,7 @@ TEST(QDQTransformerTests, ConvTranspose_QBackward) { } }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QLinearConv"], 1); EXPECT_EQ(op_to_count["Transpose"], 1); @@ -1410,7 +1365,7 @@ TEST(QDQTransformerTests, ConvTranspose_QBackward) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -1461,7 +1416,7 @@ TEST(QDQTransformerTests, QBackward_MutilpleSteps) { } }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QLinearConv"], 1); EXPECT_EQ(op_to_count["MaxPool"], 1); @@ -1472,7 +1427,7 @@ TEST(QDQTransformerTests, QBackward_MutilpleSteps) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -1512,7 +1467,7 @@ TEST(QDQTransformerTests, ConvTranspose_DQForward) { } }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QLinearConv"], 1); EXPECT_EQ(op_to_count["Transpose"], 1); @@ -1521,7 +1476,7 @@ TEST(QDQTransformerTests, ConvTranspose_DQForward) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -1572,7 +1527,7 @@ TEST(QDQTransformerTests, DQForward_MutilpleSteps) { } }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QLinearConv"], 1); EXPECT_EQ(op_to_count["MaxPool"], 1); @@ -1583,7 +1538,7 @@ TEST(QDQTransformerTests, DQForward_MutilpleSteps) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -1704,7 +1659,7 @@ TEST(QDQTransformerTests, Concat) { } }; - auto check_mp_reshape_graph = [&input_shapes, &has_input_float, &has_input_int8, &has_output_int8](InferenceSessionWrapper& session) { + auto check_graph = [&input_shapes, &has_input_float, &has_input_int8, &has_output_int8](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); if (has_input_float || has_input_int8 || has_output_int8) { EXPECT_EQ(op_to_count["com.microsoft.QLinearConcat"], 0); @@ -1716,7 +1671,7 @@ TEST(QDQTransformerTests, Concat) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2, 12 /*opset_version*/, @@ -1763,7 +1718,7 @@ TEST(QDQTransformerTests, QDQPropagation_QDQCancelOut) { builder.AddNode("Reshape", {maxpool_output, reshape_shape}, {output_arg}); }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["MaxPool"], 1); EXPECT_EQ(op_to_count["Reshape"], 1); @@ -1773,7 +1728,7 @@ TEST(QDQTransformerTests, QDQPropagation_QDQCancelOut) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -1799,7 +1754,7 @@ TEST(QDQTransformerTests, QDQPropagation_QDQ_CancelOut_More) { builder.AddQuantizeLinearNode(reshape_output, same_scale ? .004f : .0039f, same_zp ? 129 : 128, output_arg); }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["Reshape"], 1); EXPECT_EQ(op_to_count["QuantizeLinear"], same_scale && same_zp ? 1 : 2); @@ -1807,7 +1762,7 @@ TEST(QDQTransformerTests, QDQPropagation_QDQ_CancelOut_More) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -1833,7 +1788,7 @@ TEST(QDQTransformerTests, QDQPropagation_Q_No_Parent) { builder.AddQuantizeLinearNode(transpose_output, .0035f, 135, output_arg); }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { GraphViewer graph_viewer(session.GetGraph()); const auto& node_topology_list = graph_viewer.GetNodesInTopologicalOrder(); EXPECT_EQ(graph_viewer.GetNode(node_topology_list[0])->OpType(), "QuantizeLinear"); @@ -1841,7 +1796,7 @@ TEST(QDQTransformerTests, QDQPropagation_Q_No_Parent) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -1866,7 +1821,7 @@ TEST(QDQTransformerTests, QDQPropagation_DQ_No_Children) { transpose_node.AddAttribute("perm", perms); }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); GraphViewer graph_viewer(session.GetGraph()); const auto& node_topology_list = graph_viewer.GetNodesInTopologicalOrder(); @@ -1875,7 +1830,7 @@ TEST(QDQTransformerTests, QDQPropagation_DQ_No_Children) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -1902,7 +1857,7 @@ TEST(QDQTransformerTests, QDQPropagation_Per_Layer_No_Propagation) { transpose_node.AddAttribute("perm", perms); }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); GraphViewer graph_viewer(session.GetGraph()); const auto& node_topology_list = graph_viewer.GetNodesInTopologicalOrder(); @@ -1911,7 +1866,7 @@ TEST(QDQTransformerTests, QDQPropagation_Per_Layer_No_Propagation) { }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; @@ -1935,14 +1890,14 @@ TEST(QDQTransformerTests, QDQPropagation_DQ_Q) { builder.AddQuantizeLinearNode(dq_output, .0035f, 135, output_arg); }; - auto check_mp_reshape_graph = [&](InferenceSessionWrapper& session) { + auto check_graph = [&](InferenceSessionWrapper& session) { auto op_to_count = CountOpsInGraph(session.GetGraph()); EXPECT_EQ(op_to_count["QuantizeLinear"], 1); EXPECT_EQ(op_to_count["DequantizeLinear"], 1); }; TransformerTester(build_test_case, - check_mp_reshape_graph, + check_graph, TransformerLevel::Level1, TransformerLevel::Level2); }; diff --git a/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc b/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc index 4316ff7a51d9e..834f0a7378275 100644 --- a/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc +++ b/onnxruntime/test/providers/nnapi/nnapi_basic_test.cc @@ -271,7 +271,9 @@ TEST(NnapiExecutionProviderTest, TestNoShapeInputModel) { << "No node should be taken by the NNAPI EP"; } -static void RunQDQModelTest(const GetQDQTestCaseFn& build_test_case, const char* test_description) { +static void RunQDQModelTest(const GetQDQTestCaseFn& build_test_case, + const char* test_description, + const EPVerificationParams& params = EPVerificationParams()) { onnxruntime::Model model(test_description, false, DefaultLoggingManager().DefaultLogger()); Graph& graph = model.MainGraph(); ModelTestBuilder helper(graph); @@ -286,7 +288,7 @@ static void RunQDQModelTest(const GetQDQTestCaseFn& build_test_case, const char* #if defined(__ANDROID__) RunAndVerifyOutputsWithEP(model_data, "NnapiExecutionProviderTest.TestQDQModel", std::make_unique(0), - helper.feeds_); + helper.feeds_, params); #else // test load only SessionOptions so; @@ -306,7 +308,8 @@ TEST(NnapiExecutionProviderTest, TestQDQConv) { uint8_t /* OutputType */>( {1, 1, 5, 5} /*input_shape*/, {1, 1, 3, 3} /*weights_shape*/), - "nnapi_qdq_test_graph_conv"); + "nnapi_qdq_test_graph_conv", + {true /* verify_entire_graph_use_ep */}); } TEST(NnapiExecutionProviderTest, TestQDQResize) { @@ -316,14 +319,44 @@ TEST(NnapiExecutionProviderTest, TestQDQResize) { {1, 3, 32, 32} /* sizes_data */, "linear" /* mode */, "asymmetric" /* coordinate_transformation_mode */), - "nnapi_qdq_test_graph_resize"); + "nnapi_qdq_test_graph_resize", + {true /* verify_entire_graph_use_ep */}); } TEST(NnapiExecutionProviderTest, TestQDQAveragePool) { + // NNAPI use different rounding, which may cause ~1% difference in the result RunQDQModelTest(BuildQDQAveragePoolTestCase( {1, 3, 32, 32} /* input_shape */), - "nnapi_qdq_test_graph_averagepool"); + "nnapi_qdq_test_graph_averagepool", + { + true /* verify_entire_graph_use_ep */, + 1e-2f /* fp32_abs_err */, + }); +} + +TEST(NnapiExecutionProviderTest, TestQDQAdd) { + RunQDQModelTest(BuildBinaryOpTestCase( + {1, 23, 13, 13} /* input_shape */, + "Add" /* op_type */), + "nnapi_qdq_test_graph_add", + {true /* verify_entire_graph_use_ep */}); +} + +TEST(NnapiExecutionProviderTest, TestQDQMul) { + // NNAPI use different rounding, which may cause ~1% difference in the result + RunQDQModelTest(BuildBinaryOpTestCase( + {1, 23, 13, 13} /* input_shape */, + "Mul" /* op_type */), + "nnapi_qdq_test_graph_mul", + { + true /* verify_entire_graph_use_ep */, + 1e-2f /* fp32_abs_err */, + }); } #endif // !(ORT_MINIMAL_BUILD) diff --git a/onnxruntime/test/util/include/test_utils.h b/onnxruntime/test/util/include/test_utils.h index 60d2a3e8caba2..50859d826fa2d 100644 --- a/onnxruntime/test/util/include/test_utils.h +++ b/onnxruntime/test/util/include/test_utils.h @@ -15,6 +15,18 @@ class Graph; namespace test { +// struct to hold some verification params for RunAndVerifyOutputsWithEP +struct EPVerificationParams { + // Verify the entire graph is taken by the EP + // if this is set to false, then will verify that at least one node is assigned to 'execution_provider' + bool verify_entire_graph_use_ep{false}; + + // Some EP may use different rounding than ORT CPU EP, which may cause a bigger abs error than + // the default of 1e-5f, especially for scenarios such as [Q -> Quantized op -> DQ] + // Set this only if this is necessary + float fp32_abs_err = 1e-5f; +}; + // return number of nodes in the Graph and any subgraphs that are assigned to the specified execution provider int CountAssignedNodes(const Graph& current_graph, const std::string& ep_type); @@ -23,13 +35,14 @@ int CountAssignedNodes(const Graph& current_graph, const std::string& ep_type); void RunAndVerifyOutputsWithEP(const ORTCHAR_T* model_path, const char* log_id, std::unique_ptr execution_provider, - const NameMLValMap& feeds); + const NameMLValMap& feeds, + const EPVerificationParams& params = EPVerificationParams()); // helper function that takes in model_data -// used in nnapi qdq model tests void RunAndVerifyOutputsWithEP(const std::string& model_data, const char* log_id, std::unique_ptr execution_provider, - const NameMLValMap& feeds); + const NameMLValMap& feeds, + const EPVerificationParams& params = EPVerificationParams()); } // namespace test } // namespace onnxruntime diff --git a/onnxruntime/test/util/test_utils.cc b/onnxruntime/test/util/test_utils.cc index 220b1342f12d9..b069b08810cb8 100644 --- a/onnxruntime/test/util/test_utils.cc +++ b/onnxruntime/test/util/test_utils.cc @@ -18,7 +18,8 @@ namespace onnxruntime { namespace test { static void VerifyOutputs(const std::vector& output_names, const std::vector& expected_fetches, - const std::vector& fetches) { + const std::vector& fetches, + const EPVerificationParams& params) { ASSERT_EQ(expected_fetches.size(), fetches.size()); for (size_t i = 0, end = expected_fetches.size(); i < end; ++i) { @@ -40,10 +41,8 @@ static void VerifyOutputs(const std::vector& output_names, << " mismatch for " << output_names[i]; break; case ONNX_NAMESPACE::TensorProto_DataType_FLOAT: { - constexpr float abs_err = 1e-5f; - EXPECT_THAT(ltensor.DataAsSpan(), - ::testing::Pointwise(::testing::FloatNear(abs_err), rtensor.DataAsSpan())); + ::testing::Pointwise(::testing::FloatNear(params.fp32_abs_err), rtensor.DataAsSpan())); break; } default: @@ -72,16 +71,18 @@ int CountAssignedNodes(const Graph& current_graph, const std::string& ep_type) { void RunAndVerifyOutputsWithEP(const ORTCHAR_T* model_path, const char* log_id, std::unique_ptr execution_provider, - const NameMLValMap& feeds) { + const NameMLValMap& feeds, + const EPVerificationParams& params) { // read raw data from model provided by the model_path std::ifstream stream(model_path, std::ios::in | std::ios::binary); std::string model_data((std::istreambuf_iterator(stream)), std::istreambuf_iterator()); - RunAndVerifyOutputsWithEP(model_data, log_id, std::move(execution_provider), feeds); + RunAndVerifyOutputsWithEP(model_data, log_id, std::move(execution_provider), feeds, params); } void RunAndVerifyOutputsWithEP(const std::string& model_data, const char* log_id, std::unique_ptr execution_provider, - const NameMLValMap& feeds) { + const NameMLValMap& feeds, + const EPVerificationParams& params) { SessionOptions so; so.session_logid = log_id; RunOptions run_options; @@ -122,12 +123,17 @@ void RunAndVerifyOutputsWithEP(const std::string& model_data, const char* log_id // make sure that some nodes are assigned to the EP, otherwise this test is pointless... const auto& graph2 = session_object2.GetGraph(); auto ep_nodes = CountAssignedNodes(graph2, provider_type); - ASSERT_GT(ep_nodes, 0) << "No nodes were assigned to " << provider_type; + if (params.verify_entire_graph_use_ep) { + // Verify the entire graph is assigned to the EP + ASSERT_EQ(ep_nodes, graph2.NumberOfNodes()) << "Not all nodes were assigned to " << provider_type; + } else { + ASSERT_GT(ep_nodes, 0) << "No nodes were assigned to " << provider_type; + } // Run with EP and verify the result std::vector fetches; ASSERT_STATUS_OK(session_object2.Run(run_options, feeds, output_names, &fetches)); - VerifyOutputs(output_names, expected_fetches, fetches); + VerifyOutputs(output_names, expected_fetches, fetches, params); } #if !defined(DISABLE_SPARSE_TENSORS) From 399ffc970068724407e8225e20907f69ea917603 Mon Sep 17 00:00:00 2001 From: ytaous <4484531+ytaous@users.noreply.github.com> Date: Tue, 8 Feb 2022 22:06:23 -0800 Subject: [PATCH 33/56] Fix Windows GPU CI (#10499) * fix build * fix win build Co-authored-by: Ethan Tao --- onnxruntime/core/providers/cuda/cudnn_common.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/onnxruntime/core/providers/cuda/cudnn_common.cc b/onnxruntime/core/providers/cuda/cudnn_common.cc index 0b2543ec153e1..dbc45f13e1615 100644 --- a/onnxruntime/core/providers/cuda/cudnn_common.cc +++ b/onnxruntime/core/providers/cuda/cudnn_common.cc @@ -137,8 +137,15 @@ cudnnDataType_t CudnnTensor::GetDataType() { } template <> + cudnnDataType_t CudnnTensor::GetDataType() { +#if CUDNN_VERSION >= 8100 return CUDNN_DATA_BFLOAT16; +#else + ORT_THROW("cuDNN version is too low to support BFloat16."); + // Not reachable but GCC complains + return CUDNN_DATA_FLOAT; +#endif } template <> From 7a2bf3c24c7ba74e04b8bfcd0d1ece969c35b562 Mon Sep 17 00:00:00 2001 From: Changming Sun Date: Wed, 9 Feb 2022 09:31:58 -0800 Subject: [PATCH 34/56] Reorganize contrib op schemas (#10494) --- cmake/onnxruntime_graph.cmake | 1 + .../core/graph/contrib_ops/bert_defs.cc | 571 +++ .../core/graph/contrib_ops/contrib_defs.cc | 4111 ++++++----------- .../core/graph/contrib_ops/contrib_defs.h | 21 +- onnxruntime/core/graph/contrib_ops/ms_opset.h | 144 + .../core/graph/contrib_ops/ms_schema.h | 15 + .../graph/contrib_ops/nhwc_schema_defs.cc | 503 +- .../contrib_ops/onnx_deprecated_operators.cc | 500 ++ .../graph/contrib_ops/onnx_deprecated_opset.h | 62 + .../graph/contrib_ops/quantization_defs.cc | 94 +- .../graph/contrib_ops/quantization_defs.h | 1 - onnxruntime/core/session/environment.cc | 7 + 12 files changed, 3068 insertions(+), 2962 deletions(-) create mode 100644 onnxruntime/core/graph/contrib_ops/bert_defs.cc create mode 100644 onnxruntime/core/graph/contrib_ops/ms_opset.h create mode 100644 onnxruntime/core/graph/contrib_ops/ms_schema.h create mode 100644 onnxruntime/core/graph/contrib_ops/onnx_deprecated_operators.cc create mode 100644 onnxruntime/core/graph/contrib_ops/onnx_deprecated_opset.h diff --git a/cmake/onnxruntime_graph.cmake b/cmake/onnxruntime_graph.cmake index db09ae7a36394..d98cee372c5aa 100644 --- a/cmake/onnxruntime_graph.cmake +++ b/cmake/onnxruntime_graph.cmake @@ -17,6 +17,7 @@ if (onnxruntime_MINIMAL_BUILD) "${ONNXRUNTIME_ROOT}/core/graph/schema_registry.cc" "${ONNXRUNTIME_ROOT}/core/graph/contrib_ops/*defs.h" "${ONNXRUNTIME_ROOT}/core/graph/contrib_ops/*defs.cc" + "${ONNXRUNTIME_ROOT}/core/graph/contrib_ops/onnx_deprecated_operators.cc" "${ONNXRUNTIME_ROOT}/core/graph/contrib_ops/onnx_function_util.h" "${ONNXRUNTIME_ROOT}/core/graph/contrib_ops/onnx_function_util.cc" ) diff --git a/onnxruntime/core/graph/contrib_ops/bert_defs.cc b/onnxruntime/core/graph/contrib_ops/bert_defs.cc new file mode 100644 index 0000000000000..c9f12a7a1edb5 --- /dev/null +++ b/onnxruntime/core/graph/contrib_ops/bert_defs.cc @@ -0,0 +1,571 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "core/graph/constants.h" +#include "core/graph/contrib_ops/contrib_defs.h" +#include "core/graph/contrib_ops/quantization_defs.h" +#include "core/graph/contrib_ops/onnx_function_util.h" + +using namespace ::ONNX_NAMESPACE; + +namespace onnxruntime { +namespace contrib { +void embedLayerNormalizationShapeInference(InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 2, 0); + propagateElemTypeFromInputToOutput(ctx, 0, 1); + if (!hasInputShape(ctx, 0)) { + // TODO(kreeger): In this case update the output to (?, ?, hidden_size). + return; + } + + auto& input_ids_shape = getInputShape(ctx, 0); + auto& input_ids_dims = input_ids_shape.dim(); + + // Note that both batch size and sequence length could be symbolic. + // So we only check dimension size here. + if (input_ids_dims.size() != 2) { + fail_shape_inference("input_ids shall be 2 dimensions"); + } + + bool has_segment = hasInputShape(ctx, 1); + if (has_segment) { + // Ensure that segment_ids has the same shape. + auto& segment_ids_shape = getInputShape(ctx, 1); + auto& segment_ids_dims = segment_ids_shape.dim(); + if (segment_ids_dims.size() != 2) { + fail_shape_inference("segment_ids input shall be 2 dimensions"); + } + } + + // get hidden_size from the last dimension of embedding + auto& word_embedding_shape = getInputShape(ctx, 2); + auto& word_embedding_dims = word_embedding_shape.dim(); + if (word_embedding_dims.size() != 2 || + !word_embedding_dims[1].has_dim_value() || + word_embedding_shape.dim(1).dim_value() <= 0) { + fail_shape_inference("word_embedding should have 2 dimensions and dimension size is known."); + } + int64_t hidden_size = word_embedding_shape.dim(1).dim_value(); + + // Ensure that all embeddings + the gamma/beta tensors have the same hidden_size: + auto& position_embedding_shape = getInputShape(ctx, 3); + auto& position_embedding_dims = position_embedding_shape.dim(); + if (position_embedding_dims.size() != 2 || + !position_embedding_dims[1].has_dim_value() || + position_embedding_shape.dim(1).dim_value() != hidden_size) { + fail_shape_inference( + "position_embedding should have 2 dimensions, dimension size known, " + "and same hidden size as word_embedding."); + } + + if (has_segment) { + auto& segment_embedding_shape = getInputShape(ctx, 4); + auto& segment_embedding_dims = segment_embedding_shape.dim(); + if (segment_embedding_dims.size() != 2 || + !segment_embedding_dims[1].has_dim_value() || + segment_embedding_shape.dim(1).dim_value() != hidden_size) { + fail_shape_inference( + "segment_embedding should have 2 dimensions, dimension size known, " + "and same hidden size as word_embedding."); + } + } + + auto& gamma_shape = getInputShape(ctx, 5); + auto& gamma_dims = gamma_shape.dim(); + if (gamma_dims.size() != 1 || + !gamma_dims[0].has_dim_value() || + gamma_shape.dim(0).dim_value() != hidden_size) { + fail_shape_inference( + "gamma should have 2 dimension, dimension size known, " + "and same hidden size as word_embedding."); + } + + auto& beta_shape = getInputShape(ctx, 6); + auto& beta_dims = gamma_shape.dim(); + if (beta_dims.size() != 1 || + !beta_dims[0].has_dim_value() || + beta_shape.dim(0).dim_value() != hidden_size) { + fail_shape_inference( + "beta should have 1 dimension, dimension size known, " + "and same hidden size as word_embedding."); + } + + // input shape is (batch_size, sequence_length), output shape is (batch_size, sequence_length, hidden_size) + ONNX_NAMESPACE::TensorShapeProto output_shape; + *output_shape.add_dim() = input_ids_dims[0]; + *output_shape.add_dim() = input_ids_dims[1]; + + output_shape.add_dim(); + output_shape.mutable_dim(2)->set_dim_value(hidden_size); + + updateOutputShape(ctx, 0, output_shape); + + // mask_index shape is (batch_size) + ONNX_NAMESPACE::TensorShapeProto mask_index_shape; + *mask_index_shape.add_dim() = input_ids_dims[0]; + updateOutputShape(ctx, 1, mask_index_shape); + + if (ctx.getNumOutputs() > 2) { + updateOutputShape(ctx, 2, output_shape); + propagateElemTypeFromInputToOutput(ctx, 0, 2); + } +} +void AttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx, int past_input_index) { + // Type inference + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 2, 0); + if (ctx.getNumOutputs() > 1) { + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 2, 1); + } + + // Shape inference + if (hasInputShape(ctx, 0) && hasInputShape(ctx, 2)) { + auto& input_shape = getInputShape(ctx, 0); + auto& input_dims = input_shape.dim(); + if (input_dims.size() != 3) { + fail_shape_inference("Inputs 0 shall be 3 dimensions"); + } + + auto& bias_shape = getInputShape(ctx, 2); + auto& bias_dims = bias_shape.dim(); + if (bias_dims.size() != 1) { + fail_shape_inference("Invalid bias shape"); + } + + std::vector qkv_hidden_sizes; + getRepeatedAttribute(ctx, "qkv_hidden_sizes", qkv_hidden_sizes); + + int64_t output_hidden_size; + if (qkv_hidden_sizes.size() != 0) { + if (qkv_hidden_sizes.size() != 3) { + fail_shape_inference("qkv_hidden_sizes should have 3 elements") + } + output_hidden_size = qkv_hidden_sizes[2]; + } else { + output_hidden_size = bias_shape.dim(0).dim_value() / 3; + } + + ONNX_NAMESPACE::TensorShapeProto output_shape; + for (auto& dim : input_dims) { + *output_shape.add_dim() = dim; + } + + output_shape.mutable_dim(2)->set_dim_value(output_hidden_size); + updateOutputShape(ctx, 0, output_shape); + + // TODO does the extra output need any changes? + if (ctx.getNumOutputs() > 1) { + if (hasInputShape(ctx, past_input_index)) { + auto& past_shape = getInputShape(ctx, past_input_index); + auto& past_dims = past_shape.dim(); + if (past_dims.size() != 5) { + fail_shape_inference("Inputs 4 shall be 5 dimensions"); + } + + if (past_dims[3].has_dim_value() && input_dims[1].has_dim_value()) { + auto all_sequence_length = past_shape.dim(3).dim_value() + input_shape.dim(1).dim_value(); + + ONNX_NAMESPACE::TensorShapeProto present_shape; + for (auto& dim : past_dims) { + *present_shape.add_dim() = dim; + } + present_shape.mutable_dim(3)->set_dim_value(all_sequence_length); + + updateOutputShape(ctx, 1, present_shape); + } + } + } + } +} + +void DecoderAttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx) { + // Type inference + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); + if (ctx.getNumOutputs() > 1) { + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 1); + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 2); + } + // Shape inference + if (hasInputShape(ctx, 0)) { + auto& query_shape = getInputShape(ctx, 0); + updateOutputShape(ctx, 0, query_shape); + } + if (ctx.getNumOutputs() > 1) { + if (hasInputShape(ctx, 6) && hasInputShape(ctx, 7)) { + auto& cache_shape = getInputShape(ctx, 6); + auto& cache_dims = cache_shape.dim(); + if (cache_dims.size() != 4) { + fail_shape_inference("key and value cache shall be 4 dimensions"); + } + // has_dim_value() will return false if value is dynamic + if (cache_dims[0].has_dim_value() && + cache_dims[1].has_dim_value() && + cache_dims[2].has_dim_value() && + cache_dims[3].has_dim_value()) { + ONNX_NAMESPACE::TensorShapeProto new_cache_shape; + *new_cache_shape.add_dim() = cache_shape.dim(0); + *new_cache_shape.add_dim() = cache_shape.dim(1); + new_cache_shape.add_dim(); + *new_cache_shape.add_dim() = cache_shape.dim(3); + + updateOutputShape(ctx, 1, new_cache_shape); + updateOutputShape(ctx, 2, new_cache_shape); + } + } + } +} + +constexpr const char* Attention_ver1_doc = R"DOC( +Multi-Head Self Attention that can be either unidirectional (like GPT-2) or bidirectional (like BERT). +The mask_index input is optional. Besides raw attention mask with shape (batch_size, past_sequence_length + sequence_length) +or (batch_size, sequence_length, past_sequence_length + sequence_length) with value 0 for masked and 1 otherwise, +we also support other two formats: When input has right-side padding, mask_index is one dimension with shape (batch_size), +where value of each element is the end position, or valid length of actual sequence excluding padding. When input has +left-side padding, mask_index has shape (2 * batch_size), where the values are the exclusive end positions followed by +the inclusive start positions. When unidirectional is 1, and each token only attend to previous tokens. For GPT-2, both past +and present state are optional. Present state could appear in output even when past state is not in input. +)DOC"; + +ONNX_MS_OPERATOR_SET_SCHEMA(Attention, 1, + OpSchema() + .SetDoc(Attention_ver1_doc) + .Attr("num_heads", "Number of attention heads", AttributeProto::INT) + .Attr("unidirectional", + "Whether every token can only attend to previous tokens. Default value is 0.", + AttributeProto::INT, + static_cast(0)) + .Attr("qkv_hidden_sizes", + "Hidden layer sizes of Q, K, V paths in Attention", + AttributeProto::INTS, + OPTIONAL_VALUE) + .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, input_hidden_size)", "T") + .Input(1, "weight", "2D input tensor with shape (input_hidden_size, 3 * hidden_size), where hidden_size = num_heads * head_size", "T") + .Input(2, "bias", "1D input tensor with shape (3 * hidden_size)", "T") + .Input(3, "mask_index", + "Attention mask with shape (batch_size, 1, max_sequence_length, max_sequence_length), (batch_size, past_sequence_length + sequence_length)" + "or (batch_size, sequence_length, past_sequence_length + sequence_length), or index with shape (batch_size) or (2 * batch_size).", + "M", OpSchema::Optional) + .Input(4, "past", "past state for key and value with shape (2, batch_size, num_heads, past_sequence_length, head_size).", "T", OpSchema::Optional) + .Input(5, "extra_add", "additional add to QxK' with shape (batch_size, num_heads, sequence_length, sequence_length).", "T", OpSchema::Optional) + .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Output(1, "present", "present state for key and value with shape (2, batch_size, num_heads, past_sequence_length + sequence_length, head_size)", "T", OpSchema::Optional) + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") + .TypeConstraint("M", {"tensor(int32)"}, "Constrain mask index to integer types") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + constexpr int past_input_index = 4; + AttentionTypeAndShapeInference(ctx, past_input_index); + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(QAttention, 1, + OpSchema() + .SetDoc("Quantization of Multi-Head Self Attention.") + .Attr("num_heads", "Number of attention heads", AttributeProto::INT) + .Attr("unidirectional", + "Whether every token can only attend to previous tokens. Default value is 0.", + AttributeProto::INT, + static_cast(0)) + .Input( + 0, + "input", + "3D input tensor with shape (batch_size, sequence_length, input_hidden_size)", + "T1") + .Input( + 1, + "weight", + "2D input tensor with shape (input_hidden_size, 3 * hidden_size), hidden_size = num_heads * head_size", + "T2") + .Input( + 2, + "bias", + "1D input tensor with shape (3 * hidden_size)", + "T3") + .Input( + 3, + "input_scale", + "scale of quantized input tensor. It's a scalar, which means a per-tensor/layer quantization.", + "T3") + .Input( + 4, + "weight_scale", + "scale of weight scale. It's a scalar or a 1D tensor, which means a per-tensor/per-column quantization." + "Its size should be 3 * hidden_size if it is per-column quantization", + "T3") + .Input( + 5, + "mask_index", + "Attention mask index with shape (batch_size)", + "T4", + OpSchema::Optional) + .Input( + 6, + "input_zero_point", + "zero point of quantized input tensor.It's a scalar, which means a per-tensor/layer quantization.", + "T1", + OpSchema::Optional) + .Input( + 7, + "weight_zero_point", + "zero point of quantized weight tensor. It's a scalar or a 1D tensor, which means a per-tensor/per-column quantization." + "Its size should be 3 * hidden_size if it is per-column quantization", + "T2", + OpSchema::Optional) + .Input( + 8, + "past", + "past state for key and value with shape (2, batch_size, num_heads, past_sequence_length, head_size).", + "T3", + OpSchema::Optional) + .Output( + 0, + "output", + "3D output tensor with shape (batch_size, sequence_length, hidden_size)", + "T3") + .Output( + 1, + "present", + "present state for key and value with shape (2, batch_size, num_heads, past_sequence_length + sequence_length, head_size)", + "T3", + OpSchema::Optional) + .TypeConstraint("T1", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") + .TypeConstraint("T2", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") + .TypeConstraint("T3", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") + .TypeConstraint("T4", {"tensor(int32)"}, "Constrain mask index to integer types") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + constexpr int past_input_index = 8; + + AttentionTypeAndShapeInference(ctx, past_input_index); + })); + +constexpr const char* Longformer_Attention_doc = R"DOC( +Longformer Self Attention with a local context and a global context. Tokens attend locally: Each token +attends to its W previous tokens and W succeding tokens with W being the window length. A selected few tokens +attend globally to all other tokens. + +The attention mask is of shape (batch_size, sequence_length), where sequence_length is a multiple of 2W after padding. +Mask value < 0 (like -10000.0) means the token is masked, 0 otherwise. + +Global attention flags have value 1 for the tokens attend globally and 0 otherwise. +)DOC"; + +ONNX_MS_OPERATOR_SET_SCHEMA(LongformerAttention, 1, + OpSchema() + .SetDomain(kMSDomain) + .SinceVersion(1) + .SetDoc(Longformer_Attention_doc) + .Attr("num_heads", "Number of attention heads", AttributeProto::INT) + .Attr("window", "One sided attention windows length W, or half of total window length", AttributeProto::INT) + .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size), hidden_size = num_heads * head_size", "T") + .Input(1, "weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T") + .Input(2, "bias", "1D input tensor with shape (3 * hidden_size)", "T") + .Input(3, "mask", "Attention mask with shape (batch_size, sequence_length)", "T") + .Input(4, "global_weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T") + .Input(5, "global_bias", "1D input tensor with shape (3 * hidden_size)", "T") + .Input(6, "global", "Global attention flags with shape (batch_size, sequence_length)", "G") + .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") + .TypeConstraint("G", {"tensor(int32)"}, "Constrain to integer types") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +constexpr const char* Decoder_Attention_doc = R"DOC( +This DecoderAttention supports self attention and cross attention, key and value cache, and key_padding_mask. The attention mask is not support at the moment. +Some boolean parameters are passed by runtime input for generic purpose +)DOC"; + +ONNX_MS_OPERATOR_SET_SCHEMA(DecoderAttention, 1, + OpSchema() + .SetDoc(Decoder_Attention_doc) + .Attr("num_heads", "Number of attention heads", AttributeProto::INT) + .Input(0, "query", "3D input tensor with shape (sequence_length, batch_size, hidden_size), hidden_size = num_heads * head_size", "T") + .Input(1, "key", "3D input tensor with shape (total_sequence_length, batch_size, hidden_size)", "T") + .Input(2, "q_weight", "2D input tensor with shape (hidden_size, hidden_size)", "T") + .Input(3, "kv_weight", "2D input tensor with shape (hidden_size, 2 * hidden_size)", "T") + .Input(4, "bias", "1D input tensor with shape (3 * hidden_size)", "T") + .Input(5, "key_padding_mask", "2D input tensor with shape (batch_size, total_sequence_length)", "B", OpSchema::Optional) + .Input(6, "key_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross + .Input(7, "value_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross + .Input(8, "static_kv", "If static_kv = true, cross-attention; else self-attention", "B") + .Input(9, "use_past", "If use_past = true, use cache; else no cache", "B") + .Input(10, "has_layer_state", "If has_layer_state = true, layer_state = {} or [a,b]; else layer_state = None", "B") + .Input(11, "has_key_padding_mask", "has_key_padding_mask or not", "B") + .Output(0, "output", "3D output tensor with shape (sequence_length, batch_size, hidden_size)", "T") + .Output(1, "new_key_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross + .Output(2, "new_value_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float and float16 tensors.") + .TypeConstraint("B", {"tensor(bool)"}, "Constrain key_padding_mask to bool tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + DecoderAttentionTypeAndShapeInference(ctx); + })); + +constexpr const char* EmbedLayerNormalization_ver1_doc = R"DOC( +EmbedLayerNormalization is the fusion of embedding layer in BERT model, with optional mask processing. +The embedding layer takes input_ids (word IDs) and segment_ids (sentence IDs) to look up word_embedding, position_embedding, +and segment_emedding; the embeddings are added then applied layer normalization using gamma and beta tensors. +The last input mask is optional. If mask is provided, mask index (that is position of first 0 in mask, or number of words) +will be calculated.)DOC"; + +ONNX_MS_OPERATOR_SET_SCHEMA(EmbedLayerNormalization, 1, + OpSchema() + .SetDoc(EmbedLayerNormalization_ver1_doc) + .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultEmbedLayerNormEpsilon) + .Input(0, "input_ids", "2D words IDs with shape (batch_size, sequence_length)", "T1") + .Input(1, "segment_ids", "2D segment IDs with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) + .Input(2, "word_embedding", "2D with shape (,hidden_size)", "T") + .Input(3, "position_embedding", "2D with shape (, hidden_size)", "T") + .Input(4, "segment_embedding", "2D with shape (, hidden_size)", "T", OpSchema::Optional) + .Input(5, "gamma", "1D gamma tensor for layer normalization with shape (hidden_size)", "T") + .Input(6, "beta", "1D beta tensor for layer normalization with shape (hidden_size)", "T") + .Input(7, "mask", "2D attention mask with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) + .Input(8, "position_ids", "2D position ids with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) + .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Output(1, "mask_index", "1D mask_index tensor with shape (batch_size)", "T1") + .Output(2, "embedding_sum", "sum of word_embedding and position_embedding without layer normalization", "T", OpSchema::Optional) + .TypeConstraint("T1", {"tensor(int32)"}, "Constrain input and output integer tensors types") + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output float tensors types.") + .TypeAndShapeInferenceFunction(embedLayerNormalizationShapeInference)); + +constexpr const char* QEmbedLayerNormalization_ver1_doc = R"DOC( +QEmbedLayerNormalization is the quantized fusion of embedding layer in BERT model, with optional mask processing. +The embedding layer takes input_ids (word IDs) and segment_ids (sentence IDs) to look up word_embedding, position_embedding, +and segment_emedding; the embeddings are added then applied layer normalization using gamma and beta tensors. The input_ids +and segment_ids remain int32. All embeddings, gamma, and beta tensors are converted to int8/uint8. The last input mask is optional. +If mask is provided, mask index (that is position of first 0 in mask, or number of words will be calculated.)DOC"; + +ONNX_MS_OPERATOR_SET_SCHEMA(QEmbedLayerNormalization, 1, + OpSchema() + .SetSupportLevel(OpSchema::SupportType::EXPERIMENTAL) + .SetDoc(QEmbedLayerNormalization_ver1_doc) + .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultEmbedLayerNormEpsilon) + .Input(0, "input_ids", "2D words IDs with shape (batch_size, sequence_length)", "T1") + .Input(1, "segment_ids", "2D segment IDs with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) + .Input(2, "word_embedding_quant", "2D with shape (,hidden_size)", "T2") + .Input(3, "position_embedding_quant", "2D with shape (, hidden_size)", "T2") + .Input(4, "segment_embedding", "2D with shape (, hidden_size)", "T2", OpSchema::Optional) + .Input(5, "gamma_quant", "1D gamma tensor for layer normalization with shape (hidden_size)", "T2") + .Input(6, "beta_quant", "1D beta tensor for layer normalization with shape (hidden_size)", "T2") + .Input(7, "mask", "Mask", "T1", OpSchema::Optional) + .Input(8, "word_embedding_scale", "Scale for word embeddings", "T") + .Input(9, "position_embedding_scale", "Scale for position embeddings", "T") + .Input(10, "segment_embedding_scale", "Scale for segment embeddings", "T", OpSchema::Optional) + .Input(11, "gamma_scale", "Scale for 1D gamma tensor", "T") + .Input(12, "beta_scale", "Scale for 1D beta tensor", "T") + .Input(13, "word_embedding_zero_point", "Zero point for word embeddings", "T2") + .Input(14, "position_embedding_zero_point", "Zero point for position embeddings", "T2") + .Input(15, "segment_embedding_zero_point", "Zero Point for segment embeddings", "T2", OpSchema::Optional) + .Input(16, "gamma_zero_point", "Zero Point for 1D gamma tensor", "T2") + .Input(17, "beta_zero_point", "Zero Point for 1D beta tensor", "T2") + .Output(0, "layernorm_out", "LayerNorm Output", "T") + .Output(1, "mask_index_out", "Mask Index Output", "T1") + .TypeConstraint("T1", {"tensor(int32)"}, "Constrain mask index to integer types") + .TypeConstraint("T2", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") + .TypeConstraint("T", {"tensor(float)"}, "Constrain input and output types to float32 tensors.") + .TypeAndShapeInferenceFunction(embedLayerNormalizationShapeInference)); + +constexpr const char* FastGelu_ver1_doc = R"DOC( +GELU (Gaussian Error Linear Unit) approximation: Y=0.5*X*(1+tanh(0.797885*X+0.035677*X*X*X)) with an optional input of bias that will be added to X before GELU.)DOC"; + +ONNX_MS_OPERATOR_SET_SCHEMA(FastGelu, 1, + OpSchema() + .SetDoc(FastGelu_ver1_doc) + .Input(0, "X", "input tensor", "T") + .Input(1, "bias", "bias tensor", "T", OpSchema::Optional) + .Output(0, "Y", "output tensor", "T") + .TypeConstraint("T", {"tensor(float)", "tensor(float16)", "tensor(bfloat16)"}, "Constrain input and output types to float or half tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput) + .SetContextDependentFunctionBodyBuilder([](const FunctionBodyBuildContext& ctx, const OpSchema& schema, FunctionProto& functionProto) { + // fastgelu(x) = + auto* tp = ctx.getInputType(0); + if ((tp == nullptr) || (!tp->has_tensor_type())) + return false; + auto elem_type = tp->tensor_type().elem_type(); + + // Optional input 1 indicates a bias to be added to input 0. + auto hasBias = ctx.hasInput(1); + + FunctionBuilder builder(functionProto); + builder + .AddOpset("", 13) + .Const("a", 0.5, elem_type) + .Const("b", 0.797885, elem_type) + .Const("c", 0.035677, elem_type) + .Const("one", 1.0, elem_type) + .Add(hasBias ? "X_bias = Add (X, bias)" : "X_bias = Identity (X)") + .Add(R"( + T1 = Mul (X_bias, X_bias) + T2 = Mul (c, T1) + T3 = Add (b, T2) + T4 = Mul (X_bias, T3) + T5 = Tanh (T4) + T6 = Add (one, T5) + T7 = Mul (X_bias, T6) + Y = Mul (a, T7) + )"); + + schema.BuildFunction(functionProto); + return true; + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(SkipLayerNormalization, 1, + OpSchema() + .SetDoc("Skip and Layer Normalization Fusion") + .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultSkipLayerNormEpsilon) + .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Input(1, "skip", "3D skip tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Input(2, "gamma", "1D input tensor with shape (hidden_size)", "T") + .Input(3, "beta", "1D skip tensor with shape (hidden_size", "T", OpSchema::Optional) + .Input(4, "bias", "1D bias tensor with shape (hidden_size", "T", OpSchema::Optional) + .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") + .Output(1, "mean", "Saved mean used during training to speed up gradient computation", "U", OpSchema::Optional) + .Output(2, "inv_std_var", "Saved inverse standard variance used during training to speed up gradient computation.", "U", OpSchema::Optional) + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.") + .TypeConstraint("U", {"tensor(float)"}, "Constrain mean and inv_std_var to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +constexpr const char* NGramRepeatBlock_ver1_doc = R"DOC( +Enforce no repetition of n-grams. Scores are set to `-inf` for tokens that form a repeated n-gram if added to the back of the input_ids. +)DOC"; + +ONNX_MS_OPERATOR_SET_SCHEMA(NGramRepeatBlock, 1, + OpSchema().SetDoc(NGramRepeatBlock_ver1_doc).Attr("ngram_size", "The NGram size.", AttributeProto::INT).Input(0, "input_ids", "2D input tensor with shape (batch_size, sequence_length)", "Tid").Input(1, "scores", "2D input tensor with shape (batch_size, vocab_size)", "T").Output(0, "scores_out", "2D output tensor with shape (batch_size, vocab_size)", "T").TypeConstraint("Tid", {"tensor(int64)"}, "Constrain indices to integer types").TypeConstraint("T", {"tensor(float)"}, "Constrain scores input and output types to float tensors.").TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 1, 0); + if (!hasInputShape(ctx, 1)) { + return; + } + propagateShapeFromInputToOutput(ctx, 1, 0); + })); + +constexpr const char* BifurcationDetector_ver1_doc = R"DOC( +Component for aggressive decoding. Find the bifurcation index of predicted tokens, between source tokens, +starting from previous suffix match index, and predicted tokens. +Concat predicted tokens, starting from bifurcation index, to the back +of current tokens. This forms the output tokens. +Detect suffix match index in source tokens, between source tokens and output tokens. +Detection is based on finding the appearances of last n-gram in output tokens +in source tokens. +A match is considered found if source tokens contain a single matching n-gram. +Return the index of the start of the n-gram in source tokens. +No matching if found if src tokens contain multiple or zero matching n-grams. Return -1. +)DOC"; + +ONNX_MS_OPERATOR_SET_SCHEMA(BifurcationDetector, 1, + OpSchema() + .SetDoc(BifurcationDetector_ver1_doc) + .Attr("min_ngram_size", "The minimum NGram size for suffix matching.", AttributeProto::INT, static_cast(1)) + .Attr("max_ngram_size", "The maximum NGram size for suffix matching.", AttributeProto::INT, static_cast(3)) + .Input(0, "src_tokens", "Encoder input ids.", "T") + .Input(1, "cur_tokens", "Decoder input ids.", "T") + .Input(2, "prev_suffix_match_idx", "Previous suffix match index", "T") + .Input(3, "pred_tokens", "Predicted token ids from aggressive decoding", "T", OpSchema::Optional) + .Output(0, "tokens", "Decoder input ids after merging predicted tokens", "T") + .Output(1, "suffix_match_idx", "new suffix match index", "T") + .TypeConstraint("T", {"tensor(int64)"}, "Constrain to integer types.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 1, 0); + propagateElemTypeFromInputToOutput(ctx, 2, 1); + if (hasInputShape(ctx, 2)) { + propagateShapeFromInputToOutput(ctx, 2, 1); + } + // output tokens lengths is dynamic as it depends on the bifurcation index of predicted tokens and source tokens, + // and current tokens length. + // tokens_length = cur_tokens_length + bifurcation_index + 1. + })); +} +} // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/core/graph/contrib_ops/contrib_defs.cc b/onnxruntime/core/graph/contrib_ops/contrib_defs.cc index 52e076cdf66b0..aa218bb3f9041 100644 --- a/onnxruntime/core/graph/contrib_ops/contrib_defs.cc +++ b/onnxruntime/core/graph/contrib_ops/contrib_defs.cc @@ -11,7 +11,6 @@ #include "onnx/defs/shape_inference.h" #include "onnx/defs/tensor_proto_util.h" -#include "core/framework/tensorprotoutils.h" #include "core/graph/constants.h" #include "core/graph/contrib_ops/attn_lstm_schema_defs.h" #include "core/graph/contrib_ops/range_schema_defs.h" @@ -166,107 +165,6 @@ void convTransposeWithDynamicPadsShapeInference(InferenceContext& ctx) { return; } } - -void embedLayerNormalizationShapeInference(InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 2, 0); - propagateElemTypeFromInputToOutput(ctx, 0, 1); - if (!hasInputShape(ctx, 0)) { - // TODO(kreeger): In this case update the output to (?, ?, hidden_size). - return; - } - - auto& input_ids_shape = getInputShape(ctx, 0); - auto& input_ids_dims = input_ids_shape.dim(); - - // Note that both batch size and sequence length could be symbolic. - // So we only check dimension size here. - if (input_ids_dims.size() != 2) { - fail_shape_inference("input_ids shall be 2 dimensions"); - } - - bool has_segment = hasInputShape(ctx, 1); - if (has_segment) { - // Ensure that segment_ids has the same shape. - auto& segment_ids_shape = getInputShape(ctx, 1); - auto& segment_ids_dims = segment_ids_shape.dim(); - if (segment_ids_dims.size() != 2) { - fail_shape_inference("segment_ids input shall be 2 dimensions"); - } - } - - // get hidden_size from the last dimension of embedding - auto& word_embedding_shape = getInputShape(ctx, 2); - auto& word_embedding_dims = word_embedding_shape.dim(); - if (word_embedding_dims.size() != 2 || - !word_embedding_dims[1].has_dim_value() || - word_embedding_shape.dim(1).dim_value() <= 0) { - fail_shape_inference("word_embedding should have 2 dimensions and dimension size is known."); - } - int64_t hidden_size = word_embedding_shape.dim(1).dim_value(); - - // Ensure that all embeddings + the gamma/beta tensors have the same hidden_size: - auto& position_embedding_shape = getInputShape(ctx, 3); - auto& position_embedding_dims = position_embedding_shape.dim(); - if (position_embedding_dims.size() != 2 || - !position_embedding_dims[1].has_dim_value() || - position_embedding_shape.dim(1).dim_value() != hidden_size) { - fail_shape_inference( - "position_embedding should have 2 dimensions, dimension size known, " - "and same hidden size as word_embedding."); - } - - if (has_segment) { - auto& segment_embedding_shape = getInputShape(ctx, 4); - auto& segment_embedding_dims = segment_embedding_shape.dim(); - if (segment_embedding_dims.size() != 2 || - !segment_embedding_dims[1].has_dim_value() || - segment_embedding_shape.dim(1).dim_value() != hidden_size) { - fail_shape_inference( - "segment_embedding should have 2 dimensions, dimension size known, " - "and same hidden size as word_embedding."); - } - } - - auto& gamma_shape = getInputShape(ctx, 5); - auto& gamma_dims = gamma_shape.dim(); - if (gamma_dims.size() != 1 || - !gamma_dims[0].has_dim_value() || - gamma_shape.dim(0).dim_value() != hidden_size) { - fail_shape_inference( - "gamma should have 2 dimension, dimension size known, " - "and same hidden size as word_embedding."); - } - - auto& beta_shape = getInputShape(ctx, 6); - auto& beta_dims = gamma_shape.dim(); - if (beta_dims.size() != 1 || - !beta_dims[0].has_dim_value() || - beta_shape.dim(0).dim_value() != hidden_size) { - fail_shape_inference( - "beta should have 1 dimension, dimension size known, " - "and same hidden size as word_embedding."); - } - - // input shape is (batch_size, sequence_length), output shape is (batch_size, sequence_length, hidden_size) - ONNX_NAMESPACE::TensorShapeProto output_shape; - *output_shape.add_dim() = input_ids_dims[0]; - *output_shape.add_dim() = input_ids_dims[1]; - - output_shape.add_dim(); - output_shape.mutable_dim(2)->set_dim_value(hidden_size); - - updateOutputShape(ctx, 0, output_shape); - - // mask_index shape is (batch_size) - ONNX_NAMESPACE::TensorShapeProto mask_index_shape; - *mask_index_shape.add_dim() = input_ids_dims[0]; - updateOutputShape(ctx, 1, mask_index_shape); - - if (ctx.getNumOutputs() > 2) { - updateOutputShape(ctx, 2, output_shape); - propagateElemTypeFromInputToOutput(ctx, 0, 2); - } -} } // namespace ONNX_NAMESPACE namespace onnxruntime { @@ -472,110 +370,6 @@ void sparseCompatibleMatmulShapeInference( updateOutputShape(ctx, 0, resultShape, default_tensor_type); } -void AttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx, int past_input_index) { - // Type inference - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 2, 0); - if (ctx.getNumOutputs() > 1) { - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 2, 1); - } - - // Shape inference - if (hasInputShape(ctx, 0) && hasInputShape(ctx, 2)) { - auto& input_shape = getInputShape(ctx, 0); - auto& input_dims = input_shape.dim(); - if (input_dims.size() != 3) { - fail_shape_inference("Inputs 0 shall be 3 dimensions"); - } - - auto& bias_shape = getInputShape(ctx, 2); - auto& bias_dims = bias_shape.dim(); - if (bias_dims.size() != 1) { - fail_shape_inference("Invalid bias shape"); - } - - std::vector qkv_hidden_sizes; - getRepeatedAttribute(ctx, "qkv_hidden_sizes", qkv_hidden_sizes); - - int64_t output_hidden_size; - if (qkv_hidden_sizes.size() != 0) { - if (qkv_hidden_sizes.size() != 3) { - fail_shape_inference("qkv_hidden_sizes should have 3 elements") - } - output_hidden_size = qkv_hidden_sizes[2]; - } else { - output_hidden_size = bias_shape.dim(0).dim_value() / 3; - } - - ONNX_NAMESPACE::TensorShapeProto output_shape; - for (auto& dim : input_dims) { - *output_shape.add_dim() = dim; - } - - output_shape.mutable_dim(2)->set_dim_value(output_hidden_size); - updateOutputShape(ctx, 0, output_shape); - - // TODO does the extra output need any changes? - if (ctx.getNumOutputs() > 1) { - if (hasInputShape(ctx, past_input_index)) { - auto& past_shape = getInputShape(ctx, past_input_index); - auto& past_dims = past_shape.dim(); - if (past_dims.size() != 5) { - fail_shape_inference("Inputs 4 shall be 5 dimensions"); - } - - if (past_dims[3].has_dim_value() && input_dims[1].has_dim_value()) { - auto all_sequence_length = past_shape.dim(3).dim_value() + input_shape.dim(1).dim_value(); - - ONNX_NAMESPACE::TensorShapeProto present_shape; - for (auto& dim : past_dims) { - *present_shape.add_dim() = dim; - } - present_shape.mutable_dim(3)->set_dim_value(all_sequence_length); - - updateOutputShape(ctx, 1, present_shape); - } - } - } - } -} - -void DecoderAttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx) { - // Type inference - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); - if (ctx.getNumOutputs() > 1) { - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 1); - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 2); - } - // Shape inference - if (hasInputShape(ctx, 0)) { - auto& query_shape = getInputShape(ctx, 0); - updateOutputShape(ctx, 0, query_shape); - } - if (ctx.getNumOutputs() > 1) { - if (hasInputShape(ctx, 6) && hasInputShape(ctx, 7)) { - auto& cache_shape = getInputShape(ctx, 6); - auto& cache_dims = cache_shape.dim(); - if (cache_dims.size() != 4) { - fail_shape_inference("key and value cache shall be 4 dimensions"); - } - // has_dim_value() will return false if value is dynamic - if (cache_dims[0].has_dim_value() && - cache_dims[1].has_dim_value() && - cache_dims[2].has_dim_value() && - cache_dims[3].has_dim_value()) { - - ONNX_NAMESPACE::TensorShapeProto new_cache_shape; - *new_cache_shape.add_dim() = cache_shape.dim(0); - *new_cache_shape.add_dim() = cache_shape.dim(1); - new_cache_shape.add_dim(); - *new_cache_shape.add_dim() = cache_shape.dim(3); - - updateOutputShape(ctx, 1, new_cache_shape); - updateOutputShape(ctx, 2, new_cache_shape); - } - } - } -} bool ParseScalar(const TensorProto* initializer, int& value) { std::vector parsed_data; @@ -669,1299 +463,856 @@ void BeamSearchShapeInference(ONNX_NAMESPACE::InferenceContext& ctx) { } } -void RegisterTextGenerationSchemas() { - ONNX_CONTRIB_OPERATOR_SCHEMA(BeamSearch) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc("Beam Search for text generation. Supports GPT-2 decoder.") - .Attr("eos_token_id", "The id of the end-of-sequence token", AttributeProto::INT) - .Attr("pad_token_id", "The id of the padding token", AttributeProto::INT) - .Attr("no_repeat_ngram_size", "no repeat ngrams size", AttributeProto::INT, static_cast(0)) - .Attr("early_stopping", "early stop or not", AttributeProto::INT, static_cast(0)) - .Attr( - "body", - "The GPT-2 subgraph with input_ids, position_ids, attention_mask, past_0, past_1, ... as inputs, and logits, present_0, present_1, ... as output", - AttributeProto::GRAPH) - .Input(0, "input_ids", "The sequence used as a prompt for the generation. Shape is (batch_size, sequence_length)", "I") - .Input(1, "max_length", "The maximum length of the sequence to be generated. Shape is (1)", "I") - .Input(2, "min_length", "The minimum length below which the score of eos_token_id is set to -Inf. Shape is (1)", "I", OpSchema::Optional) - .Input(3, "num_beams", "Number of beams for beam search. 1 means no beam search. Shape is (1)", "I") - .Input(4, "num_return_sequences", "The number of returned sequences in the batch. Shape is (1)", "I") - .Input(5, "temperature", "The value used to module the next token probabilities. Accepts value > 0.0. Shape is (1)", "T") - .Input(6, "length_penalty", - "Exponential penalty to the length. Default value 1.0 means no penalty." - "Value > 1.0 encourages longer sequences, while values < 1.0 produces shorter sequences." - "Shape is (1,)", - "T", OpSchema::Optional) - .Input(7, "repetition_penalty", "The parameter for repetition penalty. Default value 1.0 means no penalty. Accepts value > 0.0. Shape is (1)", "T", OpSchema::Optional) - .Input(8, "vocab_mask", "Mask of vocabulary. Words that masked with 0 are not allowed to be generated, and 1 is allowed. Shape is (vacab_size)", "M", OpSchema::Optional) - .Input(9, "prefix_vocab_mask", "Mask of vocabulary for first step. Words that masked with 0 are not allowed to be generated, and 1 is allowed. Shape is (batch_size, vocab_size)", "M", OpSchema::Optional) - .Output(0, "sequences", "Word IDs of generated sequences. Shape is (batch_size, num_return_sequences, max_sequence_length)", "I") - .Output(1, "sequences_scores", "Final beam score of the generated sequences. Shape is (batch_size, num_return_sequences)", "T", OpSchema::Optional) - .Output(2, "scores", - "Processed beam scores for each vocabulary token at each generation step." - "Beam scores consisting of log softmax scores for each vocabulary token and sum of log softmax of previously generated tokens in this beam." - "Shape is (max_length - sequence_length, batch_size, num_beams, vocab_size)", - "T", OpSchema::Optional) - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") - .TypeConstraint("I", {"tensor(int32)"}, "Constrain to integer types") - .TypeConstraint("M", {"tensor(int32)"}, "Constrain mask to integer types") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - BeamSearchShapeInference(ctx); - }); -} - -void RegisterBertSchemas() { - static const char* Attention_ver1_doc = R"DOC( -Multi-Head Self Attention that can be either unidirectional (like GPT-2) or bidirectional (like BERT). -The mask_index input is optional. Besides raw attention mask with shape (batch_size, past_sequence_length + sequence_length) -or (batch_size, sequence_length, past_sequence_length + sequence_length) with value 0 for masked and 1 otherwise, -we also support other two formats: When input has right-side padding, mask_index is one dimension with shape (batch_size), -where value of each element is the end position, or valid length of actual sequence excluding padding. When input has -left-side padding, mask_index has shape (2 * batch_size), where the values are the exclusive end positions followed by -the inclusive start positions. When unidirectional is 1, and each token only attend to previous tokens. For GPT-2, both past -and present state are optional. Present state could appear in output even when past state is not in input. -)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(Attention) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(Attention_ver1_doc) - .Attr("num_heads", "Number of attention heads", AttributeProto::INT) - .Attr("unidirectional", - "Whether every token can only attend to previous tokens. Default value is 0.", - AttributeProto::INT, - static_cast(0)) - .Attr("qkv_hidden_sizes", - "Hidden layer sizes of Q, K, V paths in Attention", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, input_hidden_size)", "T") - .Input(1, "weight", "2D input tensor with shape (input_hidden_size, 3 * hidden_size), where hidden_size = num_heads * head_size", "T") - .Input(2, "bias", "1D input tensor with shape (3 * hidden_size)", "T") - .Input(3, "mask_index", - "Attention mask with shape (batch_size, 1, max_sequence_length, max_sequence_length), (batch_size, past_sequence_length + sequence_length)" - "or (batch_size, sequence_length, past_sequence_length + sequence_length), or index with shape (batch_size) or (2 * batch_size).", - "M", OpSchema::Optional) - .Input(4, "past", "past state for key and value with shape (2, batch_size, num_heads, past_sequence_length, head_size).", "T", OpSchema::Optional) - .Input(5, "extra_add", "additional add to QxK' with shape (batch_size, num_heads, sequence_length, sequence_length).", "T", OpSchema::Optional) - .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Output(1, "present", "present state for key and value with shape (2, batch_size, num_heads, past_sequence_length + sequence_length, head_size)", "T", OpSchema::Optional) - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") - .TypeConstraint("M", {"tensor(int32)"}, "Constrain mask index to integer types") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - constexpr int past_input_index = 4; - AttentionTypeAndShapeInference(ctx, past_input_index); - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(QAttention) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc("Quantization of Multi-Head Self Attention.") - .Attr("num_heads", "Number of attention heads", AttributeProto::INT) - .Attr("unidirectional", - "Whether every token can only attend to previous tokens. Default value is 0.", - AttributeProto::INT, - static_cast(0)) - .Input( - 0, - "input", - "3D input tensor with shape (batch_size, sequence_length, input_hidden_size)", - "T1") - .Input( - 1, - "weight", - "2D input tensor with shape (input_hidden_size, 3 * hidden_size), hidden_size = num_heads * head_size", - "T2") - .Input( - 2, - "bias", - "1D input tensor with shape (3 * hidden_size)", - "T3") - .Input( - 3, - "input_scale", - "scale of quantized input tensor. It's a scalar, which means a per-tensor/layer quantization.", - "T3") - .Input( - 4, - "weight_scale", - "scale of weight scale. It's a scalar or a 1D tensor, which means a per-tensor/per-column quantization." - "Its size should be 3 * hidden_size if it is per-column quantization", - "T3") - .Input( - 5, - "mask_index", - "Attention mask index with shape (batch_size)", - "T4", - OpSchema::Optional) - .Input( - 6, - "input_zero_point", - "zero point of quantized input tensor.It's a scalar, which means a per-tensor/layer quantization.", - "T1", - OpSchema::Optional) - .Input( - 7, - "weight_zero_point", - "zero point of quantized weight tensor. It's a scalar or a 1D tensor, which means a per-tensor/per-column quantization." - "Its size should be 3 * hidden_size if it is per-column quantization", - "T2", - OpSchema::Optional) - .Input( - 8, - "past", - "past state for key and value with shape (2, batch_size, num_heads, past_sequence_length, head_size).", - "T3", - OpSchema::Optional) - .Output( - 0, - "output", - "3D output tensor with shape (batch_size, sequence_length, hidden_size)", - "T3") - .Output( - 1, - "present", - "present state for key and value with shape (2, batch_size, num_heads, past_sequence_length + sequence_length, head_size)", - "T3", - OpSchema::Optional) - .TypeConstraint("T1", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") - .TypeConstraint("T2", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") - .TypeConstraint("T3", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") - .TypeConstraint("T4", {"tensor(int32)"}, "Constrain mask index to integer types") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - constexpr int past_input_index = 8; - - AttentionTypeAndShapeInference(ctx, past_input_index); - }); - - static const char* Longformer_Attention_doc = R"DOC( -Longformer Self Attention with a local context and a global context. Tokens attend locally: Each token -attends to its W previous tokens and W succeding tokens with W being the window length. A selected few tokens -attend globally to all other tokens. - -The attention mask is of shape (batch_size, sequence_length), where sequence_length is a multiple of 2W after padding. -Mask value < 0 (like -10000.0) means the token is masked, 0 otherwise. - -Global attention flags have value 1 for the tokens attend globally and 0 otherwise. -)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(LongformerAttention) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(Longformer_Attention_doc) - .Attr("num_heads", "Number of attention heads", AttributeProto::INT) - .Attr("window", "One sided attention windows length W, or half of total window length", AttributeProto::INT) - .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size), hidden_size = num_heads * head_size", "T") - .Input(1, "weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T") - .Input(2, "bias", "1D input tensor with shape (3 * hidden_size)", "T") - .Input(3, "mask", "Attention mask with shape (batch_size, sequence_length)", "T") - .Input(4, "global_weight", "2D input tensor with shape (hidden_size, 3 * hidden_size)", "T") - .Input(5, "global_bias", "1D input tensor with shape (3 * hidden_size)", "T") - .Input(6, "global", "Global attention flags with shape (batch_size, sequence_length)", "G") - .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") - .TypeConstraint("G", {"tensor(int32)"}, "Constrain to integer types") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - static const char* Decoder_Attention_doc = R"DOC( -This DecoderAttention supports self attention and cross attention, key and value cache, and key_padding_mask. The attention mask is not support at the moment. -Some boolean parameters are passed by runtime input for generic purpose -)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(DecoderAttention) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(Decoder_Attention_doc) - .Attr("num_heads", "Number of attention heads", AttributeProto::INT) - .Input(0, "query", "3D input tensor with shape (sequence_length, batch_size, hidden_size), hidden_size = num_heads * head_size", "T") - .Input(1, "key", "3D input tensor with shape (total_sequence_length, batch_size, hidden_size)", "T") - .Input(2, "q_weight", "2D input tensor with shape (hidden_size, hidden_size)", "T") - .Input(3, "kv_weight", "2D input tensor with shape (hidden_size, 2 * hidden_size)", "T") - .Input(4, "bias", "1D input tensor with shape (3 * hidden_size)", "T") - .Input(5, "key_padding_mask", "2D input tensor with shape (batch_size, total_sequence_length)", "B", OpSchema::Optional) - .Input(6, "key_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross - .Input(7, "value_cache", "input tensor with shape (batch_size, num_heads, sequence_length or total_sequence_length, head_size)", "T", OpSchema::Optional) // self & cross - .Input(8, "static_kv", "If static_kv = true, cross-attention; else self-attention", "B") - .Input(9, "use_past", "If use_past = true, use cache; else no cache", "B") - .Input(10, "has_layer_state", "If has_layer_state = true, layer_state = {} or [a,b]; else layer_state = None", "B") - .Input(11, "has_key_padding_mask", "has_key_padding_mask or not", "B") - .Output(0, "output", "3D output tensor with shape (sequence_length, batch_size, hidden_size)", "T") - .Output(1, "new_key_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross - .Output(2, "new_value_cache", "output tensor with shape (batch_size, num_heads, new sequence_length, head_size)", "T", OpSchema::Optional) // self & cross - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float and float16 tensors.") - .TypeConstraint("B", {"tensor(bool)"}, "Constrain key_padding_mask to bool tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - DecoderAttentionTypeAndShapeInference(ctx); - }); - - static const char* EmbedLayerNormalization_ver1_doc = R"DOC( -EmbedLayerNormalization is the fusion of embedding layer in BERT model, with optional mask processing. -The embedding layer takes input_ids (word IDs) and segment_ids (sentence IDs) to look up word_embedding, position_embedding, -and segment_emedding; the embeddings are added then applied layer normalization using gamma and beta tensors. -The last input mask is optional. If mask is provided, mask index (that is position of first 0 in mask, or number of words) -will be calculated.)DOC"; +constexpr const char* Gelu_ver1_doc = + R"DOC(Gaussian Error Linear Unit. +A high-performing neural network activation function.The GELU nonlinearity is +the expected transformation of a stochastic regularizer which randomly applies +the identity or zero map to a neuron's input. The GELU nonlinearity weights +inputs by their magnitude, rather than gates inputs by their sign as in ReLUs.)DOC"; - ONNX_CONTRIB_OPERATOR_SCHEMA(EmbedLayerNormalization) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(EmbedLayerNormalization_ver1_doc) - .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultEmbedLayerNormEpsilon) - .Input(0, "input_ids", "2D words IDs with shape (batch_size, sequence_length)", "T1") - .Input(1, "segment_ids", "2D segment IDs with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) - .Input(2, "word_embedding", "2D with shape (,hidden_size)", "T") - .Input(3, "position_embedding", "2D with shape (, hidden_size)", "T") - .Input(4, "segment_embedding", "2D with shape (, hidden_size)", "T", OpSchema::Optional) - .Input(5, "gamma", "1D gamma tensor for layer normalization with shape (hidden_size)", "T") - .Input(6, "beta", "1D beta tensor for layer normalization with shape (hidden_size)", "T") - .Input(7, "mask", "2D attention mask with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) - .Input(8, "position_ids", "2D position ids with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) - .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Output(1, "mask_index", "1D mask_index tensor with shape (batch_size)", "T1") - .Output(2, "embedding_sum", "sum of word_embedding and position_embedding without layer normalization", "T", OpSchema::Optional) - .TypeConstraint("T1", {"tensor(int32)"}, "Constrain input and output integer tensors types") - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output float tensors types.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::embedLayerNormalizationShapeInference); - - static const char* QEmbedLayerNormalization_ver1_doc = R"DOC( -QEmbedLayerNormalization is the quantized fusion of embedding layer in BERT model, with optional mask processing. -The embedding layer takes input_ids (word IDs) and segment_ids (sentence IDs) to look up word_embedding, position_embedding, -and segment_emedding; the embeddings are added then applied layer normalization using gamma and beta tensors. The input_ids -and segment_ids remain int32. All embeddings, gamma, and beta tensors are converted to int8/uint8. The last input mask is optional. -If mask is provided, mask index (that is position of first 0 in mask, or number of words will be calculated.)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(QEmbedLayerNormalization) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetSupportLevel(OpSchema::SupportType::EXPERIMENTAL) - .SetDoc(QEmbedLayerNormalization_ver1_doc) - .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultEmbedLayerNormEpsilon) - .Input(0, "input_ids", "2D words IDs with shape (batch_size, sequence_length)", "T1") - .Input(1, "segment_ids", "2D segment IDs with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) - .Input(2, "word_embedding_quant", "2D with shape (,hidden_size)", "T2") - .Input(3, "position_embedding_quant", "2D with shape (, hidden_size)", "T2") - .Input(4, "segment_embedding", "2D with shape (, hidden_size)", "T2", OpSchema::Optional) - .Input(5, "gamma_quant", "1D gamma tensor for layer normalization with shape (hidden_size)", "T2") - .Input(6, "beta_quant", "1D beta tensor for layer normalization with shape (hidden_size)", "T2") - .Input(7, "mask", "Mask", "T1", OpSchema::Optional) - .Input(8, "word_embedding_scale", "Scale for word embeddings", "T") - .Input(9, "position_embedding_scale", "Scale for position embeddings", "T") - .Input(10, "segment_embedding_scale", "Scale for segment embeddings", "T", OpSchema::Optional) - .Input(11, "gamma_scale", "Scale for 1D gamma tensor", "T") - .Input(12, "beta_scale", "Scale for 1D beta tensor", "T") - .Input(13, "word_embedding_zero_point", "Zero point for word embeddings", "T2") - .Input(14, "position_embedding_zero_point", "Zero point for position embeddings", "T2") - .Input(15, "segment_embedding_zero_point", "Zero Point for segment embeddings", "T2", OpSchema::Optional) - .Input(16, "gamma_zero_point", "Zero Point for 1D gamma tensor", "T2") - .Input(17, "beta_zero_point", "Zero Point for 1D beta tensor", "T2") - .Output(0, "layernorm_out", "LayerNorm Output", "T") - .Output(1, "mask_index_out", "Mask Index Output", "T1") - .TypeConstraint("T1", {"tensor(int32)"}, "Constrain mask index to integer types") - .TypeConstraint("T2", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") - .TypeConstraint("T", {"tensor(float)"}, "Constrain input and output types to float32 tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::embedLayerNormalizationShapeInference); - - static const char* FastGelu_ver1_doc = R"DOC( -GELU (Gaussian Error Linear Unit) approximation: Y=0.5*X*(1+tanh(0.797885*X+0.035677*X*X*X)) with an optional input of bias that will be added to X before GELU.)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(FastGelu) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(FastGelu_ver1_doc) - .Input(0, "X", "input tensor", "T") - .Input(1, "bias", "bias tensor", "T", OpSchema::Optional) - .Output(0, "Y", "output tensor", "T") - .TypeConstraint("T", {"tensor(float)", "tensor(float16)", "tensor(bfloat16)"}, "Constrain input and output types to float or half tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput) - .SetContextDependentFunctionBodyBuilder([](const FunctionBodyBuildContext& ctx, const OpSchema& schema, FunctionProto& functionProto) { - // fastgelu(x) = - auto* tp = ctx.getInputType(0); - if ((tp == nullptr) || (!tp->has_tensor_type())) - return false; - auto elem_type = tp->tensor_type().elem_type(); - - // Optional input 1 indicates a bias to be added to input 0. - auto hasBias = ctx.hasInput(1); - - FunctionBuilder builder(functionProto); - builder - .AddOpset("", 13) - .Const("a", 0.5, elem_type) - .Const("b", 0.797885, elem_type) - .Const("c", 0.035677, elem_type) - .Const("one", 1.0, elem_type) - .Add(hasBias ? "X_bias = Add (X, bias)" : "X_bias = Identity (X)") - .Add(R"( - T1 = Mul (X_bias, X_bias) - T2 = Mul (c, T1) - T3 = Add (b, T2) - T4 = Mul (X_bias, T3) - T5 = Tanh (T4) - T6 = Add (one, T5) - T7 = Mul (X_bias, T6) - Y = Mul (a, T7) +ONNX_MS_OPERATOR_SET_SCHEMA(Gelu, 1, + OpSchema() + .SetDoc(Gelu_ver1_doc) + .Input(0, "X", "The input data as Tensor.", "T") + .Output(0, "Y", "The output.", "T") + .TypeConstraint( + "T", + {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput) + .SetContextDependentFunctionBodyBuilder([](const FunctionBodyBuildContext& ctx, const OpSchema& schema, FunctionProto& functionProto) { + // gelu(x) = x * Phi(x) = x * 1/2(1+erf(x/sqrt(2))) + auto* tp = ctx.getInputType(0); + if ((tp == nullptr) || (!tp->has_tensor_type())) + return false; + auto elem_type = tp->tensor_type().elem_type(); + + FunctionBuilder builder(functionProto); + builder + .AddOpset("", 13) + .Const("Half", 0.5, elem_type) + .Const("One", 1.0, elem_type) + .Const("C", std::sqrt(0.5), elem_type) + .Add(R"( + CX = Mul (C, X) + ERFCX = Erf (CX) + ERFCXPlus1 = Add (ERFCX, One) + PhiX = Mul (ERFCXPlus1, Half) + Y = Mul (X, PhiX) )"); - schema.BuildFunction(functionProto); - return true; - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(SkipLayerNormalization) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc("Skip and Layer Normalization Fusion") - .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultSkipLayerNormEpsilon) - .Input(0, "input", "3D input tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Input(1, "skip", "3D skip tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Input(2, "gamma", "1D input tensor with shape (hidden_size)", "T") - .Input(3, "beta", "1D skip tensor with shape (hidden_size", "T", OpSchema::Optional) - .Input(4, "bias", "1D bias tensor with shape (hidden_size", "T", OpSchema::Optional) - .Output(0, "output", "3D output tensor with shape (batch_size, sequence_length, hidden_size)", "T") - .Output(1, "mean", "Saved mean used during training to speed up gradient computation", "U", OpSchema::Optional) - .Output(2, "inv_std_var", "Saved inverse standard variance used during training to speed up gradient computation.", "U", OpSchema::Optional) - .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.") - .TypeConstraint("U", {"tensor(float)"}, "Constrain mean and inv_std_var to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - static const char* NGramRepeatBlock_ver1_doc = R"DOC( -Enforce no repetition of n-grams. Scores are set to `-inf` for tokens that form a repeated n-gram if added to the back of the input_ids. -)DOC"; + schema.BuildFunction(functionProto); + return true; + })); - ONNX_CONTRIB_OPERATOR_SCHEMA(NGramRepeatBlock) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(NGramRepeatBlock_ver1_doc) - .Attr("ngram_size", "The NGram size.", AttributeProto::INT) - .Input(0, "input_ids", "2D input tensor with shape (batch_size, sequence_length)", "Tid") - .Input(1, "scores", "2D input tensor with shape (batch_size, vocab_size)", "T") - .Output(0, "scores_out", "2D output tensor with shape (batch_size, vocab_size)", "T") - .TypeConstraint("Tid", {"tensor(int64)"}, "Constrain indices to integer types") - .TypeConstraint("T", {"tensor(float)"}, "Constrain scores input and output types to float tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 1, 0); - if (!hasInputShape(ctx, 1)) { - return; - } - propagateShapeFromInputToOutput(ctx, 1, 0); - }); - - static const char* BifurcationDetector_ver1_doc = R"DOC( -Component for aggressive decoding. Find the bifurcation index of predicted tokens, between source tokens, -starting from previous suffix match index, and predicted tokens. -Concat predicted tokens, starting from bifurcation index, to the back -of current tokens. This forms the output tokens. -Detect suffix match index in source tokens, between source tokens and output tokens. -Detection is based on finding the appearances of last n-gram in output tokens -in source tokens. -A match is considered found if source tokens contain a single matching n-gram. -Return the index of the start of the n-gram in source tokens. -No matching if found if src tokens contain multiple or zero matching n-grams. Return -1. -)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(BifurcationDetector) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(BifurcationDetector_ver1_doc) - .Attr("min_ngram_size", "The minimum NGram size for suffix matching.", AttributeProto::INT, static_cast(1)) - .Attr("max_ngram_size", "The maximum NGram size for suffix matching.", AttributeProto::INT, static_cast(3)) - .Input(0, "src_tokens", "Encoder input ids.", "T") - .Input(1, "cur_tokens", "Decoder input ids.", "T") - .Input(2, "prev_suffix_match_idx", "Previous suffix match index", "T") - .Input(3, "pred_tokens", "Predicted token ids from aggressive decoding", "T", OpSchema::Optional) - .Output(0, "tokens", "Decoder input ids after merging predicted tokens", "T") - .Output(1, "suffix_match_idx", "new suffix match index", "T") - .TypeConstraint("T", {"tensor(int64)"}, "Constrain to integer types.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 1, 0); - propagateElemTypeFromInputToOutput(ctx, 2, 1); - if (hasInputShape(ctx, 2)) { - propagateShapeFromInputToOutput(ctx, 2, 1); - } - // output tokens lengths is dynamic as it depends on the bifurcation index of predicted tokens and source tokens, - // and current tokens length. - // tokens_length = cur_tokens_length + bifurcation_index + 1. - }); -} - -void RegisterContribSchemas() { - // Register removed experimental ops for backward compatibility. - // Experimental operators do not have version history. However, RS5 takes bunch of experimental operators - // as production ops. In order to maintain backward compatibility when the experimental ops are removed from ONNX - // they need to be added in onnxruntime as contrib ops. - // ONNX exp ops(Affine, Crop, ParametricSoftplus, ImageScaler, ThresholdedRelu, DynamicSlice, ScaledTanh, MVN) old version history maintenance - static const char* Affine_ver1_doc = R"DOC( -Affine takes one input data (Tensor) and produces one output data -(Tensor) where the affine function, y = alpha * x + beta, -is applied to the tensor elementwise. -)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(Affine) - .SinceVersion(1) - .SetDoc(Affine_ver1_doc) - .Attr("alpha", "Value of alpha", AttributeProto::FLOAT, 1.0f) - .Attr("beta", "Value of beta", AttributeProto::FLOAT, 0.0f) - .Input(0, "X", "1D input tensor", "T") - .Output(0, "Y", "1D output tensor", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - static const char* ParametricSoftplus_ver1_doc = R"DOC( -ParametricSoftplus takes one input data (Tensor) and produces one output data -(Tensor) where the softplus function, y = alpha * ln(exp(beta * x) + 1), is applied to -the tensor elementwise. -)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(ParametricSoftplus) - .SinceVersion(1) - .SetDoc(ParametricSoftplus_ver1_doc) - .Attr("alpha", "Value of alpha", AttributeProto::FLOAT, OPTIONAL_VALUE) - .Attr("beta", "Value of beta", AttributeProto::FLOAT, OPTIONAL_VALUE) - .Input(0, "X", "1D input tensor", "T") - .Output(0, "Y", "1D input tensor", "T") - .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - static const char* ImageScaler_ver1_doc = - R"DOC(Scale and bias the input image. Bias values are stored in -the same ordering as the image pixel format.)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(ImageScaler) - .SinceVersion(1) - .SetDoc(ImageScaler_ver1_doc) - .Attr("bias", "Bias applied to each channel, same size as C.", AttributeProto::FLOATS, OPTIONAL_VALUE) - .Attr("scale", "The scale to apply.", AttributeProto::FLOAT, 1.0f) - .Input(0, "input", "Input tensor of shape [N,C,H,W]", "T") - .Output(0, "output", "Result, has same shape and type as input", "T") - .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - static const char* Crop_ver1_doc = - R"DOC(Crop and image to the specified spatial dimensions. If scale is given, -then optionally start the crop offset by the left/top border amounts. -If scale is not provided, crop the borders as provided.)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(Crop) - .SinceVersion(1) - .SetDoc(Crop_ver1_doc) - .Attr("border", "A 1-D values of (leftBorder, topBorder, rightBorder, bottomBorder).", AttributeProto::INTS, OPTIONAL_VALUE) - .Attr("scale", "A 1-D values of (height, width).", AttributeProto::INTS, OPTIONAL_VALUE) - .Input(0, "input", "Input tensor of shape [N,C,H,W]", "T") - .Output(0, "output", "Result, has same type as input, with H and W dimensions reduced.", "T") - .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors."); - - static const char* ThresholdedRelu_ver1_doc = R"DOC( -ThresholdedRelu takes one input data (Tensor) and produces one output data -(Tensor) where the rectified linear function, y = x for x > alpha, y = 0 otherwise, -is applied to the tensor elementwise. )DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(ThresholdedRelu) - .SinceVersion(1) - .SetDoc(ThresholdedRelu_ver1_doc) - .Attr("alpha", "Threshold value", AttributeProto::FLOAT, 1.0f) - .Input(0, "X", "Input tensor", "T") - .Output(0, "Y", "Output tensor", "T") - .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - static const char* DynamicSlice_ver1_doc = R"DOC( -Produces a slice of the input tensor along multiple axes. Similar to numpy: -https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html -Slices uses `axes`, `starts` and `ends` inputs to specify the start and end -dimension for each axis in the list of axes, it uses this information to -slice the input `data` tensor. If a negative value is passed for any of the -start or end indices, it represent number of elements before the end of that -dimension. If the value passed to start or end is larger than the `n` (the -number of elements in this dimension), it represents `n`. For slicing to the -end of a dimension with unknown size, it is recommended to pass in `INT_MAX`. -If `axes` are omitted, they are set to `[0, ..., ndim-1]`. -Example 1: - data = [ - [1, 2, 3, 4], - [5, 6, 7, 8], - ] - axes = [0, 1] - starts = [1, 0] - ends = [2, 3] - result = [ - [5, 6, 7], - ] -Example 2: - data = [ - [1, 2, 3, 4], - [5, 6, 7, 8], - ] - starts = [0, 1] - ends = [-1, 1000] - result = [ - [2, 3, 4], - ] -)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(DynamicSlice) - .SinceVersion(1) - .SetDoc(DynamicSlice_ver1_doc) - .Input(0, "data", "Tensor of data to extract slices from.", "T") - .Input(1, "starts", "1-D tensor of starting indices of corresponding axis in `axes`", "Tind") - .Input(2, "ends", "1-D tensor of ending indices (exclusive) of corresponding axis in axes", "Tind") - .Input(3, "axes", "1-D tensor of axes that `starts` and `ends` apply to.", "Tind", OpSchema::Optional) - .Output(0, "output", "Sliced data tensor.", "T") - .TypeConstraint("T", OpSchema::all_tensor_types(), "Constrain input and output types to all tensor types.") - .TypeConstraint("Tind", {"tensor(int32)", "tensor(int64)"}, "Constrain indices to integer types"); - - ONNX_CONTRIB_OPERATOR_SCHEMA(GivenTensorFill) - .SinceVersion(1) - .Input(0, "shape", "The shape of filled tensor", "T", OpSchema::Optional) - .Output(0, "X", "The filled tensor", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .Attr("values", "", AttributeProto::FLOATS, OPTIONAL_VALUE) - .Attr("shape", "", AttributeProto::INTS, OPTIONAL_VALUE) - .Attr("input_as_shape", "", AttributeProto::INT, OPTIONAL_VALUE) - .Attr("extra_shape", "", AttributeProto::INTS, OPTIONAL_VALUE) - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); - if (ctx.getAttribute("shape") != nullptr) { - propagateShapeFromAttributeToOutput(ctx, "shape", 0); - return; - } - // The type constraints above do not allow for input_as_shape - // and may need to be fixed. - if (getAttribute(ctx, "input_as_shape", 0) != 0) // dynamic shape - return; - std::vector extra_shape; - getRepeatedAttribute(ctx, "extra_shape", extra_shape); - if (hasInputShape(ctx, 0)) { - ONNX_NAMESPACE::TensorShapeProto shape = ctx.getInputType(0)->tensor_type().shape(); - for (auto extra_dim_val : extra_shape) { - if (extra_dim_val < 0) - fail_shape_inference( - "Negative values are not allowed in a shape specification"); - shape.add_dim()->set_dim_value(extra_dim_val); - } - updateOutputShape(ctx, 0, shape); - } - }); - - static const char* Scale_ver1_doc = R"DOC( -Scale takes one input data (Tensor) and produces one output data -(Tensor) whose value is the input data tensor scaled element-wise. -)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(Scale) - .SinceVersion(1) - .Input(0, "input", "Input data to be scaled", "T") - .Output(0, "output", "Output data after scaling", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .SetDoc(Scale_ver1_doc) - .Attr("scale", "The scale to apply.", AttributeProto::FLOAT, 1.0f) - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - static const char* GRUUnit_ver1_doc = R"DOC( -GRUUnit computes the activations of a standard GRU, -in a sequence-length aware fashion. -Concretely, given the (fused) inputs X (TxNxD), the previous hidden -state (NxD), and the sequence lengths (N), computes the GRU -activations, avoiding computation if the input is invalid (as in, the -value at X[t][n] >= seqLengths[n]. -)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(GRUUnit) - .SinceVersion(1) - .SetDoc(GRUUnit_ver1_doc) - .Attr("drop_states", - "Bool to determine if hidden state is zeroes or passed " - "along for timesteps past the given sequence_length.", - AttributeProto::INT, OPTIONAL_VALUE) - .Input(0, "hidden_prev", "The previous GRU hidden state.", "T") - .Input( - 1, - "gates", - "Unactivated gate outputs from forget, update, " - "and output gates, pre-activation.", - "T") - .Input( - 2, - "seq_lengths", - "Array of sequence lengths. " - "len(seq_lengths) should equal batch size N.", - "T") - .Input(3, "t", "The timestep for this operation.", "T") - .Output( - 0, - "hidden", - "The new GRU hidden state calculated by this op.", - "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors."); - - ONNX_CONTRIB_OPERATOR_SCHEMA(GivenTensorFill) - .SinceVersion(10) - .Deprecate() - .Input(0, "shape", "The shape of filled tensor", "T", OpSchema::Optional) - .Output(0, "X", "The filled tensor", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .Attr("values", "", AttributeProto::FLOATS, OPTIONAL_VALUE) - .Attr("shape", "", AttributeProto::INTS, OPTIONAL_VALUE) - .Attr("input_as_shape", "", AttributeProto::INT, OPTIONAL_VALUE) - .Attr("extra_shape", "", AttributeProto::INTS, OPTIONAL_VALUE) - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); - if (ctx.getAttribute("shape") != nullptr) { - propagateShapeFromAttributeToOutput(ctx, "shape", 0); - return; - } - // The type constraints above do not allow for input_as_shape - // and may need to be fixed. - if (getAttribute(ctx, "input_as_shape", 0) != 0) // dynamic shape - return; - std::vector extra_shape; - getRepeatedAttribute(ctx, "extra_shape", extra_shape); - if (hasInputShape(ctx, 0)) { - ONNX_NAMESPACE::TensorShapeProto shape = ctx.getInputType(0)->tensor_type().shape(); - for (auto extra_dim_val : extra_shape) { - if (extra_dim_val < 0) - fail_shape_inference( - "Negative values are not allowed in a shape specification"); - shape.add_dim()->set_dim_value(extra_dim_val); - } - updateOutputShape(ctx, 0, shape); - } - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(Scale) - .SinceVersion(10) - .Deprecate() - .Input(0, "input", "Input data to be scaled", "T") - .Output(0, "output", "Output data after scaling", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .SetDoc(Scale_ver1_doc) - .Attr("scale", "The scale to apply.", AttributeProto::FLOAT, 1.0f) - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - ONNX_CONTRIB_OPERATOR_SCHEMA(GRUUnit) - .SinceVersion(10) - .Deprecate() - .SetDoc(GRUUnit_ver1_doc) - .Attr("drop_states", - "Bool to determine if hidden state is zeroes or passed " - "along for timesteps past the given sequence_length.", - AttributeProto::INT, OPTIONAL_VALUE) - .Input(0, "hidden_prev", "The previous GRU hidden state.", "T") - .Input( - 1, - "gates", - "Unactivated gate outputs from forget, update, " - "and output gates, pre-activation.", - "T") - .Input( - 2, - "seq_lengths", - "Array of sequence lengths. " - "len(seq_lengths) should equal batch size N.", - "T") - .Input(3, "t", "The timestep for this operation.", "T") - .Output( - 0, - "hidden", - "The new GRU hidden state calculated by this op.", - "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors."); - - ONNX_OPERATOR_SCHEMA(MeanVarianceNormalization) - .SinceVersion(1) - .SetDoc(R"DOC(Perform mean variance normalization.)DOC") - .Attr("across_channels", "If 1, mean and variance are computed across channels. Default is 0.", AttributeProto::INT, static_cast(0)) - .Attr("normalize_variance", "If 0, normalize the mean only. Default is 1.", AttributeProto::INT, static_cast(1)) - .Input(0, "input", "Input tensor of shape [N,C,H,W]", "T") - .Output(0, "output", "Result, has same shape and type as input", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - ONNX_OPERATOR_SCHEMA(ScaledTanh) - .SinceVersion(1) - .Attr("alpha", "Scaling value", AttributeProto::FLOAT, OPTIONAL_VALUE) - .Attr("beta", "Scaling value", AttributeProto::FLOAT, OPTIONAL_VALUE) - .Input(0, "input", "Input tensor", "T") - .Output( - 0, - "output", - "The scaled hyperbolic tangent values of the input tensor " - "computed element-wise", - "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - ONNX_CONTRIB_OPERATOR_SCHEMA(Affine) - .SinceVersion(10) - .Deprecate() - .SetDoc(Affine_ver1_doc) - .Attr("alpha", "Value of alpha", AttributeProto::FLOAT, 1.0f) - .Attr("beta", "Value of beta", AttributeProto::FLOAT, 0.0f) - .Input(0, "X", "1D input tensor", "T") - .Output(0, "Y", "1D output tensor", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - ONNX_CONTRIB_OPERATOR_SCHEMA(ParametricSoftplus) - .SinceVersion(10) - .Deprecate() - .SetDoc(ParametricSoftplus_ver1_doc) - .Attr("alpha", "Value of alpha", AttributeProto::FLOAT, OPTIONAL_VALUE) - .Attr("beta", "Value of beta", AttributeProto::FLOAT, OPTIONAL_VALUE) - .Input(0, "X", "1D input tensor", "T") - .Output(0, "Y", "1D input tensor", "T") - .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - ONNX_CONTRIB_OPERATOR_SCHEMA(ImageScaler) - .SinceVersion(10) - .Deprecate() - .SetDoc(ImageScaler_ver1_doc) - .Attr("bias", "Bias applied to each channel, same size as C.", AttributeProto::FLOATS, OPTIONAL_VALUE) - .Attr("scale", "The scale to apply.", AttributeProto::FLOAT, 1.0f) - .Input(0, "input", "Input tensor of shape [N,C,H,W]", "T") - .Output(0, "output", "Result, has same shape and type as input", "T") - .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - ONNX_CONTRIB_OPERATOR_SCHEMA(Crop) - .SinceVersion(10) - .Deprecate() - .SetDoc(Crop_ver1_doc) - .Attr("border", "A 1-D values of (leftBorder, topBorder, rightBorder, bottomBorder).", AttributeProto::INTS) - .Attr("scale", "A 1-D values of (height, width).", AttributeProto::INTS, OPTIONAL_VALUE) - .Input(0, "input", "Input tensor of shape [N,C,H,W]", "T") - .Output(0, "output", "Result, has same type as input, with H and W dimensions reduced.", "T") - .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - // Type inference - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); - - // Shape inference - auto* output_shape = - ctx.getOutputType(0)->mutable_tensor_type()->mutable_shape(); - - if (ONNX_NAMESPACE::hasNInputShapes(ctx, 1)) { - const auto& input_shape = - ctx.getInputType(0)->tensor_type().shape(); - const auto input_rank = - input_shape.dim_size(); - if (input_rank != 4) - fail_shape_inference("Input's shape must be 4-D"); - - // parse necessary attributes for futher processing - std::vector border; - bool border_present = - getRepeatedAttribute(ctx, "border", border); - if (!border_present || border.size() != 4) - fail_shape_inference( - "'Border' attribute must be present and must contain exactly 4 values - " - "(left_border, top_border, right_border, bottom_border)"); - - std::vector scale; - bool scale_present = - getRepeatedAttribute(ctx, "scale", scale); - if (scale_present && scale.size() != 2) - fail_shape_inference("'Scale' must contain exactly 2 values - (height, width)"); - - // actual shape inference processing - // [N, C] can be copied over from the input as is - *output_shape->mutable_dim(static_cast(0)) = input_shape.dim(static_cast(0)); - *output_shape->mutable_dim(static_cast(1)) = input_shape.dim(static_cast(1)); - - // process 'H' and 'W' - if (!utils::HasDimValue(input_shape.dim(static_cast(2))) || - !utils::HasDimValue(input_shape.dim(static_cast(3)))) { - // either height and width input has symbolic dims, so can't proceed further - // add two dims as placeholders for output_H and output_W and return - output_shape->add_dim(); - output_shape->add_dim(); - return; - } - - int64_t H = input_shape.dim(static_cast(2)).dim_value(); - int64_t W = input_shape.dim(static_cast(3)).dim_value(); - - int64_t left_border = border[0], - top_border = border[1], - right_border = border[2], - bottom_border = border[3]; - - if (H < top_border + bottom_border) - fail_shape_inference("Input's height (", H, - ") needs to be greater than or equal to " - "the top_border (", - top_border, ") + bottom_border (", bottom_border, ")"); - - if (W < left_border + right_border) - fail_shape_inference("Input's width (", W, - ") needs to be greater than or equal to " - "the left_border (", - left_border, ") + right_border (", right_border, ")"); - - int64_t bottom_limit = H - bottom_border; - int64_t right_limit = W - right_border; - - // scale = (height, width) - if (!scale.empty()) { - bottom_limit = top_border + scale[0]; - right_limit = left_border + scale[1]; - - if (H < bottom_limit) - fail_shape_inference("Input's height (", H, ") needs to be greater than or equal to the top_border (", top_border, ") + scale[0] (", scale[0], ")"); - - if (W < right_limit) - fail_shape_inference("Input's width (", W, ") needs to be greater than or equal to the left_border (", left_border, ") + scale[1] (", scale[1], ")"); - } - - auto* h_output_dim = output_shape->add_dim(); - h_output_dim->set_dim_value(bottom_limit - top_border); - - auto* w_output_dim = output_shape->add_dim(); - w_output_dim->set_dim_value(right_limit - left_border); - } else { - // Rank Inference at the very least - // (We know that the output is going to be 4-D) - for (int i = 0; i < 4; ++i) { - output_shape->add_dim(); - } - } - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(DynamicSlice) - .SinceVersion(10) - .Deprecate() - .SetDoc(DynamicSlice_ver1_doc) - .Input(0, "data", "Tensor of data to extract slices from.", "T") - .Input(1, "starts", "1-D tensor of starting indices of corresponding axis in `axes`", "Tind") - .Input(2, "ends", "1-D tensor of ending indices (exclusive) of corresponding axis in axes", "Tind") - .Input(3, "axes", "1-D tensor of axes that `starts` and `ends` apply to.", "Tind", OpSchema::Optional) - .Output(0, "output", "Sliced data tensor.", "T") - .TypeConstraint("T", OpSchema::all_tensor_types(), "Constrain input and output types to all tensor types.") - .TypeConstraint("Tind", {"tensor(int32)", "tensor(int64)"}, "Constrain indices to integer types"); - - ONNX_OPERATOR_SCHEMA(ScaledTanh) - .SinceVersion(10) - .Deprecate() - .Attr("alpha", "Scaling value", AttributeProto::FLOAT, OPTIONAL_VALUE) - .Attr("beta", "Scaling value", AttributeProto::FLOAT, OPTIONAL_VALUE) - .Input(0, "input", "Input tensor", "T") - .Output( - 0, - "output", - "The scaled hyperbolic tangent values of the input tensor " - "computed element-wise", - "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - // End of ONNX exp ops(Affine, Crop, ParametricSoftplus, ImageScaler, ThresholdedRelu, DynamicSlice, ScaledTanh, MVN) old version history maintenance - - ONNX_CONTRIB_OPERATOR_SCHEMA(SampleOp) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "X", "input", "T") - .Output(0, "Y", "output", "T") - .TypeConstraint( - "T", - ONNX_NAMESPACE::OpSchema::numeric_types_for_math_reduction(), - "Constrain to any tensor type. If the dtype attribute is not provided this must be a valid output type.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput) - .SetDoc(R"DOC( -Sample echo operator.)DOC"); - - // register schemas for more operators here - ONNX_CONTRIB_OPERATOR_SCHEMA(MaxpoolWithMask) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC(For internal use.)DOC") - .Attr( - "auto_pad", - "", - AttributeProto::STRING, - std::string("NOTSET")) - .Attr( - "kernel_shape", - "", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Attr("pads", - "", - AttributeProto::INTS, OPTIONAL_VALUE) - .Attr( - "storage_order", - "", - AttributeProto::INT, - static_cast(0)) - .Attr( - "strides", "", AttributeProto::INTS, OPTIONAL_VALUE) - .Input( - 0, - "X", - "", - "T") - .Input(1, "M", "mask", "tensor(int32)") - .Output( - 0, - "Y", - "", - "T") - .TypeConstraint("T", {"tensor(float)"}, "Constrain input0 and output types to float tensors") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); - ONNX_NAMESPACE::convPoolShapeInference(ctx, false, true, 0, 1); - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(Rfft) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC()DOC") - .Input(0, "X", "input tensor", "T") - .Attr("signal_ndim", "", AttributeProto::INT, static_cast(1)) - .Attr("normalized", "", AttributeProto::INT, static_cast(0)) - .Attr("onesided", "", AttributeProto::INT, static_cast(1)) - .Output(0, "Y", "output tensor", "T") - .TypeConstraint("T", {"tensor(float)", "tensor(double)", "tensor(float16)"}, "Constrain input and output types to float or half tensors."); - - ONNX_CONTRIB_OPERATOR_SCHEMA(Irfft) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC()DOC") - .Input(0, "X", "input tensor", "T") - .Attr("signal_ndim", "", AttributeProto::INT) - .Attr("normalized", "", AttributeProto::INT, static_cast(0)) - .Attr("onesided", "", AttributeProto::INT, static_cast(1)) - .Output(0, "Y", "output tensor", "T") - .TypeConstraint("T", {"tensor(float)", "tensor(double)", "tensor(float16)"}, "Constrain input and output types to float or half tensors."); - - ONNX_CONTRIB_OPERATOR_SCHEMA(ComplexMul) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC()DOC") - .Input(0, "A", "input_0", "T") - .Input(1, "B", "input_1", "T") - .Output(0, "C", "output tensor", "T") - .TypeConstraint("T", {"tensor(float)", "tensor(double)", "tensor(float16)"}, "Constrain input and output types to float or half tensors."); - - ONNX_CONTRIB_OPERATOR_SCHEMA(ComplexMulConj) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC()DOC") - .Input(0, "A", "input_0", "T") - .Input(1, "B", "input_1", "T") - .Output(0, "C", "output tensor", "T") - .TypeConstraint("T", {"tensor(float)", "tensor(double)", "tensor(float16)"}, "Constrain input and output types to float or half tensors."); - - ONNX_CONTRIB_OPERATOR_SCHEMA(ConvTransposeWithDynamicPads) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC()DOC") - .Attr( - "kernel_shape", - "", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Attr("output_padding", - "", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Attr( - "dilations", - "", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Attr( - "strides", - "", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Attr( - "auto_pad", - "", - AttributeProto::STRING, - std::string("NOTSET")) - .Attr( - "group", - "", - AttributeProto::INT, - static_cast(1)) - .Input( - 0, - "X", - "", - "T") - .Input( - 1, - "W", - "", - "T") - .Input(2, "Pads", "", "tensor(int64)", OpSchema::Optional) - .Input(3, "B", "", "T", OpSchema::Optional) - .Output( - 0, - "Y", - "", - "T") - .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::convTransposeWithDynamicPadsShapeInference); - - ONNX_CONTRIB_OPERATOR_SCHEMA(FusedConv) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC( -The fused convolution operator schema is the same as Conv besides it includes an attribute -activation.)DOC") - .Attr( - "auto_pad", - "", - AttributeProto::STRING, - std::string("NOTSET")) - .Attr( - "kernel_shape", - "", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Attr( - "dilations", - "", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Attr( - "strides", - "", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Attr( - "pads", - "", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Attr( - "group", - "", - AttributeProto::INT, - static_cast(1)) - .Attr( - "activation", - "", - AttributeProto::STRING, - OPTIONAL_VALUE) - .Attr( - "activation_params", - "", - AttributeProto::FLOATS, - OPTIONAL_VALUE) - .Input( - 0, - "X", - "", - "T") - .Input( - 1, - "W", - "", - "T") - .Input( - 2, - "B", - "", - "T", - OpSchema::Optional) - .Input( - 3, - "Z", - "", - "T", - OpSchema::Optional) - .Output( - 0, - "Y", - "", - "T") - .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); - ONNX_NAMESPACE::convPoolShapeInference(ctx, true, false, 0, 1); - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(FusedGemm) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC( -The FusedGemm operator schema is the same as Gemm besides it includes attributes -activation and leaky_relu_alpha.)DOC") - .Input( - 0, - "A", - "Input tensor A. " - "The shape of A should be (M, K) if transA is 0, " - "or (K, M) if transA is non-zero.", - "T") - .Input( - 1, - "B", - "Input tensor B. " - "The shape of B should be (K, N) if transB is 0, " - "or (N, K) if transB is non-zero.", - "T") - .Input( - 2, - "C", - "Input tensor C. " - "The shape of C should be unidirectional broadcastable to (M, N).", - "T") - .Output(0, "Y", "Output tensor of shape (M, N).", "T") - .TypeConstraint( - "T", - {"tensor(float16)", - "tensor(float)", - "tensor(double)", - "tensor(uint32)", - "tensor(uint64)", - "tensor(int32)", - "tensor(int64)"}, - "Constrain input and output types to float/int tensors.") - .Attr( - "transA", - "Whether A should be transposed", - AttributeProto::INT, - static_cast(0)) - .Attr( - "transB", - "Whether B should be transposed", - AttributeProto::INT, - static_cast(0)) - .Attr( - "alpha", - "Scalar multiplier for the product of input tensors A * B.", - AttributeProto::FLOAT, - 1.0f) - .Attr( - "beta", - "Scalar multiplier for input tensor C.", - AttributeProto::FLOAT, - 1.0f) - .Attr( - "activation", - "", - AttributeProto::STRING, - OPTIONAL_VALUE) - .Attr( - "activation_alpha", - "", - AttributeProto::FLOAT, - OPTIONAL_VALUE) - .Attr( - "activation_beta", - "", - AttributeProto::FLOAT, - OPTIONAL_VALUE) - .Attr( - "activation_gamma", - "", - AttributeProto::FLOAT, - OPTIONAL_VALUE) - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 0, 0); - if (hasNInputShapes(ctx, 2)) { - auto transAAttr = ctx.getAttribute("transA"); - bool transA = - transAAttr ? static_cast(transAAttr->i()) != 0 : false; - auto transBAttr = ctx.getAttribute("transB"); - bool transB = - transBAttr ? static_cast(transBAttr->i()) != 0 : false; - auto& first_input_shape = getInputShape(ctx, 0); - auto& second_input_shape = getInputShape(ctx, 1); - if (first_input_shape.dim_size() != 2) - fail_shape_inference("First input does not have rank 2"); - if (second_input_shape.dim_size() != 2) - fail_shape_inference("Second input does not have rank 2"); - updateOutputShape( - ctx, - 0, - {first_input_shape.dim(transA ? 1 : 0), - second_input_shape.dim(transB ? 0 : 1)}); - } - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(ExpandDims) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "X", "input", "T") - .Input(1, "axis", "Specified axis to insert a dimension", "tensor(int32)") - .Output(0, "Y", "output", "T") - .TypeConstraint( - "T", - ONNX_NAMESPACE::OpSchema::all_tensor_types(), - "Constrain to any tensor type. If the dtype attribute is not provided this must be a valid output type.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - // Type inference - propagateElemTypeFromInputToOutput(ctx, 0, 0); - - // Shape inference - if (!hasInputShape(ctx, 0)) - return; +constexpr const char* BiasGelu_ver1_doc = + R"DOC(Bias Gelu. +It's an extension of Gelu. It takes the sum of input A and bias input B as the input of Gelu activation. )DOC"; +ONNX_MS_OPERATOR_SET_SCHEMA(BiasGelu, 1, + OpSchema() + .SetDomain(kMSDomain) + .SinceVersion(1) + .SetDoc(BiasGelu_ver1_doc) + .Input(0, "A", "The normal input data.", "T") + .Input(1, "B", "The bias input data that is a 1D tensor.", "T") + .Output(0, "C", "The output.", "T") + .TypeConstraint( + "T", + {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +// Used to be ONNX 1.7 Inverse(12) +// Comment out docs not to increase the binary size +// +// constexpr const char* Inverse_ver1_doc = R"DOC( +// Calculates inverse of a square matrix or batches of square matrices. +// Inverse takes one input tensor of shape `[*, M, M]`, where `*` is zero or more batch dimensions, +// and the inner-most 2 dimensions form square matrices. These matrices must be invertible (full-rank). +// The behavior where one of the matrices is not invertible is undefined. The implementation can choose +// to throw an error or output (garbage) results as is. The output is a tensor of shape `[*, M, M]`, +// containing the individual inverses of all input submatrices. +//)DOC"; + +ONNX_MS_OPERATOR_SET_SCHEMA(Inverse, 1, + OpSchema() + .Input(0, "X", "Input tensor. Every matrix in the batch must be invertible.", "T") + .Output(0, "Y", "Output tensor of the same type and shape as the input tensor.", "T") + .TypeConstraint( + "T", + {"tensor(float16)", + "tensor(float)", + "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + // Type inference + using namespace ONNX_NAMESPACE; + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + // Shape inference + if (hasInputShape(ctx, 0)) { + const TensorShapeProto& input_shape = + ctx.getInputType(0)->tensor_type().shape(); + const int rank = static_cast(input_shape.dim_size()); + + if (rank < 2) { + fail_shape_inference("Input rank must be >= 2.") + } + + const auto mat_w = input_shape.dim(rank - 1); + const auto mat_h = input_shape.dim(rank - 2); + if (mat_w.has_dim_value() && mat_h.has_dim_value() && + (mat_w.dim_value() != mat_h.dim_value())) { + fail_shape_inference( + "The inner-most 2 dimensions must have the same size (mat_w:", + mat_w.dim_value(), + " != mat_h:", + mat_h.dim_value(), + ")."); + } + + // Shape inference + propagateShapeFromInputToOutput(ctx, 0, 0); + } + })); + +constexpr const char* TorchEmbedding_ver1_doc = R"DOC( + Based on Torch operator Embedding, creates a lookup table of embedding vectors of fixed size, + for a dictionary of fixed size. + )DOC"; - auto& input_shape = getInputShape(ctx, 0); - const int rank = input_shape.dim_size(); - const ONNX_NAMESPACE::TensorProto* axis_initializer = ctx.getInputData(1); - if (!axis_initializer) - return; - const int axis = axis_initializer->int32_data()[0]; - if (axis > rank || axis < -rank - 1) { - fail_shape_inference("Input axis is invalid: ", axis); - } - int pos = axis >= 0 ? axis : rank + axis - 1; - ONNX_NAMESPACE::TensorShapeProto output_shape; - for (int i = 0; i < pos; ++i) { - output_shape.add_dim(); - *(output_shape.mutable_dim(i)) = input_shape.dim(i); - } - output_shape.add_dim(); - output_shape.mutable_dim(pos)->set_dim_value(1); - for (int i = pos + 1; i < rank + 1; ++i) { - output_shape.add_dim(); - *(output_shape.mutable_dim(i)) = input_shape.dim(i - 1); - } - updateOutputShape(ctx, 0, output_shape); - }) - .SetDoc(R"DOC(ExpandDims echo operator.)DOC"); +ONNX_MS_OPERATOR_SET_SCHEMA(TorchEmbedding, 1, + OpSchema() + .SetDoc(TorchEmbedding_ver1_doc) + .Input( + 0, + "weight", + "The embedding matrix of size N x M. 'N' is equal to the maximum possible index + 1, and 'M' is " + "equal to the embedding size", + "T") + .Input( + 1, + "indices", + "Long tensor containing the indices to extract from embedding matrix.", + "tensor(int64)") + .Input( + 2, + "padding_idx", + "A 0-D scalar tensor. If specified, the entries at `padding_idx` do not contribute to the gradient; " + "therefore, the embedding vector at `padding_idx` is not updated during training, " + "i.e. it remains as a fixed pad.", + "tensor(int64)", + OpSchema::Optional) + .Input( + 3, + "scale_grad_by_freq", + "A 0-D bool tensor. If given, this will scale gradients by the inverse of frequency of " + "the indices (words) in the mini-batch. Default is ``False``", + "tensor(bool)", + OpSchema::Optional) + .Output( + 0, + "Y", + "Output tensor of the same type as the input tensor. Shape of the output is * x M, where '*' is the shape of " + "input indices, and 'M' is the embedding size.", + "T") + .TypeConstraint( + "T", + {"tensor(float16)", + "tensor(float)", + "tensor(double)", + "tensor(bfloat16)", + "tensor(uint8)", + "tensor(uint16)", + "tensor(uint32)", + "tensor(uint64)", + "tensor(int8)", + "tensor(int16)", + "tensor(int32)", + "tensor(int64)"}, + "Constrain input and output types to all numeric tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + using namespace ONNX_NAMESPACE; + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + TensorShapeProto outputs_shape; + Dim input_dim_i; + + if (hasInputShape(ctx, 1)) { + auto& input_shape = getInputShape(ctx, 1); + for (int32_t i = 0; i < input_shape.dim_size(); i++) { + input_dim_i = input_shape.dim(i); + *outputs_shape.add_dim() = input_dim_i; + } + } + + Dim embedding_dim; + unifyInputDim(ctx, 0, 1, embedding_dim); + *outputs_shape.add_dim() = embedding_dim; + updateOutputShape(ctx, 0, outputs_shape); + })); + +constexpr const char* Trilu_ver1_doc = R"DOC( + Returns the upper or lower triangular part of a 2-D matrix, or batches of 2-D matrices. If the attribute "upper" is set to true, + the upper triangular matrix is retained. Lower triangular matrix is retained otherwise. Default value for upper is true. + Trilu takes one input tensor of shape [*, N, M], where * is zero or more batch dimensions. The upper triangular part consists + of the elements on and above the given diagonal (k). The lower triangular part consists of elements on and below the diagonal. + All other elements in the matrix are set to zero. + If k = 0, the triangular part on and above/below the main diagonal is retained. + If upper is set to true, a positive k retains the upper triangular matrix excluding k diagonals above + the main diagonal. A negative k value includes as many diagonals below the main diagonal. + If upper is set to false, a positive k retains the lower triangular matrix including k diagonals above + the main diagonal. A negative k value excludes as many diagonals below the main diagonal. + )DOC"; - ONNX_CONTRIB_OPERATOR_SCHEMA_ELSEWHERE(AttnLSTM, RegisterAttnLSTMContribOpSchema); - ONNX_CONTRIB_OPERATOR_SCHEMA_ELSEWHERE(Range, RegisterRangeOpSchema); +ONNX_MS_OPERATOR_SET_SCHEMA(Trilu, 1, + OpSchema() + .SetDoc(Trilu_ver1_doc) + .Attr("upper", + "Boolean. Indicates whether upper or lower part of matrix is retained. Default is true.", + AttributeProto::INT, + static_cast(1)) + .Input( + 0, + "X", + "Input tensor of rank 2 or higher.", + "T") + .Input( + 1, + "k", + "A 0-D tensor containing a single value corresponding to the number diagonals above or the main diagonal to exclude or include." + "Default value is 0 if it's not specified.", + "tensor(int64)", + OpSchema::Optional) + .Output( + 0, + "Y", + "Output tensor of the same type and shape as the input tensor.", + "T") + .TypeConstraint( + "T", + {"tensor(float16)", + "tensor(float)", + "tensor(double)", + "tensor(bfloat16)", + "tensor(uint8)", + "tensor(uint16)", + "tensor(uint32)", + "tensor(uint64)", + "tensor(int8)", + "tensor(int16)", + "tensor(int32)", + "tensor(int64)", + "tensor(bool)"}, + "Constrain input and output types to all numeric tensors and bool tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + using namespace ONNX_NAMESPACE; + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + if (hasInputShape(ctx, 0)) { + const TensorShapeProto& input_shape = + ctx.getInputType(0)->tensor_type().shape(); + const int rank = static_cast(input_shape.dim_size()); + if (rank < 2) { + fail_shape_inference("Input rank must be >= 2.") + } + propagateShapeFromInputToOutput(ctx, 0, 0); + } + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(BiasSoftmax, 1, + OpSchema() + .SetDoc( + "Y = softmax(scores + bias)) with simple broadcast on bias. " + "Intended to specialize softmax(scores + additive_mask) commonly found in transformer models.") + .Attr("softmax_axis", "apply softmax to elements for dimensions softmax_axis or higher", AttributeProto::INT, static_cast(1)) + .Attr("broadcast_axis", "broadcast bias across input for dimensions broadcast_axis to softmax_axis-1", AttributeProto::INT, static_cast(1)) + .Input(0, "data", "The input data as Tensor.", "T") + .Input(1, "bias", "The bias (or mask) as Tensor.", "T") + .Output(0, "output", "The output.", "T") + .TypeConstraint( + "T", + {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +ONNX_MS_OPERATOR_SET_SCHEMA(BiasDropout, 1, + OpSchema() + .SetDoc( + "output, dropout_mask = Dropout(data + bias, ratio) + residual, " + "Intended to specialize the dropout pattern commonly found in transformer models.") + .Attr("seed", "(Optional) Seed to the random generator, if not specified we will auto generate one.", AttributeProto::INT, OPTIONAL_VALUE) + .AllowUncheckedAttributes() + .Input(0, "data", "The input data as Tensor.", "T") + .Input(1, "bias", "The bias input, a vector with the same shape as last dim of data OR same shape with data", "T") + .Input(2, "residual", "The residual input, must have the same shape as data", "T", OpSchema::Optional) + .Input(3, "ratio", + "The ratio of random dropout, with value in [0, 1). If this input was not set, " + "or if it was set to 0, the output would be a simple copy of the input. " + "If it's non-zero, output will be a random dropout of input, which is typically " + "the case during training.", + "T1", + OpSchema::Optional) + .Input(4, "training_mode", + "If set to true then it indicates dropout is being used for " + "training. It is an optional value hence unless specified explicitly, it is false. " + "If it is false, ratio is ignored and the operation mimics inference mode where nothing " + "will be dropped from the input data and if mask is requested as output it will contain " + "all ones.", + "T2", + OpSchema::Optional) + .Output(0, "output", "The output.", "T") + .Output(1, "mask", "The output mask of dropout.", "T2", OpSchema::Optional) + .TypeConstraint( + "T", + {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, + "Constrain input and output types to float tensors.") + .TypeConstraint( + "T1", + {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, + "Constrain input 'ratio' types to float tensors.") + .TypeConstraint( + "T2", + {"tensor(bool)"}, + "Constrain output 'mask' types to boolean tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + propagateShapeAndTypeFromFirstInput(ctx); + if (ctx.getNumOutputs() == 2) { + updateOutputElemType(ctx, 1, ONNX_NAMESPACE::TensorProto::BOOL); + if (hasNInputShapes(ctx, 1)) { + propagateShapeFromInputToOutput(ctx, 0, 1); + } + } + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(IsAllFinite, 1, + OpSchema() + .SetSupportLevel(OpSchema::SupportType::EXPERIMENTAL) + .SetDoc("IsAllFinite") + .SetDomain(kMSDomain) + .SinceVersion(1) + .Attr("isinf_only", + "If true, check only for Inf, -Inf.", + AttributeProto::INT, + static_cast(0)) + .Attr("isnan_only", + "If true, check only for NaN.", + AttributeProto::INT, + static_cast(0)) + .TypeConstraint( + "V", + {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, + "Constrain input and output types to float tensors.") + .TypeConstraint( + "T", + {"tensor(bool)"}, + "Constrain the output to a boolean tensor.") + .Input(0, "input", "Input tensors to check.", "V", + OpSchema::Variadic) + .Output( + 0, + "output", + "The output scalar. Its value is true if all input " + "tensors are finite. Otherwise, the output value would " + "be false.", + "T") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + bool isinf_only = static_cast(getAttribute(ctx, "isinf_only", int64_t(0))); + bool isnan_only = static_cast(getAttribute(ctx, "isnan_only", int64_t(0))); + if (isinf_only && isnan_only) { + fail_shape_inference("Both attributes isinf_only and isnan_only cannot be set. Unset both to check for both conditions."); + } + updateOutputShape(ctx, 0, {}); + updateOutputElemType(ctx, 0, ONNX_NAMESPACE::TensorProto::BOOL); + })); + +constexpr const char* GridSample_ver1_doc = R"DOC( + Given an `input` and a flow-field `grid`, computes the `output` using `input` values and pixel locations from `grid`. + Currently, only spatial (4-D) inputs are supported. For `input` with shape (N, C, H, W) and `grid` with shape (N, H_out, W_out, 2), + the `output` will have shape (N, C, H_out, W_out). + For each output location `output[n, :, h, w]`, the size-2 vector `grid[n, h, w]` specifies `input` pixel locations `x` and `y`, + which are used to interpolate the output value `output[n, :, h, w]`. + The GridSample operator is often used in doing grid generator and sampler in the [Spatial Transformer Networks](https://arxiv.org/abs/1506.02025). + See also in [torch.nn.functional.grid_sample](https://pytorch.org/docs/master/generated/torch.nn.functional.grid_sample.html#torch-nn-functional-grid-sample). + )DOC"; - static const char* Tokenizer_ver1_doc = R"DOC( +ONNX_MS_OPERATOR_SET_SCHEMA(GridSample, 1, + OpSchema() + .SetDoc(GridSample_ver1_doc) + .Attr( + "mode", + "Three interpolation modes: bilinear (default), nearest and bicubic.", + AttributeProto::STRING, + std::string("bilinear")) + .Attr( + "padding_mode", + "Support padding modes for outside grid values: `zeros`(default), `border`, `reflection`. " + "zeros: use 0 for out-of-bound grid locations, " + "border: use border values for out-of-bound grid locations, " + "reflection: use values at locations reflected by the border for out-of-bound grid locations.", + AttributeProto::STRING, + std::string("zeros")) + .Attr( + "align_corners", + "If align_corners=1, the extrema (-1 and 1) are considered as referring to the center points of the input's corner pixels. " + "If align_corners=0, they are instead considered as referring to the corner points of the input's corner pixels, making the sampling more resolution agnostic.", + AttributeProto::INT, + static_cast(0)) + .Input( + 0, + "X", + "4-D tensor of shape (N, C, H, W), " + "where N is the batch size, C is the numbers of channels, " + "H and W are the height and width of the input data.", + "T1") + .Input( + 1, + "Grid", + "Input offset, 4-D tensor of shape (N, H_out, W_out, 2), " + "where H_out and W_out are the height and width of grid and output, " + "Grid specifies the sampling pixel locations normalized by the input spatial dimensions. " + "Therefore, it should have most values in the range of [-1, 1]. " + "If grid has values outside the range of [-1, 1], the corresponding outputs will be handled as defined by padding_mode.", + "T1") + .Output( + 0, + "Y", + "4-D tensor of shape (N, C, H_out, W_out).", + "T2") + .TypeConstraint( + "T1", + OpSchema::all_tensor_types(), + "Constrain input types to all tensor types.") + .TypeConstraint( + "T2", + {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain output types to float tensors.") + .TypeAndShapeInferenceFunction([](InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + size_t input_param = 0, grid_param = 1; + + checkInputRank(ctx, input_param, 4); + checkInputRank(ctx, grid_param, 4); + + // Output dimensions, initialized to an unknown-dimension-value + Dim N, C, H_out, W_out; + + // Get value of N from dim 0 of input_param, if available + unifyInputDim(ctx, input_param, 0, N); + // Get value of C from dim 1 of input_param, if available + unifyInputDim(ctx, input_param, 1, C); + + // Get value of H_out from dim 1 of grid_param, if available + unifyInputDim(ctx, grid_param, 1, H_out); + // Get value of W_out from dim 2 of grid_param, if available + unifyInputDim(ctx, grid_param, 2, W_out); + + // set output shape: + updateOutputShape(ctx, 0, {N, C, H_out, W_out}); + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(BeamSearch, 1, + OpSchema() + .SetDoc("Beam Search for text generation. Supports GPT-2 decoder.") + .Attr("eos_token_id", "The id of the end-of-sequence token", AttributeProto::INT) + .Attr("pad_token_id", "The id of the padding token", AttributeProto::INT) + .Attr("no_repeat_ngram_size", "no repeat ngrams size", AttributeProto::INT, static_cast(0)) + .Attr("early_stopping", "early stop or not", AttributeProto::INT, static_cast(0)) + .Attr( + "body", + "The GPT-2 subgraph with input_ids, position_ids, attention_mask, past_0, past_1, ... as inputs, and logits, present_0, present_1, ... as output", + AttributeProto::GRAPH) + .Input(0, "input_ids", "The sequence used as a prompt for the generation. Shape is (batch_size, sequence_length)", "I") + .Input(1, "max_length", "The maximum length of the sequence to be generated. Shape is (1)", "I") + .Input(2, "min_length", "The minimum length below which the score of eos_token_id is set to -Inf. Shape is (1)", "I", OpSchema::Optional) + .Input(3, "num_beams", "Number of beams for beam search. 1 means no beam search. Shape is (1)", "I") + .Input(4, "num_return_sequences", "The number of returned sequences in the batch. Shape is (1)", "I") + .Input(5, "temperature", "The value used to module the next token probabilities. Accepts value > 0.0. Shape is (1)", "T") + .Input(6, "length_penalty", + "Exponential penalty to the length. Default value 1.0 means no penalty." + "Value > 1.0 encourages longer sequences, while values < 1.0 produces shorter sequences." + "Shape is (1,)", + "T", OpSchema::Optional) + .Input(7, "repetition_penalty", "The parameter for repetition penalty. Default value 1.0 means no penalty. Accepts value > 0.0. Shape is (1)", "T", OpSchema::Optional) + .Input(8, "vocab_mask", "Mask of vocabulary. Words that masked with 0 are not allowed to be generated, and 1 is allowed. Shape is (vacab_size)", "M", OpSchema::Optional) + .Input(9, "prefix_vocab_mask", "Mask of vocabulary for first step. Words that masked with 0 are not allowed to be generated, and 1 is allowed. Shape is (batch_size, vocab_size)", "M", OpSchema::Optional) + .Output(0, "sequences", "Word IDs of generated sequences. Shape is (batch_size, num_return_sequences, max_sequence_length)", "I") + .Output(1, "sequences_scores", "Final beam score of the generated sequences. Shape is (batch_size, num_return_sequences)", "T", OpSchema::Optional) + .Output(2, "scores", + "Processed beam scores for each vocabulary token at each generation step." + "Beam scores consisting of log softmax scores for each vocabulary token and sum of log softmax of previously generated tokens in this beam." + "Shape is (max_length - sequence_length, batch_size, num_beams, vocab_size)", + "T", OpSchema::Optional) + .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") + .TypeConstraint("I", {"tensor(int32)"}, "Constrain to integer types") + .TypeConstraint("M", {"tensor(int32)"}, "Constrain mask to integer types") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + BeamSearchShapeInference(ctx); + })); + + + +ONNX_MS_OPERATOR_SET_SCHEMA(SampleOp, 1, + OpSchema() + .Input(0, "X", "input", "T") + .Output(0, "Y", "output", "T") + .TypeConstraint( + "T", + ONNX_NAMESPACE::OpSchema::numeric_types_for_math_reduction(), + "Constrain to any tensor type. If the dtype attribute is not provided this must be a valid output type.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput) + .SetDoc(R"DOC( +Sample echo operator.)DOC")); + +ONNX_MS_OPERATOR_SET_SCHEMA(MaxpoolWithMask, 1, + OpSchema() + .SetDoc(R"DOC(For internal use.)DOC") + .Attr( + "auto_pad", + "", + AttributeProto::STRING, + std::string("NOTSET")) + .Attr( + "kernel_shape", + "", + AttributeProto::INTS, + OPTIONAL_VALUE) + .Attr("pads", + "", + AttributeProto::INTS, OPTIONAL_VALUE) + .Attr( + "storage_order", + "", + AttributeProto::INT, + static_cast(0)) + .Attr( + "strides", "", AttributeProto::INTS, OPTIONAL_VALUE) + .Input( + 0, + "X", + "", + "T") + .Input(1, "M", "mask", "tensor(int32)") + .Output( + 0, + "Y", + "", + "T") + .TypeConstraint("T", {"tensor(float)"}, "Constrain input0 and output types to float tensors") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); + ONNX_NAMESPACE::convPoolShapeInference(ctx, false, true, 0, 1); + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(Rfft, 1, + OpSchema() + .SetDoc(R"DOC()DOC") + .Input(0, "X", "input tensor", "T") + .Attr("signal_ndim", "", AttributeProto::INT, static_cast(1)) + .Attr("normalized", "", AttributeProto::INT, static_cast(0)) + .Attr("onesided", "", AttributeProto::INT, static_cast(1)) + .Output(0, "Y", "output tensor", "T") + .TypeConstraint("T", {"tensor(float)", "tensor(double)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.")); + +ONNX_MS_OPERATOR_SET_SCHEMA(Irfft, 1, + OpSchema() + .SetDoc(R"DOC()DOC") + .Input(0, "X", "input tensor", "T") + .Attr("signal_ndim", "", AttributeProto::INT) + .Attr("normalized", "", AttributeProto::INT, static_cast(0)) + .Attr("onesided", "", AttributeProto::INT, static_cast(1)) + .Output(0, "Y", "output tensor", "T") + .TypeConstraint("T", {"tensor(float)", "tensor(double)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.")); + +ONNX_MS_OPERATOR_SET_SCHEMA(ComplexMul, 1, + OpSchema() + .SetDoc(R"DOC()DOC") + .Input(0, "A", "input_0", "T") + .Input(1, "B", "input_1", "T") + .Output(0, "C", "output tensor", "T") + .TypeConstraint("T", {"tensor(float)", "tensor(double)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.")); + +ONNX_MS_OPERATOR_SET_SCHEMA(ComplexMulConj, 1, + OpSchema() + .SetDoc(R"DOC()DOC") + .Input(0, "A", "input_0", "T") + .Input(1, "B", "input_1", "T") + .Output(0, "C", "output tensor", "T") + .TypeConstraint("T", {"tensor(float)", "tensor(double)", "tensor(float16)"}, "Constrain input and output types to float or half tensors.")); + +ONNX_MS_OPERATOR_SET_SCHEMA(ConvTransposeWithDynamicPads, 1, + OpSchema() + .SetDoc(R"DOC()DOC") + .Attr( + "kernel_shape", + "", + AttributeProto::INTS, + OPTIONAL_VALUE) + .Attr("output_padding", + "", + AttributeProto::INTS, + OPTIONAL_VALUE) + .Attr( + "dilations", + "", + AttributeProto::INTS, + OPTIONAL_VALUE) + .Attr( + "strides", + "", + AttributeProto::INTS, + OPTIONAL_VALUE) + .Attr( + "auto_pad", + "", + AttributeProto::STRING, + std::string("NOTSET")) + .Attr( + "group", + "", + AttributeProto::INT, + static_cast(1)) + .Input( + 0, + "X", + "", + "T") + .Input( + 1, + "W", + "", + "T") + .Input(2, "Pads", "", "tensor(int64)", OpSchema::Optional) + .Input(3, "B", "", "T", OpSchema::Optional) + .Output( + 0, + "Y", + "", + "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::convTransposeWithDynamicPadsShapeInference)); + +ONNX_MS_OPERATOR_SET_SCHEMA(FusedConv, 1, + OpSchema() + .SetDoc(R"DOC( +The fused convolution operator schema is the same as Conv besides it includes an attribute +activation.)DOC") + .Attr( + "auto_pad", + "", + AttributeProto::STRING, + std::string("NOTSET")) + .Attr( + "kernel_shape", + "", + AttributeProto::INTS, + OPTIONAL_VALUE) + .Attr( + "dilations", + "", + AttributeProto::INTS, + OPTIONAL_VALUE) + .Attr( + "strides", + "", + AttributeProto::INTS, + OPTIONAL_VALUE) + .Attr( + "pads", + "", + AttributeProto::INTS, + OPTIONAL_VALUE) + .Attr( + "group", + "", + AttributeProto::INT, + static_cast(1)) + .Attr( + "activation", + "", + AttributeProto::STRING, + OPTIONAL_VALUE) + .Attr( + "activation_params", + "", + AttributeProto::FLOATS, + OPTIONAL_VALUE) + .Input( + 0, + "X", + "", + "T") + .Input( + 1, + "W", + "", + "T") + .Input( + 2, + "B", + "", + "T", + OpSchema::Optional) + .Input( + 3, + "Z", + "", + "T", + OpSchema::Optional) + .Output( + 0, + "Y", + "", + "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, "Constrain input and output types to float tensors") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); + ONNX_NAMESPACE::convPoolShapeInference(ctx, true, false, 0, 1); + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(FusedGemm, 1, + OpSchema() + .SetDoc(R"DOC( +The FusedGemm operator schema is the same as Gemm besides it includes attributes +activation and leaky_relu_alpha.)DOC") + .Input( + 0, + "A", + "Input tensor A. " + "The shape of A should be (M, K) if transA is 0, " + "or (K, M) if transA is non-zero.", + "T") + .Input( + 1, + "B", + "Input tensor B. " + "The shape of B should be (K, N) if transB is 0, " + "or (N, K) if transB is non-zero.", + "T") + .Input( + 2, + "C", + "Input tensor C. " + "The shape of C should be unidirectional broadcastable to (M, N).", + "T") + .Output(0, "Y", "Output tensor of shape (M, N).", "T") + .TypeConstraint( + "T", + {"tensor(float16)", + "tensor(float)", + "tensor(double)", + "tensor(uint32)", + "tensor(uint64)", + "tensor(int32)", + "tensor(int64)"}, + "Constrain input and output types to float/int tensors.") + .Attr( + "transA", + "Whether A should be transposed", + AttributeProto::INT, + static_cast(0)) + .Attr( + "transB", + "Whether B should be transposed", + AttributeProto::INT, + static_cast(0)) + .Attr( + "alpha", + "Scalar multiplier for the product of input tensors A * B.", + AttributeProto::FLOAT, + 1.0f) + .Attr( + "beta", + "Scalar multiplier for input tensor C.", + AttributeProto::FLOAT, + 1.0f) + .Attr( + "activation", + "", + AttributeProto::STRING, + OPTIONAL_VALUE) + .Attr( + "activation_alpha", + "", + AttributeProto::FLOAT, + OPTIONAL_VALUE) + .Attr( + "activation_beta", + "", + AttributeProto::FLOAT, + OPTIONAL_VALUE) + .Attr( + "activation_gamma", + "", + AttributeProto::FLOAT, + OPTIONAL_VALUE) + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 0, 0); + if (hasNInputShapes(ctx, 2)) { + auto transAAttr = ctx.getAttribute("transA"); + bool transA = + transAAttr ? static_cast(transAAttr->i()) != 0 : false; + auto transBAttr = ctx.getAttribute("transB"); + bool transB = + transBAttr ? static_cast(transBAttr->i()) != 0 : false; + auto& first_input_shape = getInputShape(ctx, 0); + auto& second_input_shape = getInputShape(ctx, 1); + if (first_input_shape.dim_size() != 2) + fail_shape_inference("First input does not have rank 2"); + if (second_input_shape.dim_size() != 2) + fail_shape_inference("Second input does not have rank 2"); + updateOutputShape( + ctx, + 0, + {first_input_shape.dim(transA ? 1 : 0), + second_input_shape.dim(transB ? 0 : 1)}); + } + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(ExpandDims, 1, + OpSchema() + .Input(0, "X", "input", "T") + .Input(1, "axis", "Specified axis to insert a dimension", "tensor(int32)") + .Output(0, "Y", "output", "T") + .TypeConstraint( + "T", + ONNX_NAMESPACE::OpSchema::all_tensor_types(), + "Constrain to any tensor type. If the dtype attribute is not provided this must be a valid output type.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + // Type inference + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + // Shape inference + if (!hasInputShape(ctx, 0)) + return; + + auto& input_shape = getInputShape(ctx, 0); + const int rank = input_shape.dim_size(); + const ONNX_NAMESPACE::TensorProto* axis_initializer = ctx.getInputData(1); + if (!axis_initializer) + return; + const int axis = axis_initializer->int32_data()[0]; + if (axis > rank || axis < -rank - 1) { + fail_shape_inference("Input axis is invalid: ", axis); + } + int pos = axis >= 0 ? axis : rank + axis - 1; + ONNX_NAMESPACE::TensorShapeProto output_shape; + for (int i = 0; i < pos; ++i) { + output_shape.add_dim(); + *(output_shape.mutable_dim(i)) = input_shape.dim(i); + } + output_shape.add_dim(); + output_shape.mutable_dim(pos)->set_dim_value(1); + for (int i = pos + 1; i < rank + 1; ++i) { + output_shape.add_dim(); + *(output_shape.mutable_dim(i)) = input_shape.dim(i - 1); + } + updateOutputShape(ctx, 0, output_shape); + }) + .SetDoc(R"DOC(ExpandDims echo operator.)DOC")); + +constexpr const char* Tokenizer_ver1_doc = R"DOC( Tokenizer divides each string in X into a vector of strings along the last axis. Allowed input shapes are [C] and [N, C]. If the maximum number of tokens found per input string is D, the output shape would be [N, C, D] when input shape is [N, C]. Similarly, if input shape is [C] then the output should be [C, D]. Tokenizer has two different operation modes. @@ -1994,298 +1345,291 @@ If the tokenizer receives empty input of [0] then the output is [0] if empty inp of [N, 0] then [N, 0]. )DOC"; - ONNX_CONTRIB_OPERATOR_SCHEMA(Tokenizer) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "X", "Strings to tokenize", "T") - .Output(0, "Y", "Tokenized strings", "T") - .TypeConstraint( - "T", - {"tensor(string)"}, - "Input/Output is a string tensor") - .Attr( - "mark", - "Boolean whether to mark the beginning/end character with start of text character (0x02)/end of text character (0x03).", - AttributeProto::INT) - .Attr( - "pad_value", - "The string used to pad output tensors when the tokens extracted doesn't match the maximum number of tokens found. If start/end markers are needed, padding will appear outside the markers.", - AttributeProto::STRING) - .Attr( - "tokenexp", - "An optional string. Token's regular expression in basic POSIX format" - " (pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03)." - " If set, tokenizer may produce tokens matching the specified pattern. Note that one and only of" - " 'tokenexp' and 'separators' should be set.", - AttributeProto::STRING, - OPTIONAL_VALUE) - .Attr( - "separators", - "an optional list of strings attribute that contains a list of separators - regular expressions to match separators" - " Two consecutive segments in X connected by a separator would be divided into two tokens." - " For example, if the input is \"Hello World!\" and this attribute contains only one space character," - " the corresponding output would be [\"Hello\", \"World!\"]. To achieve character-level tokenization," - " one should set the 'separators' to [\"\"], which contains an empty string.", - AttributeProto::STRINGS, - OPTIONAL_VALUE) - .Attr( - "mincharnum", - "Minimum number of characters allowed in the output. For example, if mincharnum is 2, tokens such as \"A\" and \"B\" would be ignored", - AttributeProto::INT) - .SetDoc(Tokenizer_ver1_doc) - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 0, 0); - - // Shape inference - if (!hasInputShape(ctx, 0)) - return; - - ONNX_NAMESPACE::TensorShapeProto output_shape; - auto& input_shape = getInputShape(ctx, 0); - auto& dims = input_shape.dim(); - if (dims.size() < 1 || dims.size() > 2) { - fail_shape_inference("Input dimensions are either [C] or [N][C] allowed"); - } - - int64_t size = 1; - for (auto& dim : dims) { - if (utils::HasDimValue(dim)) { - size *= dim.dim_value(); - } - } - - if (size > 0) { - for (auto& dim : dims) { - *output_shape.add_dim() = dim; - } - // Add the last unknown dimension - // only if the input is not empty - output_shape.add_dim(); - } else if (size == 0) { - if (dims.size() == 2) { - *output_shape.add_dim() = dims[0]; - } - output_shape.add_dim()->set_dim_value(0); - } - updateOutputShape(ctx, 0, output_shape); - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(MatMulInteger16) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC( +ONNX_MS_OPERATOR_SET_SCHEMA(Tokenizer, 1, + OpSchema() + .Input(0, "X", "Strings to tokenize", "T") + .Output(0, "Y", "Tokenized strings", "T") + .TypeConstraint( + "T", + {"tensor(string)"}, + "Input/Output is a string tensor") + .Attr( + "mark", + "Boolean whether to mark the beginning/end character with start of text character (0x02)/end of text character (0x03).", + AttributeProto::INT) + .Attr( + "pad_value", + "The string used to pad output tensors when the tokens extracted doesn't match the maximum number of tokens found. If start/end markers are needed, padding will appear outside the markers.", + AttributeProto::STRING) + .Attr( + "tokenexp", + "An optional string. Token's regular expression in basic POSIX format" + " (pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03)." + " If set, tokenizer may produce tokens matching the specified pattern. Note that one and only of" + " 'tokenexp' and 'separators' should be set.", + AttributeProto::STRING, + OPTIONAL_VALUE) + .Attr( + "separators", + "an optional list of strings attribute that contains a list of separators - regular expressions to match separators" + " Two consecutive segments in X connected by a separator would be divided into two tokens." + " For example, if the input is \"Hello World!\" and this attribute contains only one space character," + " the corresponding output would be [\"Hello\", \"World!\"]. To achieve character-level tokenization," + " one should set the 'separators' to [\"\"], which contains an empty string.", + AttributeProto::STRINGS, + OPTIONAL_VALUE) + .Attr( + "mincharnum", + "Minimum number of characters allowed in the output. For example, if mincharnum is 2, tokens such as \"A\" and \"B\" would be ignored", + AttributeProto::INT) + .SetDoc(Tokenizer_ver1_doc) + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + // Shape inference + if (!hasInputShape(ctx, 0)) + return; + + ONNX_NAMESPACE::TensorShapeProto output_shape; + auto& input_shape = getInputShape(ctx, 0); + auto& dims = input_shape.dim(); + if (dims.size() < 1 || dims.size() > 2) { + fail_shape_inference("Input dimensions are either [C] or [N][C] allowed"); + } + + int64_t size = 1; + for (auto& dim : dims) { + if (utils::HasDimValue(dim)) { + size *= dim.dim_value(); + } + } + + if (size > 0) { + for (auto& dim : dims) { + *output_shape.add_dim() = dim; + } + // Add the last unknown dimension + // only if the input is not empty + output_shape.add_dim(); + } else if (size == 0) { + if (dims.size() == 2) { + *output_shape.add_dim() = dims[0]; + } + output_shape.add_dim()->set_dim_value(0); + } + updateOutputShape(ctx, 0, output_shape); + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(MatMulInteger16, 1, + OpSchema() + .SetDoc(R"DOC( Matrix product that behaves like numpy.matmul: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.matmul.html. The production MUST never overflow. The accumulation may overflow if and only if in 32 bits.)DOC") - .Input(0, "A", "N-dimensional matrix A", "T1") - .Input(1, "B", "N-dimensional matrix B", "T2") - .Output(0, "Y", "Matrix multiply results from A * B", "T3") - .TypeConstraint("T1", {"tensor(int16)", "tensor(uint16)"}, "Constrain input A data types as 16-bit integer tensor") - .TypeConstraint("T2", {"tensor(int16)", "tensor(uint16)"}, "Constrain input B data types as 16-bit integer tensor") - .TypeConstraint("T3", - {"tensor(int32)", "tensor(uint32)"}, - "Constrain output Y data types as 32-bit integer tensor." - "T3 must be tensor(uint32) when both T1 and T2 are tensor(uint16)," - "or must be tensor(int32) when either T1 or T2 is tensor(int16).") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - auto a_type = ctx.getInputType(0); - auto b_type = ctx.getInputType(1); - auto y_type = ctx.getOutputType(0); - if (nullptr == a_type || nullptr == b_type || nullptr == y_type || - a_type->value_case() != ONNX_NAMESPACE::TypeProto::kTensorType || - b_type->value_case() != ONNX_NAMESPACE::TypeProto::kTensorType) { - fail_type_inference( - "inputs are expected to have tensor type and output type should not be null."); - } - - // Right now we only support int32 - y_type->mutable_tensor_type()->set_elem_type(ONNX_NAMESPACE::TensorProto::INT32); - - ONNX_NAMESPACE::matmulShapeInference(ctx, 0, 1); - }); - - static const char* TransposeMatMul_doc = R"DOC( + .Input(0, "A", "N-dimensional matrix A", "T1") + .Input(1, "B", "N-dimensional matrix B", "T2") + .Output(0, "Y", "Matrix multiply results from A * B", "T3") + .TypeConstraint("T1", {"tensor(int16)", "tensor(uint16)"}, "Constrain input A data types as 16-bit integer tensor") + .TypeConstraint("T2", {"tensor(int16)", "tensor(uint16)"}, "Constrain input B data types as 16-bit integer tensor") + .TypeConstraint("T3", + {"tensor(int32)", "tensor(uint32)"}, + "Constrain output Y data types as 32-bit integer tensor." + "T3 must be tensor(uint32) when both T1 and T2 are tensor(uint16)," + "or must be tensor(int32) when either T1 or T2 is tensor(int16).") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + auto a_type = ctx.getInputType(0); + auto b_type = ctx.getInputType(1); + auto y_type = ctx.getOutputType(0); + if (nullptr == a_type || nullptr == b_type || nullptr == y_type || + a_type->value_case() != ONNX_NAMESPACE::TypeProto::kTensorType || + b_type->value_case() != ONNX_NAMESPACE::TypeProto::kTensorType) { + fail_type_inference( + "inputs are expected to have tensor type and output type should not be null."); + } + + // Right now we only support int32 + y_type->mutable_tensor_type()->set_elem_type(ONNX_NAMESPACE::TensorProto::INT32); + + ONNX_NAMESPACE::matmulShapeInference(ctx, 0, 1); + })); + +constexpr const char* TransposeMatMul_doc = R"DOC( Duplicate of FusedMatMul. Going forward FusedMatMul should be used. This OP will be supported for backward compatibility. Matrix product that behaves like numpy.matmul: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.matmul.html )DOC"; - static const char* FusedMatMul_doc = R"DOC( +constexpr const char* FusedMatMul_doc = R"DOC( Matrix product that behaves like numpy.matmul: https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.matmul.html )DOC"; - ONNX_CONTRIB_OPERATOR_SCHEMA(TransposeMatMul) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "A", "N-dimensional matrix A", "T") - .Input(1, "B", "N-dimensional matrix B", "T") - .Attr( - "alpha", - "Scalar multiplier for the product of the input tensors.", - AttributeProto::FLOAT, - 1.0f) - .Attr( - "transA", - "Whether A should be transposed on the last two dimensions before doing multiplication", - AttributeProto::INT, - static_cast(0)) - .Attr( - "transB", - "Whether B should be transposed on the last two dimensions before doing multiplication", - AttributeProto::INT, - static_cast(0)) - .Output(0, "Y", "Matrix multiply results", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, - "Constrain input and output types to float tensors.") - .SetDoc(TransposeMatMul_doc) - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - FusedMatMulShapeInference(ctx); - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(FusedMatMul) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "A", "N-dimensional matrix A", "T") - .Input(1, "B", "N-dimensional matrix B", "T") - .Attr("alpha", "Scalar multiplier for the product of the input tensors.", AttributeProto::FLOAT, 1.0f) - .Attr("transA", "Whether A should be transposed on the last two dimensions before doing multiplication", - AttributeProto::INT, static_cast(0)) - .Attr("transB", "Whether B should be transposed on the last two dimensions before doing multiplication", - AttributeProto::INT, static_cast(0)) - .Attr("transBatchA", - "Whether A should be transposed on the 1st dimension and batch dimensions (dim-1 to dim-rank-2) before " - "doing multiplication", - AttributeProto::INT, static_cast(0)) - .Attr("transBatchB", - "Whether B should be transposed on the 1st dimension and batch dimensions (dim-1 to dim-rank-2) before " - "doing multiplication", - AttributeProto::INT, static_cast(0)) - .Output(0, "Y", "Matrix multiply results", "T") - .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, - "Constrain input and output types to float tensors.") - .SetDoc(FusedMatMul_doc) - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { FusedMatMulShapeInference(ctx); }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(SparseToDenseMatMul) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "A", "2-dimensional sparse matrix A. Either COO or CSR format", "T") - .Input(1, "B", "N-dimensional dense matrix B", "T1") - .Attr( - "alpha", - "Scalar multiplier for the product of the input tensors.", - AttributeProto::FLOAT, - 1.0f) - .Attr( - "transA", - "Whether A should be transposed on the last two dimensions before doing multiplication", - AttributeProto::INT, - static_cast(0)) - .Attr( - "transB", - "Whether B should be transposed on the last two dimensions before doing multiplication", - AttributeProto::INT, - static_cast(0)) - .Output(0, "Y", "Matrix multiply results", "T1") - .TypeConstraint( - "T", - {"sparse_tensor(float)", "sparse_tensor(double)", "sparse_tensor(int64)", "sparse_tensor(int32)", - "sparse_tensor(uint64)", "sparse_tensor(uint32)"}, - "Constrain input and output types to float tensors.") - .TypeConstraint( - "T1", - {"tensor(float)", "tensor(double)", "tensor(int64)", "tensor(int32)", - "tensor(uint64)", "tensor(uint32)"}, - "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - // 1- dense tensor to output - propagateElemTypeFromInputToOutput(ctx, 1, 0); - // TODO: replace with ONNX one when that one is fixed - sparseCompatibleMatmulShapeInference(ctx, 0, 1); - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(MurmurHash3) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC(The underlying implementation is MurmurHash3_x86_32 generating low latency 32bits hash suitable for implementing lookup tables, Bloom filters, count min sketch or feature hashing.)DOC") - .Input(0, "X", "An input tensor to hash.", "T1") - .Output(0, "Y", "32-bit hash value.", "T2") - .TypeConstraint("T1", {"tensor(uint32)", "tensor(int32)", "tensor(uint64)", "tensor(int64)", "tensor(float)", "tensor(double)", "tensor(string)"}, "Constrain input type to unsigned or signed 32-bit integer tensor, or string tensor. It should be utf-8 encoded if using unicode.") - .TypeConstraint("T2", {"tensor(uint32)", "tensor(int32)"}, "Constrain output type to unsigned and signed 32-bit integer tensor.") - .Attr( - "seed", - "Seed for the hashing algorithm, unsigned 32-bit integer, default to 0.", - AttributeProto::INT, - (int64_t)0LL) - .Attr( - "positive", - "If value is 1, output type is uint32_t, else int32_t. Default value is 1.", - AttributeProto::INT, - (int64_t)1LL) - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - // type inference - auto positive_attr = ctx.getAttribute("positive"); - bool is_positive = - positive_attr ? (static_cast(positive_attr->i()) == 1 ? true : false) : true /* default value if attribute not present */; - auto output_data_type = ctx.getOutputType(0)->mutable_tensor_type(); - if (is_positive) { - output_data_type->set_elem_type(::ONNX_NAMESPACE::TensorProto_DataType::TensorProto_DataType_UINT32); - } else { - output_data_type->set_elem_type(::ONNX_NAMESPACE::TensorProto_DataType::TensorProto_DataType_INT32); - } - - // Shape inference - if (!hasInputShape(ctx, 0)) - return; - - auto& input_shape = getInputShape(ctx, 0); - updateOutputShape(ctx, 0, input_shape); - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(GatherND) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "data", "Tensor of rank r >= 1.", "T") - .Input(1, "indices", "Tensor of rank q >= 1.", "Tind") - .Output(0, "output", "Tensor of rank q-1+r-indices[-1].", "T") - .TypeConstraint( - "T", - OpSchema::all_tensor_types(), - "Constrain input and output types to any tensor type.") - .TypeConstraint( - "Tind", - {"tensor(int32)", "tensor(int64)"}, - "Constrain indice type to int32 or int64") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 0, 0); - if (!hasNInputShapes(ctx, 2)) { - return; - } - auto& data_shape = ctx.getInputType(0)->tensor_type().shape(); - auto& indices_shape = ctx.getInputType(1)->tensor_type().shape(); - auto data_rank = data_shape.dim_size(); - auto indices_rank = indices_shape.dim_size(); - if (data_rank < 1 || indices_rank < 1) { - fail_shape_inference("both data and indices tensor need to have rank larger than zero."); - } - auto last_indice_dimension = indices_shape.dim(indices_rank - 1).dim_value(); - if (last_indice_dimension > data_rank) { - fail_shape_inference("last dimension of indices must not be larger and rank of data tensor"); - } - for (int i = 0; i < indices_rank - 1; ++i) { - *ctx.getOutputType(0) - ->mutable_tensor_type() - ->mutable_shape() - ->add_dim() = indices_shape.dim(i); - } - for (int i = static_cast(last_indice_dimension); i < data_rank; ++i) { - *ctx.getOutputType(0) - ->mutable_tensor_type() - ->mutable_shape() - ->add_dim() = data_shape.dim(i); - } - }) - .SetDoc(R"DOC( +ONNX_MS_OPERATOR_SET_SCHEMA(TransposeMatMul, 1, + OpSchema() + .Input(0, "A", "N-dimensional matrix A", "T") + .Input(1, "B", "N-dimensional matrix B", "T") + .Attr( + "alpha", + "Scalar multiplier for the product of the input tensors.", + AttributeProto::FLOAT, + 1.0f) + .Attr( + "transA", + "Whether A should be transposed on the last two dimensions before doing multiplication", + AttributeProto::INT, + static_cast(0)) + .Attr( + "transB", + "Whether B should be transposed on the last two dimensions before doing multiplication", + AttributeProto::INT, + static_cast(0)) + .Output(0, "Y", "Matrix multiply results", "T") + .TypeConstraint( + "T", + {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, + "Constrain input and output types to float tensors.") + .SetDoc(TransposeMatMul_doc) + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + FusedMatMulShapeInference(ctx); + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(FusedMatMul, 1, + OpSchema() + .Input(0, "A", "N-dimensional matrix A", "T") + .Input(1, "B", "N-dimensional matrix B", "T") + .Attr("alpha", "Scalar multiplier for the product of the input tensors.", AttributeProto::FLOAT, 1.0f) + .Attr("transA", "Whether A should be transposed on the last two dimensions before doing multiplication", + AttributeProto::INT, static_cast(0)) + .Attr("transB", "Whether B should be transposed on the last two dimensions before doing multiplication", + AttributeProto::INT, static_cast(0)) + .Attr("transBatchA", + "Whether A should be transposed on the 1st dimension and batch dimensions (dim-1 to dim-rank-2) before " + "doing multiplication", + AttributeProto::INT, static_cast(0)) + .Attr("transBatchB", + "Whether B should be transposed on the 1st dimension and batch dimensions (dim-1 to dim-rank-2) before " + "doing multiplication", + AttributeProto::INT, static_cast(0)) + .Output(0, "Y", "Matrix multiply results", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, + "Constrain input and output types to float tensors.") + .SetDoc(FusedMatMul_doc) + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { FusedMatMulShapeInference(ctx); })); + +ONNX_MS_OPERATOR_SET_SCHEMA(SparseToDenseMatMul, 1, + OpSchema() + .Input(0, "A", "2-dimensional sparse matrix A. Either COO or CSR format", "T") + .Input(1, "B", "N-dimensional dense matrix B", "T1") + .Attr( + "alpha", + "Scalar multiplier for the product of the input tensors.", + AttributeProto::FLOAT, + 1.0f) + .Attr( + "transA", + "Whether A should be transposed on the last two dimensions before doing multiplication", + AttributeProto::INT, + static_cast(0)) + .Attr( + "transB", + "Whether B should be transposed on the last two dimensions before doing multiplication", + AttributeProto::INT, + static_cast(0)) + .Output(0, "Y", "Matrix multiply results", "T1") + .TypeConstraint( + "T", + {"sparse_tensor(float)", "sparse_tensor(double)", "sparse_tensor(int64)", "sparse_tensor(int32)", + "sparse_tensor(uint64)", "sparse_tensor(uint32)"}, + "Constrain input and output types to float tensors.") + .TypeConstraint( + "T1", + {"tensor(float)", "tensor(double)", "tensor(int64)", "tensor(int32)", + "tensor(uint64)", "tensor(uint32)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + // 1- dense tensor to output + propagateElemTypeFromInputToOutput(ctx, 1, 0); + // TODO: replace with ONNX one when that one is fixed + sparseCompatibleMatmulShapeInference(ctx, 0, 1); + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(MurmurHash3, 1, + OpSchema() + .SetDoc(R"DOC(The underlying implementation is MurmurHash3_x86_32 generating low latency 32bits hash suitable for implementing lookup tables, Bloom filters, count min sketch or feature hashing.)DOC") + .Input(0, "X", "An input tensor to hash.", "T1") + .Output(0, "Y", "32-bit hash value.", "T2") + .TypeConstraint("T1", {"tensor(uint32)", "tensor(int32)", "tensor(uint64)", "tensor(int64)", "tensor(float)", "tensor(double)", "tensor(string)"}, "Constrain input type to unsigned or signed 32-bit integer tensor, or string tensor. It should be utf-8 encoded if using unicode.") + .TypeConstraint("T2", {"tensor(uint32)", "tensor(int32)"}, "Constrain output type to unsigned and signed 32-bit integer tensor.") + .Attr( + "seed", + "Seed for the hashing algorithm, unsigned 32-bit integer, default to 0.", + AttributeProto::INT, + (int64_t)0LL) + .Attr( + "positive", + "If value is 1, output type is uint32_t, else int32_t. Default value is 1.", + AttributeProto::INT, + (int64_t)1LL) + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + // type inference + auto positive_attr = ctx.getAttribute("positive"); + bool is_positive = + positive_attr ? (static_cast(positive_attr->i()) == 1 ? true : false) : true /* default value if attribute not present */; + auto output_data_type = ctx.getOutputType(0)->mutable_tensor_type(); + if (is_positive) { + output_data_type->set_elem_type(::ONNX_NAMESPACE::TensorProto_DataType::TensorProto_DataType_UINT32); + } else { + output_data_type->set_elem_type(::ONNX_NAMESPACE::TensorProto_DataType::TensorProto_DataType_INT32); + } + + // Shape inference + if (!hasInputShape(ctx, 0)) + return; + + auto& input_shape = getInputShape(ctx, 0); + updateOutputShape(ctx, 0, input_shape); + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(GatherND, 1, + OpSchema() + .Input(0, "data", "Tensor of rank r >= 1.", "T") + .Input(1, "indices", "Tensor of rank q >= 1.", "Tind") + .Output(0, "output", "Tensor of rank q-1+r-indices[-1].", "T") + .TypeConstraint( + "T", + OpSchema::all_tensor_types(), + "Constrain input and output types to any tensor type.") + .TypeConstraint( + "Tind", + {"tensor(int32)", "tensor(int64)"}, + "Constrain indice type to int32 or int64") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 0, 0); + if (!hasNInputShapes(ctx, 2)) { + return; + } + auto& data_shape = ctx.getInputType(0)->tensor_type().shape(); + auto& indices_shape = ctx.getInputType(1)->tensor_type().shape(); + auto data_rank = data_shape.dim_size(); + auto indices_rank = indices_shape.dim_size(); + if (data_rank < 1 || indices_rank < 1) { + fail_shape_inference("both data and indices tensor need to have rank larger than zero."); + } + auto last_indice_dimension = indices_shape.dim(indices_rank - 1).dim_value(); + if (last_indice_dimension > data_rank) { + fail_shape_inference("last dimension of indices must not be larger and rank of data tensor"); + } + for (int i = 0; i < indices_rank - 1; ++i) { + *ctx.getOutputType(0) + ->mutable_tensor_type() + ->mutable_shape() + ->add_dim() = indices_shape.dim(i); + } + for (int i = static_cast(last_indice_dimension); i < data_rank; ++i) { + *ctx.getOutputType(0) + ->mutable_tensor_type() + ->mutable_shape() + ->add_dim() = data_shape.dim(i); + } + }) + .SetDoc(R"DOC( Given `data` tensor of rank r >= 1, and `indices` tensor of rank q >= 1, gather slices of `data` into an output tensor of rank q - 1 + r - indices[-1]. Example 1: @@ -2304,137 +1648,135 @@ Example 4: data = [[[0,1],[2,3]],[[4,5],[6,7]]] indices = [[[0,1]],[[1,0]]] output = [[[2,3]],[[4,5]]] -)DOC"); - - ONNX_CONTRIB_OPERATOR_SCHEMA(WordConvEmbedding) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Attr( - "embedding_size", - "Integer representing the embedding vector size for each word." - "If not provide, use the fileter size of conv weight", - AttributeProto::INT, - OPTIONAL_VALUE) - .Attr( - "conv_window_size", - "This operator applies convolution to word from left to right with window equal to conv_window_size and stride to 1." - "Take word 'example' for example, with conv_window_size equal to 2, conv is applied to [ex],[xa], [am], [mp]..." - "If not provide, use the first dimension of conv kernal shape.", - AttributeProto::INT, - OPTIONAL_VALUE) - .Attr( - "char_embedding_size", - "Integer representing the embedding vector size for each char." - "If not provide, use the char embedding size of embedding vector.", - AttributeProto::INT, - OPTIONAL_VALUE) - .Input(0, "Sequence", "Specify batchs of sequence words to embedding", "T") - .Input(1, "W", "Specify weights of conv", "T1") - .Input(2, "B", "Specify bias of conv", "T1") - .Input(3, "C", "Specify embedding vector of char", "T1") - .Output(0, "Y", "output", "T1") - .TypeConstraint( - "T", - {"tensor(int32)"}, - "Constrain to tensor(int32).") - .TypeConstraint( - "T1", - {"tensor(float)"}, - "Constrain to tensor(float).") - .SetDoc(R"DOC(The WordConvEmbedding takes in a batch of sequence words and embed each word to a vector.)DOC"); - - ONNX_CONTRIB_OPERATOR_SCHEMA(Pad) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Attr( - "mode", - "Three modes: `constant`(default) - pads with a given constant value, " - "`reflect` - pads with the reflection of the vector mirrored on the first and last values of the vector along each axis, " - "`edge` - pads with the edge values of array", - AttributeProto::STRING, - std::string("constant")) - .Input(0, "data", "Input tensor.", "T") - .Input( - 1, - "pads", - "Tensor of integers indicating the number of padding elements to add or remove (if negative) " - "at the beginning and end of each axis. For 2D input tensor, it is the number of pixels. " - "`pads` should be a 1D tensor of shape [2 * input_rank] or a 2D tensor of shape [1, 2 * input_rank]. " - "`pads` format (1D example) should be as follow [x1_begin, x2_begin,...,x1_end, x2_end,...], " - "where xi_begin is the number of pixels added at the beginning of axis `i` and " - "xi_end, the number of pixels added at the end of axis `i`.", - "tensor(int64)") - .Input( - 2, - "value", - "(Optional) A scalar or rank 1 tensor containing a single value to be filled if the mode chosen is `constant` (by default it is 0.0).", - "T", - OpSchema::Optional) - .Output(0, "output", "Tensor after padding.", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - // Type inference - propagateElemTypeFromInputToOutput(ctx, 0, 0); - // Shape inference needs the input data shape - if (!hasNInputShapes(ctx, 1)) { - return; - } - const auto& input_shape = ctx.getInputType(0)->tensor_type().shape(); - const auto input_rank = input_shape.dim_size(); - - // Infer output shape if 'pads' tensor is available - const auto* pads_initializer = ctx.getInputData(1); - if (nullptr != pads_initializer) { - const auto& pads_shape = ctx.getInputType(1)->tensor_type().shape(); - if ((pads_initializer->dims_size() != 1 && - pads_initializer->dims_size() != 2) || - (pads_initializer->dims_size() == 2 && - pads_shape.dim(static_cast(0)).dim_value() != 1) || - pads_initializer->data_type() != ONNX_NAMESPACE::TensorProto::INT64) - fail_shape_inference( - "'pads' input must be a 1D (shape: [input_rank]) " - "or 2D tensor (shape: [1, input_rank]) of type int64"); - - // make a copy of the returned const vector - may have to resize - // this in next step - std::vector pads_data; - if (utils::HasRawData(*pads_initializer)) - return; - else - pads_data.insert( - pads_data.end(), - pads_initializer->int64_data().begin(), - pads_initializer->int64_data().end()); - - // fill with zeros if needed to reach appropriate size - if (pads_data.size() != 2 * static_cast(input_rank)) - pads_data.resize(size_t{2} * input_rank, 0); - - const auto& output_shape = - ctx.getOutputType(0)->mutable_tensor_type()->mutable_shape(); - for (size_t i = 0; static_cast(i) < input_rank; ++i) { - const auto& input_dim = input_shape.dim(static_cast(i)); - auto* output_dim = output_shape->add_dim(); - if (utils::HasDimValue(input_dim)) { - output_dim->set_dim_value( - input_dim.dim_value() + pads_data[i] + pads_data[i + input_rank]); - } else if (pads_data[i] + pads_data[i + input_rank] == 0) { - *output_dim = input_dim; - } - } - } else { - // Infer output shapes' rank in any case - auto* output_shape_0 = getOutputShape(ctx, 0); - for (size_t i = 0; static_cast(i) < input_rank; ++i) { - output_shape_0->add_dim(); - } - } - return; - }) - .SetDoc(R"DOC( +)DOC")); + +ONNX_MS_OPERATOR_SET_SCHEMA(WordConvEmbedding, 1, + OpSchema() + .Attr( + "embedding_size", + "Integer representing the embedding vector size for each word." + "If not provide, use the fileter size of conv weight", + AttributeProto::INT, + OPTIONAL_VALUE) + .Attr( + "conv_window_size", + "This operator applies convolution to word from left to right with window equal to conv_window_size and stride to 1." + "Take word 'example' for example, with conv_window_size equal to 2, conv is applied to [ex],[xa], [am], [mp]..." + "If not provide, use the first dimension of conv kernal shape.", + AttributeProto::INT, + OPTIONAL_VALUE) + .Attr( + "char_embedding_size", + "Integer representing the embedding vector size for each char." + "If not provide, use the char embedding size of embedding vector.", + AttributeProto::INT, + OPTIONAL_VALUE) + .Input(0, "Sequence", "Specify batchs of sequence words to embedding", "T") + .Input(1, "W", "Specify weights of conv", "T1") + .Input(2, "B", "Specify bias of conv", "T1") + .Input(3, "C", "Specify embedding vector of char", "T1") + .Output(0, "Y", "output", "T1") + .TypeConstraint( + "T", + {"tensor(int32)"}, + "Constrain to tensor(int32).") + .TypeConstraint( + "T1", + {"tensor(float)"}, + "Constrain to tensor(float).") + .SetDoc(R"DOC(The WordConvEmbedding takes in a batch of sequence words and embed each word to a vector.)DOC")); + +ONNX_MS_OPERATOR_SET_SCHEMA(Pad, 1, + OpSchema() + .Attr( + "mode", + "Three modes: `constant`(default) - pads with a given constant value, " + "`reflect` - pads with the reflection of the vector mirrored on the first and last values of the vector along each axis, " + "`edge` - pads with the edge values of array", + AttributeProto::STRING, + std::string("constant")) + .Input(0, "data", "Input tensor.", "T") + .Input( + 1, + "pads", + "Tensor of integers indicating the number of padding elements to add or remove (if negative) " + "at the beginning and end of each axis. For 2D input tensor, it is the number of pixels. " + "`pads` should be a 1D tensor of shape [2 * input_rank] or a 2D tensor of shape [1, 2 * input_rank]. " + "`pads` format (1D example) should be as follow [x1_begin, x2_begin,...,x1_end, x2_end,...], " + "where xi_begin is the number of pixels added at the beginning of axis `i` and " + "xi_end, the number of pixels added at the end of axis `i`.", + "tensor(int64)") + .Input( + 2, + "value", + "(Optional) A scalar or rank 1 tensor containing a single value to be filled if the mode chosen is `constant` (by default it is 0.0).", + "T", + OpSchema::Optional) + .Output(0, "output", "Tensor after padding.", "T") + .TypeConstraint( + "T", + {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + // Type inference + propagateElemTypeFromInputToOutput(ctx, 0, 0); + // Shape inference needs the input data shape + if (!hasNInputShapes(ctx, 1)) { + return; + } + const auto& input_shape = ctx.getInputType(0)->tensor_type().shape(); + const auto input_rank = input_shape.dim_size(); + + // Infer output shape if 'pads' tensor is available + const auto* pads_initializer = ctx.getInputData(1); + if (nullptr != pads_initializer) { + const auto& pads_shape = ctx.getInputType(1)->tensor_type().shape(); + if ((pads_initializer->dims_size() != 1 && + pads_initializer->dims_size() != 2) || + (pads_initializer->dims_size() == 2 && + pads_shape.dim(static_cast(0)).dim_value() != 1) || + pads_initializer->data_type() != ONNX_NAMESPACE::TensorProto::INT64) + fail_shape_inference( + "'pads' input must be a 1D (shape: [input_rank]) " + "or 2D tensor (shape: [1, input_rank]) of type int64"); + + // make a copy of the returned const vector - may have to resize + // this in next step + std::vector pads_data; + if (utils::HasRawData(*pads_initializer)) + return; + else + pads_data.insert( + pads_data.end(), + pads_initializer->int64_data().begin(), + pads_initializer->int64_data().end()); + + // fill with zeros if needed to reach appropriate size + if (pads_data.size() != 2 * static_cast(input_rank)) + pads_data.resize(size_t{2} * input_rank, 0); + + const auto& output_shape = + ctx.getOutputType(0)->mutable_tensor_type()->mutable_shape(); + for (size_t i = 0; static_cast(i) < input_rank; ++i) { + const auto& input_dim = input_shape.dim(static_cast(i)); + auto* output_dim = output_shape->add_dim(); + if (utils::HasDimValue(input_dim)) { + output_dim->set_dim_value( + input_dim.dim_value() + pads_data[i] + pads_data[i + input_rank]); + } else if (pads_data[i] + pads_data[i + input_rank] == 0) { + *output_dim = input_dim; + } + } + } else { + // Infer output shapes' rank in any case + auto* output_shape_0 = getOutputShape(ctx, 0); + for (size_t i = 0; static_cast(i) < input_rank; ++i) { + output_shape_0->add_dim(); + } + } + return; + }) + .SetDoc(R"DOC( Given `data` tensor, pads, mode, and value. Example: Insert 0 pads to the beginning of the second dimension. @@ -2451,59 +1793,58 @@ Example 4: [0.0, 0.0, 4.5, 5.7], ], ] - )DOC"); - - ONNX_CONTRIB_OPERATOR_SCHEMA(Unique) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "x", "A 1-D input tensor that is to be processed.", "T") - .Output(0, "y", - "A 1-D tensor of the same type as 'x' " - "containing all the unique values in 'x' sorted " - "in the same order that they occur in the input 'x'", - "T") - .Output(1, "idx", - "A 1-D INT64 tensor of the same size as 'x' " - "containing the indices for each value in 'x' " - "in the output 'uniques'", - "tensor(int64)") - .Output(2, "counts", - "A 1-D INT64 tensor containing the " - "the count of each element " - "of 'uniques' in the input 'x'", - "tensor(int64)") - .TypeConstraint("T", OpSchema::all_tensor_types(), "Input can be of any tensor type.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - // Type inference - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); - ONNX_NAMESPACE::updateOutputElemType(ctx, 1, ONNX_NAMESPACE::TensorProto::INT64); - ONNX_NAMESPACE::updateOutputElemType(ctx, 2, ONNX_NAMESPACE::TensorProto::INT64); - - // Shape inference - - // shape of output 'uniques' and 'counts' - // depends on actual input data, but the rank is always 1 - ctx.getOutputType(0) - ->mutable_tensor_type() - ->mutable_shape() - ->add_dim(); - - ctx.getOutputType(2) - ->mutable_tensor_type() - ->mutable_shape() - ->add_dim(); - - // if the input shape doesn't exist, further shape inference is not possible - if (!hasNInputShapes(ctx, 1)) { - return; - } - - // 'idx' output has same shape as input - ONNX_NAMESPACE::propagateShapeFromInputToOutput(ctx, 0, 1); - - return; - }) - .SetDoc(R"DOC( + )DOC")); + +ONNX_MS_OPERATOR_SET_SCHEMA(Unique, 1, + OpSchema() + .Input(0, "x", "A 1-D input tensor that is to be processed.", "T") + .Output(0, "y", + "A 1-D tensor of the same type as 'x' " + "containing all the unique values in 'x' sorted " + "in the same order that they occur in the input 'x'", + "T") + .Output(1, "idx", + "A 1-D INT64 tensor of the same size as 'x' " + "containing the indices for each value in 'x' " + "in the output 'uniques'", + "tensor(int64)") + .Output(2, "counts", + "A 1-D INT64 tensor containing the " + "the count of each element " + "of 'uniques' in the input 'x'", + "tensor(int64)") + .TypeConstraint("T", OpSchema::all_tensor_types(), "Input can be of any tensor type.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + // Type inference + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); + ONNX_NAMESPACE::updateOutputElemType(ctx, 1, ONNX_NAMESPACE::TensorProto::INT64); + ONNX_NAMESPACE::updateOutputElemType(ctx, 2, ONNX_NAMESPACE::TensorProto::INT64); + + // Shape inference + + // shape of output 'uniques' and 'counts' + // depends on actual input data, but the rank is always 1 + ctx.getOutputType(0) + ->mutable_tensor_type() + ->mutable_shape() + ->add_dim(); + + ctx.getOutputType(2) + ->mutable_tensor_type() + ->mutable_shape() + ->add_dim(); + + // if the input shape doesn't exist, further shape inference is not possible + if (!hasNInputShapes(ctx, 1)) { + return; + } + + // 'idx' output has same shape as input + ONNX_NAMESPACE::propagateShapeFromInputToOutput(ctx, 0, 1); + + return; + }) + .SetDoc(R"DOC( Finds all the unique values (deduped list) present in the given input tensor. This operator returns 3 outputs. The first output tensor 'uniques' contains all of the unique elements of the input, @@ -2516,115 +1857,117 @@ Example 4: output_uniques = [2, 1, 3, 4] output_idx = [0, 1, 1, 2, 3, 2] output_counts = [1, 2, 2, 1] - )DOC"); - - //see:https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html - ONNX_CONTRIB_OPERATOR_SCHEMA(CDist) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Attr("metric", - "The distance metric to use. If a string, the distance function can be \"braycurtis\", \"canberra\", " - "\"chebyshev\", \"cityblock\", \"correlation\", \"cosine\", \"dice\", \"euclidean\", \"hamming\", \"jaccard\", " - "\"jensenshannon\", \"kulsinski\", \"mahalanobis\", \"matching\", \"minkowski\", \"rogerstanimoto\", \"russellrao\", " - "\"seuclidean\", \"sokalmichener\", \"sokalsneath\", \"sqeuclidean\", \"wminkowski\", \"yule\".", - AttributeProto::STRING, std::string("sqeuclidean")) - .Input(0, "A", "2D matrix with shape (M,N)", "T") - .Input(1, "B", "2D matrix with shape (K,N)", "T") - .Output(0, "C", - "A 2D Matrix that represents the distance between each pair of the two collections of inputs.", - "T") - .TypeConstraint("T", {"tensor(float)", "tensor(double)"}, "Constrains input to only numeric types."); - - ONNX_CONTRIB_OPERATOR_SCHEMA(CropAndResize) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Attr( - "mode", - "The pooling method. Two modes are supported: 'bilinear' and 'nearest'. " - "Default is 'bilinear'.", - AttributeProto::STRING, - std::string("bilinear")) - .Attr( - "extrapolation_value", - "Value used for extrapolation, when applicable. " - "Default is 0.0f. ", - AttributeProto::FLOAT, - 0.f) - .Input( - 0, - "X", - "Input data tensor from the previous operator; " - "4-D feature map of shape (N, C, H, W), " - "where N is the batch size, C is the number of channels, " - "and H and W are the height and the width of the data.", - "T1") - .Input( - 1, - "rois", - "RoIs (Regions of Interest) to pool over; rois is " - "2-D input of shape (num_rois, 4) given as " - "[[y1, x1, y2, x2], ...]. " - "The RoIs' coordinates are normalized in the coordinate system of the input image. " - "Each coordinate set has a 1:1 correspondence with the 'batch_indices' input.", - "T1") - .Input( - 2, - "batch_indices", - "1-D tensor of shape (num_rois,) with each element denoting " - "the index of the corresponding image in the batch.", - "T2") - .Input( - 3, - "crop_size", - "1-D tensor of 2 elements: [crop_height, crop_width]. " - "All cropped image patches are resized to this size. Both crop_height and crop_width need to be positive.", - "T2") - .Output( - 0, - "Y", - "RoI pooled output, 4-D tensor of shape " - "(num_rois, C, crop_height, crop_width). The r-th batch element Y[r-1] " - "is a pooled feature map corresponding to the r-th RoI X[r-1].", - "T1") - .TypeConstraint( - "T1", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain types to float tensors.") - .TypeConstraint( - "T2", - {"tensor(int32)"}, - "Constrain types to int tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - if (!hasNInputShapes(ctx, 4)) { - return; - } - propagateElemTypeFromInputToOutput(ctx, 0, 0); - - auto& input_shape = getInputShape(ctx, 0); - auto& rois_shape = getInputShape(ctx, 1); - auto& batch_index_shape = getInputShape(ctx, 2); - auto& crop_size_shape = getInputShape(ctx, 3); - - if (input_shape.dim_size() != 4) { - fail_shape_inference("first input tensor has wrong dimension"); - } - if (rois_shape.dim_size() != 2) { - fail_shape_inference("rois input tensor has wrong dimension"); - } - if (batch_index_shape.dim_size() != 1) { - fail_shape_inference("batch_indices shape input tensor has wrong dimension"); - } - if (crop_size_shape.dim_size() != 1) { - fail_shape_inference("crop_size shape input tensor has wrong dimension"); - } - }) - .SetDoc(R"DOC( + )DOC")); + +// see:https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html +ONNX_MS_OPERATOR_SET_SCHEMA(CDist, 1, + OpSchema() + .Attr("metric", + "The distance metric to use. If a string, the distance function can be \"braycurtis\", \"canberra\", " + "\"chebyshev\", \"cityblock\", \"correlation\", \"cosine\", \"dice\", \"euclidean\", \"hamming\", \"jaccard\", " + "\"jensenshannon\", \"kulsinski\", \"mahalanobis\", \"matching\", \"minkowski\", \"rogerstanimoto\", \"russellrao\", " + "\"seuclidean\", \"sokalmichener\", \"sokalsneath\", \"sqeuclidean\", \"wminkowski\", \"yule\".", + AttributeProto::STRING, std::string("sqeuclidean")) + .Input(0, "A", "2D matrix with shape (M,N)", "T") + .Input(1, "B", "2D matrix with shape (K,N)", "T") + .Output(0, "C", + "A 2D Matrix that represents the distance between each pair of the two collections of inputs.", + "T") + .TypeConstraint("T", {"tensor(float)", "tensor(double)"}, "Constrains input to only numeric types.")); + +ONNX_MS_OPERATOR_SET_SCHEMA(CropAndResize, 1, + OpSchema() + .Attr( + "mode", + "The pooling method. Two modes are supported: 'bilinear' and 'nearest'. " + "Default is 'bilinear'.", + AttributeProto::STRING, + std::string("bilinear")) + .Attr( + "extrapolation_value", + "Value used for extrapolation, when applicable. " + "Default is 0.0f. ", + AttributeProto::FLOAT, + 0.f) + .Input( + 0, + "X", + "Input data tensor from the previous operator; " + "4-D feature map of shape (N, C, H, W), " + "where N is the batch size, C is the number of channels, " + "and H and W are the height and the width of the data.", + "T1") + .Input( + 1, + "rois", + "RoIs (Regions of Interest) to pool over; rois is " + "2-D input of shape (num_rois, 4) given as " + "[[y1, x1, y2, x2], ...]. " + "The RoIs' coordinates are normalized in the coordinate system of the input image. " + "Each coordinate set has a 1:1 correspondence with the 'batch_indices' input.", + "T1") + .Input( + 2, + "batch_indices", + "1-D tensor of shape (num_rois,) with each element denoting " + "the index of the corresponding image in the batch.", + "T2") + .Input( + 3, + "crop_size", + "1-D tensor of 2 elements: [crop_height, crop_width]. " + "All cropped image patches are resized to this size. Both crop_height and crop_width need to be positive.", + "T2") + .Output( + 0, + "Y", + "RoI pooled output, 4-D tensor of shape " + "(num_rois, C, crop_height, crop_width). The r-th batch element Y[r-1] " + "is a pooled feature map corresponding to the r-th RoI X[r-1].", + "T1") + .TypeConstraint( + "T1", + {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain types to float tensors.") + .TypeConstraint( + "T2", + {"tensor(int32)"}, + "Constrain types to int tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + if (!hasNInputShapes(ctx, 4)) { + return; + } + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + auto& input_shape = getInputShape(ctx, 0); + auto& rois_shape = getInputShape(ctx, 1); + auto& batch_index_shape = getInputShape(ctx, 2); + auto& crop_size_shape = getInputShape(ctx, 3); + + if (input_shape.dim_size() != 4) { + fail_shape_inference("first input tensor has wrong dimension"); + } + if (rois_shape.dim_size() != 2) { + fail_shape_inference("rois input tensor has wrong dimension"); + } + if (batch_index_shape.dim_size() != 1) { + fail_shape_inference("batch_indices shape input tensor has wrong dimension"); + } + if (crop_size_shape.dim_size() != 1) { + fail_shape_inference("crop_size shape input tensor has wrong dimension"); + } + }) + .SetDoc(R"DOC( Extracts crops from the input image tensor and resizes them using bilinear sampling or nearest neighbor sampling (possibly with aspect ratio change) to a common output size specified by crop_height and crop_width. Returns a tensor with crops from the input image at positions defined at the bounding box locations in boxes. The cropped boxes are all resized (with bilinear or nearest neighbor interpolation) to a fixed size = [crop_height, crop_width]. The result is a 4-D tensor [num_boxes, crop_height, crop_width, depth]. - The resizing is corner aligned.)DOC"); + The resizing is corner aligned.)DOC")); + +void RegisterContribSchemas() { + ONNX_CONTRIB_OPERATOR_SCHEMA_ELSEWHERE(AttnLSTM, RegisterAttnLSTMContribOpSchema); + ONNX_CONTRIB_OPERATOR_SCHEMA_ELSEWHERE(Range, RegisterRangeOpSchema); ONNX_CONTRIB_OPERATOR_SCHEMA(LayerNormalization) .SetDomain(kOnnxDomain) @@ -2843,49 +2186,49 @@ Example 4: .Attr("score_activation", "Activation function to apply to the scores input.", AttributeProto::INT) .Attr("score_threshold", "Score threshold value.", AttributeProto::FLOAT) .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - // Type inference - using namespace ONNX_NAMESPACE; - ONNX_NAMESPACE::updateOutputElemType(ctx, 0, ONNX_NAMESPACE::TensorProto::INT32); - propagateElemTypeFromInputToOutput(ctx, 0, 1); - propagateElemTypeFromInputToOutput(ctx, 0, 2); - ONNX_NAMESPACE::updateOutputElemType(ctx, 3, ONNX_NAMESPACE::TensorProto::INT32); - - // Shape Inference - if (!hasInputShape(ctx, 0)) { - return; - } - int64_t max_output_boxes = 1; - auto max_output_boxes_proto = ctx.getAttribute("max_output_boxes"); - if (max_output_boxes_proto) { - max_output_boxes = max_output_boxes_proto->i(); - } - if (max_output_boxes < 1) { - fail_shape_inference("Attribute 'max_output_boxes' must be >= 1.") - } - - Dim batch_size; - unifyInputDim(ctx, 0, 0, batch_size); - - ONNX_NAMESPACE::TensorShapeProto num_detections_shape; - *num_detections_shape.add_dim() = batch_size; - num_detections_shape.add_dim()->set_dim_value(1); - updateOutputShape(ctx, 0, num_detections_shape); - - ONNX_NAMESPACE::TensorShapeProto detection_boxes_shape; - *detection_boxes_shape.add_dim() = batch_size; - detection_boxes_shape.add_dim()->set_dim_value(max_output_boxes); - detection_boxes_shape.add_dim()->set_dim_value(4); - updateOutputShape(ctx, 1, detection_boxes_shape); - - ONNX_NAMESPACE::TensorShapeProto detection_scores_shape; - *detection_scores_shape.add_dim() = batch_size; - detection_scores_shape.add_dim()->set_dim_value(max_output_boxes); - updateOutputShape(ctx, 2, detection_scores_shape); - - ONNX_NAMESPACE::TensorShapeProto detection_classes_shape; - *detection_classes_shape.add_dim() = batch_size; - detection_classes_shape.add_dim()->set_dim_value(max_output_boxes); - updateOutputShape(ctx, 3, detection_classes_shape); + // Type inference + using namespace ONNX_NAMESPACE; + ONNX_NAMESPACE::updateOutputElemType(ctx, 0, ONNX_NAMESPACE::TensorProto::INT32); + propagateElemTypeFromInputToOutput(ctx, 0, 1); + propagateElemTypeFromInputToOutput(ctx, 0, 2); + ONNX_NAMESPACE::updateOutputElemType(ctx, 3, ONNX_NAMESPACE::TensorProto::INT32); + + // Shape Inference + if (!hasInputShape(ctx, 0)) { + return; + } + int64_t max_output_boxes = 1; + auto max_output_boxes_proto = ctx.getAttribute("max_output_boxes"); + if (max_output_boxes_proto) { + max_output_boxes = max_output_boxes_proto->i(); + } + if (max_output_boxes < 1) { + fail_shape_inference("Attribute 'max_output_boxes' must be >= 1.") + } + + Dim batch_size; + unifyInputDim(ctx, 0, 0, batch_size); + + ONNX_NAMESPACE::TensorShapeProto num_detections_shape; + *num_detections_shape.add_dim() = batch_size; + num_detections_shape.add_dim()->set_dim_value(1); + updateOutputShape(ctx, 0, num_detections_shape); + + ONNX_NAMESPACE::TensorShapeProto detection_boxes_shape; + *detection_boxes_shape.add_dim() = batch_size; + detection_boxes_shape.add_dim()->set_dim_value(max_output_boxes); + detection_boxes_shape.add_dim()->set_dim_value(4); + updateOutputShape(ctx, 1, detection_boxes_shape); + + ONNX_NAMESPACE::TensorShapeProto detection_scores_shape; + *detection_scores_shape.add_dim() = batch_size; + detection_scores_shape.add_dim()->set_dim_value(max_output_boxes); + updateOutputShape(ctx, 2, detection_scores_shape); + + ONNX_NAMESPACE::TensorShapeProto detection_classes_shape; + *detection_classes_shape.add_dim() = batch_size; + detection_classes_shape.add_dim()->set_dim_value(max_output_boxes); + updateOutputShape(ctx, 3, detection_classes_shape); }); static const char* MultilevelCropAndResize_TRT_ver1_doc = @@ -2906,34 +2249,34 @@ Example 4: .Attr("pooled_size", "Pooled size.", AttributeProto::INT) .Attr("plugin_version", "Version number of the TRT plugin.", AttributeProto::STRING) .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - // Type inference - propagateElemTypeFromInputToOutput(ctx, 0, 0); - - // Shape Inference - if (!hasInputShape(ctx, 0)) { - return; - } - int64_t pooled_size = 1; - auto pooled_size_proto = ctx.getAttribute("pooled_size"); - if (pooled_size_proto) { - pooled_size = pooled_size_proto->i(); - } - if (pooled_size < 1) { - fail_shape_inference("Attribute 'pooled_size' must be >= 1.") - } - - Dim batch_size, number_boxes, channels; - unifyInputDim(ctx, 0, 0, batch_size); - unifyInputDim(ctx, 0, 1, number_boxes); - unifyInputDim(ctx, 1, 1, channels); - - ONNX_NAMESPACE::TensorShapeProto output_shape; - *output_shape.add_dim() = batch_size; - *output_shape.add_dim() = number_boxes; - *output_shape.add_dim() = channels; - output_shape.add_dim()->set_dim_value(pooled_size); - output_shape.add_dim()->set_dim_value(pooled_size); - updateOutputShape(ctx, 0, output_shape); + // Type inference + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + // Shape Inference + if (!hasInputShape(ctx, 0)) { + return; + } + int64_t pooled_size = 1; + auto pooled_size_proto = ctx.getAttribute("pooled_size"); + if (pooled_size_proto) { + pooled_size = pooled_size_proto->i(); + } + if (pooled_size < 1) { + fail_shape_inference("Attribute 'pooled_size' must be >= 1.") + } + + Dim batch_size, number_boxes, channels; + unifyInputDim(ctx, 0, 0, batch_size); + unifyInputDim(ctx, 0, 1, number_boxes); + unifyInputDim(ctx, 1, 1, channels); + + ONNX_NAMESPACE::TensorShapeProto output_shape; + *output_shape.add_dim() = batch_size; + *output_shape.add_dim() = number_boxes; + *output_shape.add_dim() = channels; + output_shape.add_dim()->set_dim_value(pooled_size); + output_shape.add_dim()->set_dim_value(pooled_size); + updateOutputShape(ctx, 0, output_shape); }); static const char* PyramidROIAlign_TRT_ver1_doc = @@ -2952,488 +2295,35 @@ Example 4: .TypeConstraint("T", {"tensor(float)"}, "Constrain input and output types to float tensors.") .Attr("pooled_size", "Pooled size.", AttributeProto::INT) .Attr("plugin_version", "Version number of the TRT plugin.", AttributeProto::STRING) - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - // Type inference - propagateElemTypeFromInputToOutput(ctx, 0, 0); - - // Shape Inference - if (!hasInputShape(ctx, 0)) { - return; - } - int64_t pooled_size = 1; - auto pooled_size_proto = ctx.getAttribute("pooled_size"); - if (pooled_size_proto) { - pooled_size = pooled_size_proto->i(); - } - if (pooled_size < 1) { - fail_shape_inference("Attribute 'pooled_size' must be >= 1.") - } - - Dim batch_size, number_boxes, channels; - unifyInputDim(ctx, 0, 0, batch_size); - unifyInputDim(ctx, 0, 1, number_boxes); - unifyInputDim(ctx, 1, 1, channels); - - ONNX_NAMESPACE::TensorShapeProto output_shape; - *output_shape.add_dim() = batch_size; - *output_shape.add_dim() = number_boxes; - *output_shape.add_dim() = channels; - output_shape.add_dim()->set_dim_value(pooled_size); - output_shape.add_dim()->set_dim_value(pooled_size); - updateOutputShape(ctx, 0, output_shape); - }); - - static const char* Gelu_ver1_doc = - R"DOC(Gaussian Error Linear Unit. -A high-performing neural network activation function.The GELU nonlinearity is -the expected transformation of a stochastic regularizer which randomly applies -the identity or zero map to a neuron's input. The GELU nonlinearity weights -inputs by their magnitude, rather than gates inputs by their sign as in ReLUs.)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(Gelu) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(Gelu_ver1_doc) - .Input(0, "X", "The input data as Tensor.", "T") - .Output(0, "Y", "The output.", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, - "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput) - .SetContextDependentFunctionBodyBuilder([](const FunctionBodyBuildContext& ctx, const OpSchema& schema, FunctionProto& functionProto) { - // gelu(x) = x * Phi(x) = x * 1/2(1+erf(x/sqrt(2))) - auto* tp = ctx.getInputType(0); - if ((tp == nullptr) || (!tp->has_tensor_type())) - return false; - auto elem_type = tp->tensor_type().elem_type(); - - FunctionBuilder builder(functionProto); - builder - .AddOpset("", 13) - .Const("Half", 0.5, elem_type) - .Const("One", 1.0, elem_type) - .Const("C", std::sqrt(0.5), elem_type) - .Add(R"( - CX = Mul (C, X) - ERFCX = Erf (CX) - ERFCXPlus1 = Add (ERFCX, One) - PhiX = Mul (ERFCXPlus1, Half) - Y = Mul (X, PhiX) - )"); - - schema.BuildFunction(functionProto); - return true; - }); - - static const char* BiasGelu_ver1_doc = - R"DOC(Bias Gelu. -It's an extension of Gelu. It takes the sum of input A and bias input B as the input of Gelu activation. )DOC"; - ONNX_CONTRIB_OPERATOR_SCHEMA(BiasGelu) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(BiasGelu_ver1_doc) - .Input(0, "A", "The normal input data.", "T") - .Input(1, "B", "The bias input data that is a 1D tensor.", "T") - .Output(0, "C", "The output.", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, - "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - // Used to be ONNX 1.7 Inverse(12) - // Comment out docs not to increase the binary size - // - // static const char* Inverse_ver1_doc = R"DOC( - //Calculates inverse of a square matrix or batches of square matrices. - //Inverse takes one input tensor of shape `[*, M, M]`, where `*` is zero or more batch dimensions, - //and the inner-most 2 dimensions form square matrices. These matrices must be invertible (full-rank). - //The behavior where one of the matrices is not invertible is undefined. The implementation can choose - //to throw an error or output (garbage) results as is. The output is a tensor of shape `[*, M, M]`, - //containing the individual inverses of all input submatrices. - //)DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(Inverse) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "X", "Input tensor. Every matrix in the batch must be invertible.", "T") - .Output(0, "Y", "Output tensor of the same type and shape as the input tensor.", "T") - .TypeConstraint( - "T", - {"tensor(float16)", - "tensor(float)", - "tensor(double)"}, - "Constrain input and output types to float tensors.") .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { // Type inference - using namespace ONNX_NAMESPACE; - propagateElemTypeFromInputToOutput(ctx, 0, 0); - - // Shape inference - if (hasInputShape(ctx, 0)) { - const TensorShapeProto& input_shape = - ctx.getInputType(0)->tensor_type().shape(); - const int rank = static_cast(input_shape.dim_size()); - - if (rank < 2) { - fail_shape_inference("Input rank must be >= 2.") - } - - const auto mat_w = input_shape.dim(rank - 1); - const auto mat_h = input_shape.dim(rank - 2); - if (mat_w.has_dim_value() && mat_h.has_dim_value() && - (mat_w.dim_value() != mat_h.dim_value())) { - fail_shape_inference( - "The inner-most 2 dimensions must have the same size (mat_w:", - mat_w.dim_value(), - " != mat_h:", - mat_h.dim_value(), - ")."); - } - - // Shape inference - propagateShapeFromInputToOutput(ctx, 0, 0); - } - }); - - static const char* TorchEmbedding_ver1_doc = R"DOC( - Based on Torch operator Embedding, creates a lookup table of embedding vectors of fixed size, - for a dictionary of fixed size. - )DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(TorchEmbedding) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(TorchEmbedding_ver1_doc) - .Input( - 0, - "weight", - "The embedding matrix of size N x M. 'N' is equal to the maximum possible index + 1, and 'M' is " - "equal to the embedding size", - "T") - .Input( - 1, - "indices", - "Long tensor containing the indices to extract from embedding matrix.", - "tensor(int64)") - .Input( - 2, - "padding_idx", - "A 0-D scalar tensor. If specified, the entries at `padding_idx` do not contribute to the gradient; " - "therefore, the embedding vector at `padding_idx` is not updated during training, " - "i.e. it remains as a fixed pad.", - "tensor(int64)", - OpSchema::Optional) - .Input( - 3, - "scale_grad_by_freq", - "A 0-D bool tensor. If given, this will scale gradients by the inverse of frequency of " - "the indices (words) in the mini-batch. Default is ``False``", - "tensor(bool)", - OpSchema::Optional) - .Output( - 0, - "Y", - "Output tensor of the same type as the input tensor. Shape of the output is * x M, where '*' is the shape of " - "input indices, and 'M' is the embedding size.", - "T") - .TypeConstraint( - "T", - {"tensor(float16)", - "tensor(float)", - "tensor(double)", - "tensor(bfloat16)", - "tensor(uint8)", - "tensor(uint16)", - "tensor(uint32)", - "tensor(uint64)", - "tensor(int8)", - "tensor(int16)", - "tensor(int32)", - "tensor(int64)"}, - "Constrain input and output types to all numeric tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - using namespace ONNX_NAMESPACE; propagateElemTypeFromInputToOutput(ctx, 0, 0); - TensorShapeProto outputs_shape; - Dim input_dim_i; - - if (hasInputShape(ctx, 1)) { - auto& input_shape = getInputShape(ctx, 1); - for (int32_t i = 0; i < input_shape.dim_size(); i++) { - input_dim_i = input_shape.dim(i); - *outputs_shape.add_dim() = input_dim_i; - } + // Shape Inference + if (!hasInputShape(ctx, 0)) { + return; } - - Dim embedding_dim; - unifyInputDim(ctx, 0, 1, embedding_dim); - *outputs_shape.add_dim() = embedding_dim; - updateOutputShape(ctx, 0, outputs_shape); - }); - - static const char* Trilu_ver1_doc = R"DOC( - Returns the upper or lower triangular part of a 2-D matrix, or batches of 2-D matrices. If the attribute "upper" is set to true, - the upper triangular matrix is retained. Lower triangular matrix is retained otherwise. Default value for upper is true. - Trilu takes one input tensor of shape [*, N, M], where * is zero or more batch dimensions. The upper triangular part consists - of the elements on and above the given diagonal (k). The lower triangular part consists of elements on and below the diagonal. - All other elements in the matrix are set to zero. - If k = 0, the triangular part on and above/below the main diagonal is retained. - If upper is set to true, a positive k retains the upper triangular matrix excluding k diagonals above - the main diagonal. A negative k value includes as many diagonals below the main diagonal. - If upper is set to false, a positive k retains the lower triangular matrix including k diagonals above - the main diagonal. A negative k value excludes as many diagonals below the main diagonal. - )DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(Trilu) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(Trilu_ver1_doc) - .Attr("upper", - "Boolean. Indicates whether upper or lower part of matrix is retained. Default is true.", - AttributeProto::INT, - static_cast(1)) - .Input( - 0, - "X", - "Input tensor of rank 2 or higher.", - "T") - .Input( - 1, - "k", - "A 0-D tensor containing a single value corresponding to the number diagonals above or the main diagonal to exclude or include." - "Default value is 0 if it's not specified.", - "tensor(int64)", - OpSchema::Optional) - .Output( - 0, - "Y", - "Output tensor of the same type and shape as the input tensor.", - "T") - .TypeConstraint( - "T", - {"tensor(float16)", - "tensor(float)", - "tensor(double)", - "tensor(bfloat16)", - "tensor(uint8)", - "tensor(uint16)", - "tensor(uint32)", - "tensor(uint64)", - "tensor(int8)", - "tensor(int16)", - "tensor(int32)", - "tensor(int64)", - "tensor(bool)"}, - "Constrain input and output types to all numeric tensors and bool tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - using namespace ONNX_NAMESPACE; - propagateElemTypeFromInputToOutput(ctx, 0, 0); - - if (hasInputShape(ctx, 0)) { - const TensorShapeProto& input_shape = - ctx.getInputType(0)->tensor_type().shape(); - const int rank = static_cast(input_shape.dim_size()); - if (rank < 2) { - fail_shape_inference("Input rank must be >= 2.") - } - propagateShapeFromInputToOutput(ctx, 0, 0); + int64_t pooled_size = 1; + auto pooled_size_proto = ctx.getAttribute("pooled_size"); + if (pooled_size_proto) { + pooled_size = pooled_size_proto->i(); } - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(BiasSoftmax) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc( - "Y = softmax(scores + bias)) with simple broadcast on bias. " - "Intended to specialize softmax(scores + additive_mask) commonly found in transformer models.") - .Attr("softmax_axis", "apply softmax to elements for dimensions softmax_axis or higher", AttributeProto::INT, static_cast(1)) - .Attr("broadcast_axis", "broadcast bias across input for dimensions broadcast_axis to softmax_axis-1", AttributeProto::INT, static_cast(1)) - .Input(0, "data", "The input data as Tensor.", "T") - .Input(1, "bias", "The bias (or mask) as Tensor.", "T") - .Output(0, "output", "The output.", "T") - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain input and output types to float tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); - - ONNX_CONTRIB_OPERATOR_SCHEMA(BiasDropout) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc( - "output, dropout_mask = Dropout(data + bias, ratio) + residual, " - "Intended to specialize the dropout pattern commonly found in transformer models.") - .Attr("seed", "(Optional) Seed to the random generator, if not specified we will auto generate one.", AttributeProto::INT, OPTIONAL_VALUE) - .AllowUncheckedAttributes() - .Input(0, "data", "The input data as Tensor.", "T") - .Input(1, "bias", "The bias input, a vector with the same shape as last dim of data OR same shape with data", "T") - .Input(2, "residual", "The residual input, must have the same shape as data", "T", OpSchema::Optional) - .Input(3, "ratio", - "The ratio of random dropout, with value in [0, 1). If this input was not set, " - "or if it was set to 0, the output would be a simple copy of the input. " - "If it's non-zero, output will be a random dropout of input, which is typically " - "the case during training.", - "T1", - OpSchema::Optional) - .Input(4, "training_mode", - "If set to true then it indicates dropout is being used for " - "training. It is an optional value hence unless specified explicitly, it is false. " - "If it is false, ratio is ignored and the operation mimics inference mode where nothing " - "will be dropped from the input data and if mask is requested as output it will contain " - "all ones.", - "T2", - OpSchema::Optional) - .Output(0, "output", "The output.", "T") - .Output(1, "mask", "The output mask of dropout.", "T2", OpSchema::Optional) - .TypeConstraint( - "T", - {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, - "Constrain input and output types to float tensors.") - .TypeConstraint( - "T1", - {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, - "Constrain input 'ratio' types to float tensors.") - .TypeConstraint( - "T2", - {"tensor(bool)"}, - "Constrain output 'mask' types to boolean tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - propagateShapeAndTypeFromFirstInput(ctx); - if (ctx.getNumOutputs() == 2) { - updateOutputElemType(ctx, 1, ONNX_NAMESPACE::TensorProto::BOOL); - if (hasNInputShapes(ctx, 1)) { - propagateShapeFromInputToOutput(ctx, 0, 1); - } + if (pooled_size < 1) { + fail_shape_inference("Attribute 'pooled_size' must be >= 1.") } - }); - ONNX_CONTRIB_OPERATOR_SCHEMA(IsAllFinite) - .SetSupportLevel(OpSchema::SupportType::EXPERIMENTAL) - .SetDoc("IsAllFinite") - .SetDomain(kMSDomain) - .SinceVersion(1) - .Attr("isinf_only", - "If true, check only for Inf, -Inf.", - AttributeProto::INT, - static_cast(0)) - .Attr("isnan_only", - "If true, check only for NaN.", - AttributeProto::INT, - static_cast(0)) - .TypeConstraint( - "V", - {"tensor(float16)", "tensor(float)", "tensor(double)", "tensor(bfloat16)"}, - "Constrain input and output types to float tensors.") - .TypeConstraint( - "T", - {"tensor(bool)"}, - "Constrain the output to a boolean tensor.") - .Input(0, "input", "Input tensors to check.", "V", - OpSchema::Variadic) - .Output( - 0, - "output", - "The output scalar. Its value is true if all input " - "tensors are finite. Otherwise, the output value would " - "be false.", - "T") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - bool isinf_only = static_cast(getAttribute(ctx, "isinf_only", int64_t(0))); - bool isnan_only = static_cast(getAttribute(ctx, "isnan_only", int64_t(0))); - ORT_ENFORCE(!(isinf_only && isnan_only), - "Both attributes isinf_only and isnan_only cannot be set. Unset both to check for both conditions."); - updateOutputShape(ctx, 0, {}); - updateOutputElemType(ctx, 0, ONNX_NAMESPACE::TensorProto::BOOL); - }); - - static const char* GridSample_ver1_doc = R"DOC( - Given an `input` and a flow-field `grid`, computes the `output` using `input` values and pixel locations from `grid`. - Currently, only spatial (4-D) inputs are supported. For `input` with shape (N, C, H, W) and `grid` with shape (N, H_out, W_out, 2), - the `output` will have shape (N, C, H_out, W_out). - For each output location `output[n, :, h, w]`, the size-2 vector `grid[n, h, w]` specifies `input` pixel locations `x` and `y`, - which are used to interpolate the output value `output[n, :, h, w]`. - The GridSample operator is often used in doing grid generator and sampler in the [Spatial Transformer Networks](https://arxiv.org/abs/1506.02025). - See also in [torch.nn.functional.grid_sample](https://pytorch.org/docs/master/generated/torch.nn.functional.grid_sample.html#torch-nn-functional-grid-sample). - )DOC"; - - ONNX_CONTRIB_OPERATOR_SCHEMA(GridSample) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(GridSample_ver1_doc) - .Attr( - "mode", - "Three interpolation modes: bilinear (default), nearest and bicubic.", - AttributeProto::STRING, - std::string("bilinear")) - .Attr( - "padding_mode", - "Support padding modes for outside grid values: `zeros`(default), `border`, `reflection`. " - "zeros: use 0 for out-of-bound grid locations, " - "border: use border values for out-of-bound grid locations, " - "reflection: use values at locations reflected by the border for out-of-bound grid locations.", - AttributeProto::STRING, - std::string("zeros")) - .Attr( - "align_corners", - "If align_corners=1, the extrema (-1 and 1) are considered as referring to the center points of the input's corner pixels. " - "If align_corners=0, they are instead considered as referring to the corner points of the input's corner pixels, making the sampling more resolution agnostic.", - AttributeProto::INT, - static_cast(0)) - .Input( - 0, - "X", - "4-D tensor of shape (N, C, H, W), " - "where N is the batch size, C is the numbers of channels, " - "H and W are the height and width of the input data.", - "T1") - .Input( - 1, - "Grid", - "Input offset, 4-D tensor of shape (N, H_out, W_out, 2), " - "where H_out and W_out are the height and width of grid and output, " - "Grid specifies the sampling pixel locations normalized by the input spatial dimensions. " - "Therefore, it should have most values in the range of [-1, 1]. " - "If grid has values outside the range of [-1, 1], the corresponding outputs will be handled as defined by padding_mode.", - "T1") - .Output( - 0, - "Y", - "4-D tensor of shape (N, C, H_out, W_out).", - "T2") - .TypeConstraint( - "T1", - OpSchema::all_tensor_types(), - "Constrain input types to all tensor types.") - .TypeConstraint( - "T2", - {"tensor(float16)", "tensor(float)", "tensor(double)"}, - "Constrain output types to float tensors.") - .TypeAndShapeInferenceFunction([](InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 0, 0); - - size_t input_param = 0, grid_param = 1; - - checkInputRank(ctx, input_param, 4); - checkInputRank(ctx, grid_param, 4); + Dim batch_size, number_boxes, channels; + unifyInputDim(ctx, 0, 0, batch_size); + unifyInputDim(ctx, 0, 1, number_boxes); + unifyInputDim(ctx, 1, 1, channels); - // Output dimensions, initialized to an unknown-dimension-value - Dim N, C, H_out, W_out; - - // Get value of N from dim 0 of input_param, if available - unifyInputDim(ctx, input_param, 0, N); - // Get value of C from dim 1 of input_param, if available - unifyInputDim(ctx, input_param, 1, C); - - // Get value of H_out from dim 1 of grid_param, if available - unifyInputDim(ctx, grid_param, 1, H_out); - // Get value of W_out from dim 2 of grid_param, if available - unifyInputDim(ctx, grid_param, 2, W_out); - - // set output shape: - updateOutputShape(ctx, 0, {N, C, H_out, W_out}); + ONNX_NAMESPACE::TensorShapeProto output_shape; + *output_shape.add_dim() = batch_size; + *output_shape.add_dim() = number_boxes; + *output_shape.add_dim() = channels; + output_shape.add_dim()->set_dim_value(pooled_size); + output_shape.add_dim()->set_dim_value(pooled_size); + updateOutputShape(ctx, 0, output_shape); }); #ifndef _OPSCHEMA_LIB_ @@ -3443,15 +2333,10 @@ It's an extension of Gelu. It takes the sum of input A and bias input B as the i } #endif - RegisterNhwcSchemas(); - RegisterBertSchemas(); - RegisterTextGenerationSchemas(); - #ifdef BUILD_MS_EXPERIMENTAL_OPS onnxruntime::signal::RegisterSignalSchemas(); #endif - - RegisterQuantizationSchemas(); } + } // namespace contrib } // namespace onnxruntime diff --git a/onnxruntime/core/graph/contrib_ops/contrib_defs.h b/onnxruntime/core/graph/contrib_ops/contrib_defs.h index d373e17da3fe1..7d70c708a9c7b 100644 --- a/onnxruntime/core/graph/contrib_ops/contrib_defs.h +++ b/onnxruntime/core/graph/contrib_ops/contrib_defs.h @@ -5,12 +5,32 @@ #if !defined(ORT_MINIMAL_BUILD) #include "onnx/defs/schema.h" +#include "core/graph/contrib_ops/ms_schema.h" #else #include "onnx/defs/data_type_utils.h" #endif +#define ONNX_MS_OPERATOR_SET_SCHEMA(name, ver, impl) \ + ONNX_OPERATOR_SET_SCHEMA_EX(name, Microsoft, ::onnxruntime::kMSDomain, ver, true, impl) + +//They are in ONNX domain but they are in our source code +#define ONNX_CONTRIB_OPERATOR_SET_SCHEMA(name, ver, impl) \ + ONNX_OPERATOR_SET_SCHEMA_EX(name, Onnx, ::ONNX_NAMESPACE::ONNX_DOMAIN, ver, true, impl) + namespace onnxruntime { namespace contrib { +namespace utils { +inline bool HasDimValue(const ONNX_NAMESPACE::TensorShapeProto_Dimension& dim) { + return dim.value_case() == ONNX_NAMESPACE::TensorShapeProto_Dimension::kDimValue; +} +inline bool HasRawData(const ONNX_NAMESPACE::TensorProto& ten_proto) { + // Can not be UNDEFINED and can not be STRING but test for STRING is usually performed separately + // to return an error + return ten_proto.data_type() != ONNX_NAMESPACE::TensorProto::UNDEFINED && + ten_proto.has_raw_data(); // XXX: Figure out how to do in proto3 +} +} + #define ONNX_CONTRIB_OPERATOR_SCHEMA(name) \ ONNX_CONTRIB_OPERATOR_SCHEMA_UNIQ_HELPER(__COUNTER__, name) #define ONNX_CONTRIB_OPERATOR_SCHEMA_UNIQ_HELPER(Counter, name) \ @@ -31,7 +51,6 @@ namespace contrib { void RegisterContribSchemas(); void RegisterNchwcSchemas(); -void RegisterNhwcSchemas(); void RegisterQuantizationSchemas(); constexpr const float kDefaultSkipLayerNormEpsilon = 1e-12f; diff --git a/onnxruntime/core/graph/contrib_ops/ms_opset.h b/onnxruntime/core/graph/contrib_ops/ms_opset.h new file mode 100644 index 0000000000000..0bdeef32d22ae --- /dev/null +++ b/onnxruntime/core/graph/contrib_ops/ms_opset.h @@ -0,0 +1,144 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once +#include "onnx/defs/schema.h" +#include "core/graph/contrib_ops/ms_schema.h" + +namespace onnxruntime { +namespace contrib { +//NHWC ops +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, NhwcMaxPool); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearGlobalAveragePool); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearAveragePool); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearConv); + +//Quantization ops +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, DequantizeLinear); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, DynamicQuantizeLSTM); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, DynamicQuantizeMatMul); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, MatMulIntegerToFloat); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, MulInteger); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QGemm); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearAdd); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearConcat); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearLeakyRelu); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearMul); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearReduceMean); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearSigmoid); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QuantizeLinear); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ReduceSumInteger); + +//Others +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Attention); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, BeamSearch); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, BiasDropout); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, BiasGelu); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, BiasSoftmax); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, BifurcationDetector); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, CDist); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ComplexMul); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ComplexMulConj); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ConvTransposeWithDynamicPads); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, CropAndResize); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, DecoderAttention); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, EmbedLayerNormalization); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, ExpandDims); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, FastGelu); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, FusedConv); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, FusedGemm); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, FusedMatMul); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, GatherND); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Gelu); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, GridSample); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Inverse); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Irfft); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, IsAllFinite); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, LongformerAttention); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, MatMulInteger16); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, MaxpoolWithMask); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, MurmurHash3); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, NGramRepeatBlock); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Pad); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QAttention); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QEmbedLayerNormalization); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Rfft); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, SampleOp); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, SkipLayerNormalization); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, SparseToDenseMatMul); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Tokenizer); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, TorchEmbedding); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, TransposeMatMul); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Trilu); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Unique); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, WordConvEmbedding); + +class OpSet_Microsoft_ver1 { + public: + static void ForEachSchema(std::function fn) { + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + } +}; +} // namespace contrib +} // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/core/graph/contrib_ops/ms_schema.h b/onnxruntime/core/graph/contrib_ops/ms_schema.h new file mode 100644 index 0000000000000..54282e51add39 --- /dev/null +++ b/onnxruntime/core/graph/contrib_ops/ms_schema.h @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include "onnx/defs/schema.h" + +namespace onnxruntime { +namespace contrib { +// ONNX namespace has the same function. We copy it to our namespace so that we can provide explicit specializations +// for it in onnxruntime::contrib namespace. Otherwise we will need to put a lot of our code in ONNX namespace. +template +::ONNX_NAMESPACE::OpSchema GetOpSchema(); +} +} // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/core/graph/contrib_ops/nhwc_schema_defs.cc b/onnxruntime/core/graph/contrib_ops/nhwc_schema_defs.cc index 1398ace33220c..a5a76364bcbee 100644 --- a/onnxruntime/core/graph/contrib_ops/nhwc_schema_defs.cc +++ b/onnxruntime/core/graph/contrib_ops/nhwc_schema_defs.cc @@ -1,21 +1,16 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -#include "core/framework/tensorprotoutils.h" #include "core/graph/constants.h" #include "core/graph/contrib_ops/contrib_defs.h" #include "core/graph/contrib_ops/quantization_defs.h" namespace ONNX_NAMESPACE { -void convPoolShapeInference( - InferenceContext& ctx, - bool use_dilation, - bool require_kernel_shape, - int input1Idx, - int input2Idx); +void convPoolShapeInference(InferenceContext& ctx, bool use_dilation, bool require_kernel_shape, int input1Idx, + int input2Idx); } // namespace ONNX_NAMESPACE -using namespace ONNX_NAMESPACE; +using namespace ::ONNX_NAMESPACE; namespace onnxruntime { namespace contrib { @@ -72,8 +67,7 @@ class NhwcInferenceContext : public InferenceContext { return (index == 0) ? &input_type_ : ctx_.getInputType(index); } - const TensorProto* getInputData(size_t index) const override { - ORT_UNUSED_PARAMETER(index); + const TensorProto* getInputData(size_t) const override { return nullptr; } @@ -85,8 +79,7 @@ class NhwcInferenceContext : public InferenceContext { return (index == 0) ? &output_type_ : ctx_.getOutputType(index); } - GraphInferencer* getGraphAttributeInferencer(const std::string& attribute_name) override { - ORT_UNUSED_PARAMETER(attribute_name); + GraphInferencer* getGraphAttributeInferencer(const std::string&) override { return nullptr; } @@ -104,12 +97,9 @@ class NhwcInferenceContext : public InferenceContext { TypeProto output_type_; }; -void convPoolShapeInferenceNhwc( - InferenceContext& ctx, - bool use_dilation, - bool require_kernel_shape, - int input1Idx, - int input2Idx) { + +void convPoolShapeInferenceNhwc(InferenceContext& ctx, bool use_dilation, bool require_kernel_shape, int input1Idx, + int input2Idx) { // Reuse the NCHW implementation by transposing the input/output tensor using // a local inference context. NhwcInferenceContext nhwc_ctx(ctx); @@ -118,161 +108,80 @@ void convPoolShapeInferenceNhwc( nhwc_ctx.TransposeOutputShape(); } -void RegisterNhwcSchemas() { - ONNX_CONTRIB_OPERATOR_SCHEMA(QLinearConv) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "x", "", "T1") - .Input(1, "x_scale", "", "tensor(float)") - .Input(2, "x_zero_point", "", "T1") - .Input(3, "w", "", "T2") - .Input(4, "w_scale", "", "tensor(float)") - .Input(5, "w_zero_point", "", "T2") - .Input(6, "y_scale", "", "tensor(float)") - .Input(7, "y_zero_point", "", "T3") - .Input(8, "B", "", "T4", OpSchema::Optional) - .Output(0, "y", "", "T3") - .TypeConstraint("T1", {"tensor(int8)", "tensor(uint8)"}, "") - .TypeConstraint("T2", {"tensor(int8)", "tensor(uint8)"}, "") - .TypeConstraint("T3", {"tensor(int8)", "tensor(uint8)"}, "") - .TypeConstraint("T4", {"tensor(int32)"}, "") - .Attr("auto_pad", "", AttributeProto::STRING, std::string("NOTSET")) - .Attr("kernel_shape", "", AttributeProto::INTS, OPTIONAL_VALUE) - .Attr("dilations", "", AttributeProto::INTS, OPTIONAL_VALUE) - .Attr("strides", "", AttributeProto::INTS, OPTIONAL_VALUE) - .Attr("pads", "", AttributeProto::INTS, OPTIONAL_VALUE) - .Attr("group", "", AttributeProto::INT, static_cast(1)) - .Attr("channels_last", "", AttributeProto::INT, static_cast(0)) - .TypeAndShapeInferenceFunction([](InferenceContext& ctx) { - auto x_type = ctx.getInputType(0); - auto w_type = ctx.getInputType(3); - if (nullptr == x_type || nullptr == w_type || - x_type->value_case() != TypeProto::kTensorType || - w_type->value_case() != TypeProto::kTensorType) { - fail_type_inference("inputs are expected to have tensor type."); - } - - auto x_zero_point_type = ctx.getInputType(2); - if (nullptr == x_zero_point_type || - x_zero_point_type->tensor_type().elem_type() != - x_type->tensor_type().elem_type()) { - fail_type_inference( - "input and zero_point pair is expected to have be same type."); - } - - auto w_zero_point_type = ctx.getInputType(5); - if (nullptr == w_zero_point_type || - w_zero_point_type->tensor_type().elem_type() != - w_type->tensor_type().elem_type()) { - fail_type_inference( - "weight and zero_point pair is expected to have same type."); - } - - propagateElemTypeFromInputToOutput(ctx, 7, 0); - - if (getAttribute(ctx, "channels_last", 0) == 0) { - convPoolShapeInference(ctx, true, false, 0, 3); - } else { - convPoolShapeInferenceNhwc(ctx, true, false, 0, 3); - } - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(NhwcMaxPool) - .SetDomain(kMSDomain) - .SinceVersion(1) - .Input(0, "x", "", "T") - .Output(0, "y", "", "T") - .TypeConstraint("T", {"tensor(int8)", "tensor(uint8)"}, "") - .Attr("auto_pad", "", AttributeProto::STRING, std::string("NOTSET")) - .Attr("kernel_shape", "", AttributeProto::INTS) - .Attr("dilations", "", AttributeProto::INTS, OPTIONAL_VALUE) - .Attr("strides", "", AttributeProto::INTS, OPTIONAL_VALUE) - .Attr("pads", "", AttributeProto::INTS, OPTIONAL_VALUE) - .Attr("ceil_mode", "", AttributeProto::INT, static_cast(0)) - .TypeAndShapeInferenceFunction([](InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 0, 0); - convPoolShapeInferenceNhwc(ctx, true, true, 0, 1); - }); - - ONNX_CONTRIB_OPERATOR_SCHEMA(QLinearGlobalAveragePool) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(R"DOC( +ONNX_MS_OPERATOR_SET_SCHEMA(NhwcMaxPool, 1, + OpSchema() + .Input(0, "x", "", "T") + .Output(0, "y", "", "T") + .TypeConstraint("T", {"tensor(int8)", "tensor(uint8)"}, "") + .Attr("auto_pad", "", AttributeProto::STRING, std::string("NOTSET")) + .Attr("kernel_shape", "", AttributeProto::INTS) + .Attr("dilations", "", AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("strides", "", AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("pads", "", AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("ceil_mode", "", AttributeProto::INT, static_cast(0)) + .TypeAndShapeInferenceFunction([](InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 0, 0); + ::onnxruntime::contrib::convPoolShapeInferenceNhwc(ctx, true, true, 0, 1); + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(QLinearGlobalAveragePool, 1, + OpSchema() + .SetDoc(R"DOC( QLinearGlobalAveragePool consumes an input tensor X and applies Average pooling across the values in the same channel. This is equivalent to AveragePool with kernel size equal to the spatial dimension of input tensor. Input is of type uint8_t or int8_t. )DOC") - .Attr("channels_last", "", AttributeProto::INT, static_cast(0)) - .Input( - 0, - "X", - "Input data tensor from the previous operator; According to channels_last, " - "dimensions for image case are (N x C x H x W), or (N x H x W x C) " - "where N is the batch size, C is the number of " - "channels, and H and W are the height and the width " - "of the data. For non image case, the dimensions are " - "in the form of (N x C x D1 x D2 ... Dn), or (N x D1 X D2 ... Dn x C) " - "where N is the batch size.", - "T") - .Input( - 1, - "x_scale", - "Scale of quantized input 'X'. It must be a scalar.", - "tensor(float)") - .Input( - 2, - "x_zero_point", - "Zero point tensor for input 'X'. It must be a scalar.", - "T") - .Input( - 3, - "y_scale", - "Scale of quantized output 'Y'. It must be a scalar.", - "tensor(float)") - .Input( - 4, - "y_zero_point", - "Zero point tensor for output 'Y'. It must be a scalar.", - "T") - .Output( - 0, - "Y", - "Output data tensor from pooling across the input " - "tensor. The output tensor has the same rank as the input. " - "with the N and C value keep it value, while the other" - "dimensions are all 1.", - "T") - .TypeConstraint( - "T", - {"tensor(uint8)", "tensor(int8)"}, - "Constrain input and output types to singed/unsigned int8 tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 0, 0); - - int64_t channel_last = getAttribute(ctx, "channels_last", 0); - - // needs at least one input with shape. - if (!hasNInputShapes(ctx, 1)) { - return; - } - - auto input_shape = ctx.getInputType(0)->tensor_type().shape(); - if (input_shape.dim_size() < 2) { - return; - } - - // (N, C, 1, 1, ..., 1) or (N, 1, 1, ..., 1, C) - auto output_shape = ctx.getOutputType(0)->mutable_tensor_type()->mutable_shape(); - output_shape->CopyFrom(input_shape); - int image_dim_index = (channel_last ? 1 : 2); - for (auto n_hw_dims = input_shape.dim_size() - 2; n_hw_dims > 0; --n_hw_dims) { - output_shape->mutable_dim(image_dim_index)->clear_dim_param(); - output_shape->mutable_dim(image_dim_index)->set_dim_value(1); - ++image_dim_index; - } - }); - - const char* QLinearAveragePoolDoc_ver1 = R"DOC( + .Attr("channels_last", "", AttributeProto::INT, static_cast(0)) + .Input(0, "X", + "Input data tensor from the previous operator; According to channels_last, " + "dimensions for image case are (N x C x H x W), or (N x H x W x C) " + "where N is the batch size, C is the number of " + "channels, and H and W are the height and the width " + "of the data. For non image case, the dimensions are " + "in the form of (N x C x D1 x D2 ... Dn), or (N x D1 X D2 ... Dn x C) " + "where N is the batch size.", + "T") + .Input(1, "x_scale", "Scale of quantized input 'X'. It must be a scalar.", + "tensor(float)") + .Input(2, "x_zero_point", "Zero point tensor for input 'X'. It must be a scalar.", "T") + .Input(3, "y_scale", "Scale of quantized output 'Y'. It must be a scalar.", + "tensor(float)") + .Input(4, "y_zero_point", "Zero point tensor for output 'Y'. It must be a scalar.", "T") + .Output(0, "Y", + "Output data tensor from pooling across the input " + "tensor. The output tensor has the same rank as the input. " + "with the N and C value keep it value, while the other" + "dimensions are all 1.", + "T") + .TypeConstraint("T", {"tensor(uint8)", "tensor(int8)"}, + "Constrain input and output types to singed/unsigned int8 tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 0, 0); + + int64_t channel_last = getAttribute(ctx, "channels_last", 0); + + // needs at least one input with shape. + if (!hasNInputShapes(ctx, 1)) { + return; + } + + auto input_shape = ctx.getInputType(0)->tensor_type().shape(); + if (input_shape.dim_size() < 2) { + return; + } + + // (N, C, 1, 1, ..., 1) or (N, 1, 1, ..., 1, C) + auto output_shape = ctx.getOutputType(0)->mutable_tensor_type()->mutable_shape(); + output_shape->CopyFrom(input_shape); + int image_dim_index = (channel_last ? 1 : 2); + for (auto n_hw_dims = input_shape.dim_size() - 2; n_hw_dims > 0; --n_hw_dims) { + output_shape->mutable_dim(image_dim_index)->clear_dim_param(); + output_shape->mutable_dim(image_dim_index)->set_dim_value(1); + ++image_dim_index; + } + })); + +constexpr const char* QLinearAveragePoolDoc_ver1 = R"DOC( QLinearAveragePool consumes an input tensor X and applies average pooling across the tensor according to kernel sizes, stride sizes, and pad lengths. average pooling consisting of computing the average on all values of a @@ -307,121 +216,143 @@ Input and output scales and zero points are used to convert the output to a new Output = Dequantize(Input) -> AveragePool on fp32 data -> Quantize(output) )DOC"; - static const char* contrib_ops_pads_doc = - "Padding for the beginning and ending along each spatial axis, it can take any value greater " - "than or equal to 0. The value represent the number of pixels added to the beginning " - "and end part of the corresponding axis. `pads` format should be as follow " - "[x1_begin, x2_begin...x1_end, x2_end,...], where xi_begin the number of pixels " - "added at the beginning of axis `i` and xi_end, the number of pixels added at " - "the end of axis `i`. This attribute cannot be used simultaneously with " - "auto_pad attribute. If not present, the padding defaults to 0 along start and end of each spatial axis."; - static const char* contrib_ops_auto_pad_doc = - "auto_pad must be either NOTSET, SAME_UPPER, SAME_LOWER or VALID. Where " - "default value is NOTSET, which means explicit padding is used. " - "SAME_UPPER or SAME_LOWER mean pad the input so that the output spatial size match the input." - "In case of odd number add the extra padding at the end for SAME_UPPER and at the " - "beginning for SAME_LOWER. VALID mean no padding."; - - ONNX_CONTRIB_OPERATOR_SCHEMA(QLinearAveragePool) - .SetDomain(kMSDomain) - .SinceVersion(1) - .SetDoc(QLinearAveragePoolDoc_ver1) - .Attr( - "count_include_pad", - "Whether include pad pixels when calculating values for the edges. Default is 0, doesn't count include pad.", - AttributeProto::INT, - static_cast(0)) - .Attr( - "kernel_shape", - "The size of the kernel along each axis.", - AttributeProto::INTS) - .Attr( - "strides", - "Stride along each spatial axis. If not present, the stride defaults to 1 along each spatial axis.", - AttributeProto::INTS, - OPTIONAL_VALUE) - .Attr( - "auto_pad", - contrib_ops_auto_pad_doc, - AttributeProto::STRING, - std::string("NOTSET")) - .Attr("pads", contrib_ops_pads_doc, AttributeProto::INTS, OPTIONAL_VALUE) - .Attr( - "ceil_mode", - "Whether to use ceil or floor (default) to compute the output shape.", - AttributeProto::INT, - static_cast(0)) - .Attr("channels_last", "Works on NHWC layout or not? Default not.", AttributeProto::INT, static_cast(0)) - .Input( - 0, - "X", - "Input data tensor from the previous operator; " - "dimensions for image case are (N x C x H x W), " - "where N is the batch size, C is the number of " - "channels, and H and W are the height and the " - "width of the data. For non image case, the " - "dimensions are in the form of " - "(N x C x D1 x D2 ... Dn), where N is the batch " - "size. Optionally, if dimension denotation is " - "in effect, the operation expects the input " - "data tensor to arrive with the dimension denotation " - "of [DATA_BATCH, DATA_CHANNEL, DATA_FEATURE, DATA_FEATURE ...].", - "T") - .Input( - 1, - "x_scale", - "Input scale. It's a scalar, which means a per-tensor/layer quantization.", - "tensor(float)") - .Input( - 2, - "x_zero_point", - "Input zero point. Default value is 0 if it's not specified. It's a scalar, which means a per-tensor/layer quantization.", - "T", - OpSchema::Optional) - .Input( - 3, - "y_scale", - "Output scale. It's a scalar, which means a per-tensor/layer quantization.", - "tensor(float)") - .Input( - 4, - "y_zero_point", - "Output zero point. Default value is 0 if it's not specified. It's a scalar, which means a per-tensor/layer quantization.", - "T", - OpSchema::Optional) - .Output( - 0, - "Y", - "Output data tensor from average or max pooling across " - "the input tensor. Dimensions will vary based " - "on various kernel, stride, and pad sizes. Floor value of " - "the dimension is used", - "T") - .TypeConstraint( - "T", - {"tensor(uint8)", "tensor(int8)"}, - "Constrain input and output types to 8 bit tensors.") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); - - auto data_type = ctx.getInputType(0); - if (nullptr == data_type || data_type->value_case() != ONNX_NAMESPACE::TypeProto::kTensorType) { - fail_type_inference("inputs are expected to have tensor type."); - } - - // validate scale and zero points - ValidateTypeAndShapeForScaleAndZP(ctx, 1, ONNX_NAMESPACE::TensorProto::FLOAT, true); - ValidateTypeAndShapeForScaleAndZP(ctx, 2, data_type->tensor_type().elem_type(), true); - ValidateTypeAndShapeForScaleAndZP(ctx, 3, ONNX_NAMESPACE::TensorProto::FLOAT, true); - ValidateTypeAndShapeForScaleAndZP(ctx, 4, data_type->tensor_type().elem_type(), true); - - if (getAttribute(ctx, "channels_last", 0) == 0) { - ONNX_NAMESPACE::convPoolShapeInference(ctx, false, true, 0, 5); - } else { - convPoolShapeInferenceNhwc(ctx, false, true, 0, 5); - } - }); -} - +constexpr const char* contrib_ops_pads_doc = + "Padding for the beginning and ending along each spatial axis, it can take any value greater " + "than or equal to 0. The value represent the number of pixels added to the beginning " + "and end part of the corresponding axis. `pads` format should be as follow " + "[x1_begin, x2_begin...x1_end, x2_end,...], where xi_begin the number of pixels " + "added at the beginning of axis `i` and xi_end, the number of pixels added at " + "the end of axis `i`. This attribute cannot be used simultaneously with " + "auto_pad attribute. If not present, the padding defaults to 0 along start and end of each spatial axis."; +constexpr const char* contrib_ops_auto_pad_doc = + "auto_pad must be either NOTSET, SAME_UPPER, SAME_LOWER or VALID. Where " + "default value is NOTSET, which means explicit padding is used. " + "SAME_UPPER or SAME_LOWER mean pad the input so that the output spatial size match the input." + "In case of odd number add the extra padding at the end for SAME_UPPER and at the " + "beginning for SAME_LOWER. VALID mean no padding."; + +ONNX_MS_OPERATOR_SET_SCHEMA( + QLinearAveragePool, 1, + OpSchema() + .SetDoc(QLinearAveragePoolDoc_ver1) + .Attr("count_include_pad", + "Whether include pad pixels when calculating values for the edges. Default is 0, doesn't count include " + "pad.", + AttributeProto::INT, static_cast(0)) + .Attr("kernel_shape", "The size of the kernel along each axis.", AttributeProto::INTS) + .Attr("strides", + "Stride along each spatial axis. If not present, the stride defaults to 1 along each spatial axis.", + AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("auto_pad", contrib_ops_auto_pad_doc, AttributeProto::STRING, std::string("NOTSET")) + .Attr("pads", contrib_ops_pads_doc, AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("ceil_mode", "Whether to use ceil or floor (default) to compute the output shape.", AttributeProto::INT, + static_cast(0)) + .Attr("channels_last", "Works on NHWC layout or not? Default not.", AttributeProto::INT, + static_cast(0)) + .Input(0, "X", + "Input data tensor from the previous operator; " + "dimensions for image case are (N x C x H x W), " + "where N is the batch size, C is the number of " + "channels, and H and W are the height and the " + "width of the data. For non image case, the " + "dimensions are in the form of " + "(N x C x D1 x D2 ... Dn), where N is the batch " + "size. Optionally, if dimension denotation is " + "in effect, the operation expects the input " + "data tensor to arrive with the dimension denotation " + "of [DATA_BATCH, DATA_CHANNEL, DATA_FEATURE, DATA_FEATURE ...].", + "T") + .Input(1, "x_scale", "Input scale. It's a scalar, which means a per-tensor/layer quantization.", + "tensor(float)") + .Input(2, "x_zero_point", + "Input zero point. Default value is 0 if it's not specified. It's a scalar, which means a " + "per-tensor/layer quantization.", + "T", OpSchema::Optional) + .Input(3, "y_scale", "Output scale. It's a scalar, which means a per-tensor/layer quantization.", + "tensor(float)") + .Input(4, "y_zero_point", + "Output zero point. Default value is 0 if it's not specified. It's a scalar, which means a " + "per-tensor/layer quantization.", + "T", OpSchema::Optional) + .Output(0, "Y", + "Output data tensor from average or max pooling across " + "the input tensor. Dimensions will vary based " + "on various kernel, stride, and pad sizes. Floor value of " + "the dimension is used", + "T") + .TypeConstraint("T", {"tensor(uint8)", "tensor(int8)"}, "Constrain input and output types to 8 bit tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); + + auto data_type = ctx.getInputType(0); + if (nullptr == data_type || data_type->value_case() != ONNX_NAMESPACE::TypeProto::kTensorType) { + fail_type_inference("inputs are expected to have tensor type."); + } + + // validate scale and zero points + onnxruntime::contrib::ValidateTypeAndShapeForScaleAndZP(ctx, 1, ONNX_NAMESPACE::TensorProto::FLOAT, true); + onnxruntime::contrib::ValidateTypeAndShapeForScaleAndZP(ctx, 2, data_type->tensor_type().elem_type(), true); + onnxruntime::contrib::ValidateTypeAndShapeForScaleAndZP(ctx, 3, ONNX_NAMESPACE::TensorProto::FLOAT, true); + onnxruntime::contrib::ValidateTypeAndShapeForScaleAndZP(ctx, 4, data_type->tensor_type().elem_type(), true); + + if (getAttribute(ctx, "channels_last", 0) == 0) { + ONNX_NAMESPACE::convPoolShapeInference(ctx, false, true, 0, 5); + } else { + onnxruntime::contrib::convPoolShapeInferenceNhwc(ctx, false, true, 0, 5); + } + })); + +ONNX_MS_OPERATOR_SET_SCHEMA(QLinearConv, 1, + OpSchema() + .Input(0, "x", "", "T1") + .Input(1, "x_scale", "", "tensor(float)") + .Input(2, "x_zero_point", "", "T1") + .Input(3, "w", "", "T2") + .Input(4, "w_scale", "", "tensor(float)") + .Input(5, "w_zero_point", "", "T2") + .Input(6, "y_scale", "", "tensor(float)") + .Input(7, "y_zero_point", "", "T3") + .Input(8, "B", "", "T4", OpSchema::Optional) + .Output(0, "y", "", "T3") + .TypeConstraint("T1", {"tensor(int8)", "tensor(uint8)"}, "") + .TypeConstraint("T2", {"tensor(int8)", "tensor(uint8)"}, "") + .TypeConstraint("T3", {"tensor(int8)", "tensor(uint8)"}, "") + .TypeConstraint("T4", {"tensor(int32)"}, "") + .Attr("auto_pad", "", AttributeProto::STRING, std::string("NOTSET")) + .Attr("kernel_shape", "", AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("dilations", "", AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("strides", "", AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("pads", "", AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("group", "", AttributeProto::INT, static_cast(1)) + .Attr("channels_last", "", AttributeProto::INT, static_cast(0)) + .TypeAndShapeInferenceFunction([](InferenceContext& ctx) { + auto x_type = ctx.getInputType(0); + auto w_type = ctx.getInputType(3); + if (nullptr == x_type || nullptr == w_type || + x_type->value_case() != TypeProto::kTensorType || + w_type->value_case() != TypeProto::kTensorType) { + fail_type_inference("inputs are expected to have tensor type."); + } + + auto x_zero_point_type = ctx.getInputType(2); + if (nullptr == x_zero_point_type || x_zero_point_type->tensor_type().elem_type() != + x_type->tensor_type().elem_type()) { + fail_type_inference("input and zero_point pair is expected to have be same type."); + } + + auto w_zero_point_type = ctx.getInputType(5); + if (nullptr == w_zero_point_type || w_zero_point_type->tensor_type().elem_type() != + w_type->tensor_type().elem_type()) { + fail_type_inference("weight and zero_point pair is expected to have same type."); + } + + propagateElemTypeFromInputToOutput(ctx, 7, 0); + + if (getAttribute(ctx, "channels_last", 0) == 0) { + convPoolShapeInference(ctx, true, false, 0, 3); + } else { + onnxruntime::contrib::convPoolShapeInferenceNhwc(ctx, true, false, 0, 3); + } + })); } // namespace contrib -} // namespace onnxruntime +} // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/core/graph/contrib_ops/onnx_deprecated_operators.cc b/onnxruntime/core/graph/contrib_ops/onnx_deprecated_operators.cc new file mode 100644 index 0000000000000..167ac5edc2028 --- /dev/null +++ b/onnxruntime/core/graph/contrib_ops/onnx_deprecated_operators.cc @@ -0,0 +1,500 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "onnx/defs/schema.h" +#include "onnx/defs/shape_inference.h" +#include "onnx/defs/tensor_proto_util.h" + +// Register removed experimental ops for backward compatibility. +// Experimental operators do not have version history. However, Windows 10 1809(RS5) takes bunch of experimental operators +// as production ops. In order to maintain backward compatibility when the experimental ops are removed from ONNX +// they need to be added in onnxruntime as contrib ops. +// ONNX exp ops(Affine, Crop, ParametricSoftplus, ImageScaler, ThresholdedRelu, DynamicSlice, ScaledTanh, MVN) old +// version history maintenance +// See: https://github.com/onnx/onnx/pull/1909 + +#include "core/graph/contrib_ops/contrib_defs.h" +using namespace ONNX_NAMESPACE; +namespace onnxruntime { +namespace contrib { +constexpr const char* Affine_ver1_doc = R"DOC( +Affine takes one input data (Tensor) and produces one output data +(Tensor) where the affine function, y = alpha * x + beta, +is applied to the tensor elementwise. +)DOC"; + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + Affine, 1, + OpSchema() + .SetDoc(Affine_ver1_doc) + .Attr("alpha", "Value of alpha", AttributeProto::FLOAT, 1.0f) + .Attr("beta", "Value of beta", AttributeProto::FLOAT, 0.0f) + .Input(0, "X", "1D input tensor", "T") + .Output(0, "Y", "1D output tensor", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +constexpr const char* ParametricSoftplus_ver1_doc = R"DOC( +ParametricSoftplus takes one input data (Tensor) and produces one output data +(Tensor) where the softplus function, y = alpha * ln(exp(beta * x) + 1), is applied to +the tensor elementwise. +)DOC"; + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + ParametricSoftplus, 1, + OpSchema() + .SetDoc(ParametricSoftplus_ver1_doc) + .Attr("alpha", "Value of alpha", AttributeProto::FLOAT, OPTIONAL_VALUE) + .Attr("beta", "Value of beta", AttributeProto::FLOAT, OPTIONAL_VALUE) + .Input(0, "X", "1D input tensor", "T") + .Output(0, "Y", "1D input tensor", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +constexpr const char* ImageScaler_ver1_doc = + R"DOC(Scale and bias the input image. Bias values are stored in +the same ordering as the image pixel format.)DOC"; + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + ImageScaler, 1, + OpSchema() + .SetDoc(ImageScaler_ver1_doc) + .Attr("bias", "Bias applied to each channel, same size as C.", AttributeProto::FLOATS, OPTIONAL_VALUE) + .Attr("scale", "The scale to apply.", AttributeProto::FLOAT, 1.0f) + .Input(0, "input", "Input tensor of shape [N,C,H,W]", "T") + .Output(0, "output", "Result, has same shape and type as input", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +constexpr const char* Crop_ver1_doc = + R"DOC(Crop and image to the specified spatial dimensions. If scale is given, +then optionally start the crop offset by the left/top border amounts. +If scale is not provided, crop the borders as provided.)DOC"; + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + Crop, 1, + OpSchema() + .SetDoc(Crop_ver1_doc) + .Attr("border", "A 1-D values of (leftBorder, topBorder, rightBorder, bottomBorder).", AttributeProto::INTS, + OPTIONAL_VALUE) + .Attr("scale", "A 1-D values of (height, width).", AttributeProto::INTS, OPTIONAL_VALUE) + .Input(0, "input", "Input tensor of shape [N,C,H,W]", "T") + .Output(0, "output", "Result, has same type as input, with H and W dimensions reduced.", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.")); + +constexpr const char* ThresholdedRelu_ver1_doc = R"DOC( +ThresholdedRelu takes one input data (Tensor) and produces one output data +(Tensor) where the rectified linear function, y = x for x > alpha, y = 0 otherwise, +is applied to the tensor elementwise. )DOC"; + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + ThresholdedRelu, 1, + OpSchema() + .SetDoc(ThresholdedRelu_ver1_doc) + .Attr("alpha", "Threshold value", AttributeProto::FLOAT, 1.0f) + .Input(0, "X", "Input tensor", "T") + .Output(0, "Y", "Output tensor", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +constexpr const char* DynamicSlice_ver1_doc = R"DOC( +Produces a slice of the input tensor along multiple axes. Similar to numpy: +https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html +Slices uses `axes`, `starts` and `ends` inputs to specify the start and end +dimension for each axis in the list of axes, it uses this information to +slice the input `data` tensor. If a negative value is passed for any of the +start or end indices, it represent number of elements before the end of that +dimension. If the value passed to start or end is larger than the `n` (the +number of elements in this dimension), it represents `n`. For slicing to the +end of a dimension with unknown size, it is recommended to pass in `INT_MAX`. +If `axes` are omitted, they are set to `[0, ..., ndim-1]`. +Example 1: + data = [ + [1, 2, 3, 4], + [5, 6, 7, 8], + ] + axes = [0, 1] + starts = [1, 0] + ends = [2, 3] + result = [ + [5, 6, 7], + ] +Example 2: + data = [ + [1, 2, 3, 4], + [5, 6, 7, 8], + ] + starts = [0, 1] + ends = [-1, 1000] + result = [ + [2, 3, 4], + ] +)DOC"; + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + DynamicSlice, 1, + OpSchema() + .SetDoc(DynamicSlice_ver1_doc) + .Input(0, "data", "Tensor of data to extract slices from.", "T") + .Input(1, "starts", "1-D tensor of starting indices of corresponding axis in `axes`", "Tind") + .Input(2, "ends", "1-D tensor of ending indices (exclusive) of corresponding axis in axes", "Tind") + .Input(3, "axes", "1-D tensor of axes that `starts` and `ends` apply to.", "Tind", OpSchema::Optional) + .Output(0, "output", "Sliced data tensor.", "T") + .TypeConstraint("T", OpSchema::all_tensor_types(), "Constrain input and output types to all tensor types.") + .TypeConstraint("Tind", {"tensor(int32)", "tensor(int64)"}, "Constrain indices to integer types")); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA(GivenTensorFill, 1, + OpSchema() + .Input(0, "shape", "The shape of filled tensor", "T", OpSchema::Optional) + .Output(0, "X", "The filled tensor", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .Attr("values", "", AttributeProto::FLOATS, OPTIONAL_VALUE) + .Attr("shape", "", AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("input_as_shape", "", AttributeProto::INT, OPTIONAL_VALUE) + .Attr("extra_shape", "", AttributeProto::INTS, OPTIONAL_VALUE) + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); + if (ctx.getAttribute("shape") != nullptr) { + propagateShapeFromAttributeToOutput(ctx, "shape", 0); + return; + } + // The type constraints above do not allow for input_as_shape + // and may need to be fixed. + if (getAttribute(ctx, "input_as_shape", 0) != 0) // dynamic shape + return; + std::vector extra_shape; + getRepeatedAttribute(ctx, "extra_shape", extra_shape); + if (hasInputShape(ctx, 0)) { + ONNX_NAMESPACE::TensorShapeProto shape = + ctx.getInputType(0)->tensor_type().shape(); + for (auto extra_dim_val : extra_shape) { + if (extra_dim_val < 0) + fail_shape_inference( + "Negative values are not allowed in a shape specification"); + shape.add_dim()->set_dim_value(extra_dim_val); + } + updateOutputShape(ctx, 0, shape); + } + })); + +constexpr const char* Scale_ver1_doc = R"DOC( +Scale takes one input data (Tensor) and produces one output data +(Tensor) whose value is the input data tensor scaled element-wise. +)DOC"; + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + Scale, 1, + OpSchema() + .Input(0, "input", "Input data to be scaled", "T") + .Output(0, "output", "Output data after scaling", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .SetDoc(Scale_ver1_doc) + .Attr("scale", "The scale to apply.", AttributeProto::FLOAT, 1.0f) + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +constexpr const char* GRUUnit_ver1_doc = R"DOC( +GRUUnit computes the activations of a standard GRU, +in a sequence-length aware fashion. +Concretely, given the (fused) inputs X (TxNxD), the previous hidden +state (NxD), and the sequence lengths (N), computes the GRU +activations, avoiding computation if the input is invalid (as in, the +value at X[t][n] >= seqLengths[n]. +)DOC"; + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA(GRUUnit, 1, + OpSchema() + .SetDoc(GRUUnit_ver1_doc) + .Attr("drop_states", + "Bool to determine if hidden state is zeroes or passed " + "along for timesteps past the given sequence_length.", + AttributeProto::INT, OPTIONAL_VALUE) + .Input(0, "hidden_prev", "The previous GRU hidden state.", "T") + .Input(1, "gates", + "Unactivated gate outputs from forget, update, " + "and output gates, pre-activation.", + "T") + .Input(2, "seq_lengths", + "Array of sequence lengths. " + "len(seq_lengths) should equal batch size N.", + "T") + .Input(3, "t", "The timestep for this operation.", "T") + .Output(0, "hidden", "The new GRU hidden state calculated by this op.", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.")); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA(GivenTensorFill, 10, + OpSchema() + .Deprecate() + .Input(0, "shape", "The shape of filled tensor", "T", OpSchema::Optional) + .Output(0, "X", "The filled tensor", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .Attr("values", "", AttributeProto::FLOATS, OPTIONAL_VALUE) + .Attr("shape", "", AttributeProto::INTS, OPTIONAL_VALUE) + .Attr("input_as_shape", "", AttributeProto::INT, OPTIONAL_VALUE) + .Attr("extra_shape", "", AttributeProto::INTS, OPTIONAL_VALUE) + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); + if (ctx.getAttribute("shape") != nullptr) { + propagateShapeFromAttributeToOutput(ctx, "shape", 0); + return; + } + // The type constraints above do not allow for input_as_shape + // and may need to be fixed. + if (getAttribute(ctx, "input_as_shape", 0) != 0) // dynamic shape + return; + std::vector extra_shape; + getRepeatedAttribute(ctx, "extra_shape", extra_shape); + if (hasInputShape(ctx, 0)) { + ONNX_NAMESPACE::TensorShapeProto shape = + ctx.getInputType(0)->tensor_type().shape(); + for (auto extra_dim_val : extra_shape) { + if (extra_dim_val < 0) + fail_shape_inference( + "Negative values are not allowed in a shape specification"); + shape.add_dim()->set_dim_value(extra_dim_val); + } + updateOutputShape(ctx, 0, shape); + } + })); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + Scale, 10, + OpSchema() + .Deprecate() + .Input(0, "input", "Input data to be scaled", "T") + .Output(0, "output", "Output data after scaling", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .SetDoc(Scale_ver1_doc) + .Attr("scale", "The scale to apply.", AttributeProto::FLOAT, 1.0f) + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA(GRUUnit, 10, + OpSchema() + .Deprecate() + .SetDoc(GRUUnit_ver1_doc) + .Attr("drop_states", + "Bool to determine if hidden state is zeroes or passed " + "along for timesteps past the given sequence_length.", + AttributeProto::INT, OPTIONAL_VALUE) + .Input(0, "hidden_prev", "The previous GRU hidden state.", "T") + .Input(1, "gates", + "Unactivated gate outputs from forget, update, " + "and output gates, pre-activation.", + "T") + .Input(2, "seq_lengths", + "Array of sequence lengths. " + "len(seq_lengths) should equal batch size N.", + "T") + .Input(3, "t", "The timestep for this operation.", "T") + .Output(0, "hidden", "The new GRU hidden state calculated by this op.", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.")); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + MeanVarianceNormalization, 1, + OpSchema() + .SetDoc(R"DOC(Perform mean variance normalization.)DOC") + .Attr("across_channels", "If 1, mean and variance are computed across channels. Default is 0.", + AttributeProto::INT, static_cast(0)) + .Attr("normalize_variance", "If 0, normalize the mean only. Default is 1.", AttributeProto::INT, + static_cast(1)) + .Input(0, "input", "Input tensor of shape [N,C,H,W]", "T") + .Output(0, "output", "Result, has same shape and type as input", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + ScaledTanh, 1, + OpSchema() + .Attr("alpha", "Scaling value", AttributeProto::FLOAT, OPTIONAL_VALUE) + .Attr("beta", "Scaling value", AttributeProto::FLOAT, OPTIONAL_VALUE) + .Input(0, "input", "Input tensor", "T") + .Output(0, "output", + "The scaled hyperbolic tangent values of the input tensor " + "computed element-wise", + "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + Affine, 10, + OpSchema() + .Deprecate() + .SetDoc(Affine_ver1_doc) + .Attr("alpha", "Value of alpha", AttributeProto::FLOAT, 1.0f) + .Attr("beta", "Value of beta", AttributeProto::FLOAT, 0.0f) + .Input(0, "X", "1D input tensor", "T") + .Output(0, "Y", "1D output tensor", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + ParametricSoftplus, 10, + OpSchema() + .Deprecate() + .SetDoc(ParametricSoftplus_ver1_doc) + .Attr("alpha", "Value of alpha", AttributeProto::FLOAT, OPTIONAL_VALUE) + .Attr("beta", "Value of beta", AttributeProto::FLOAT, OPTIONAL_VALUE) + .Input(0, "X", "1D input tensor", "T") + .Output(0, "Y", "1D input tensor", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + ImageScaler, 10, + OpSchema() + .Deprecate() + .SetDoc(ImageScaler_ver1_doc) + .Attr("bias", "Bias applied to each channel, same size as C.", AttributeProto::FLOATS, OPTIONAL_VALUE) + .Attr("scale", "The scale to apply.", AttributeProto::FLOAT, 1.0f) + .Input(0, "input", "Input tensor of shape [N,C,H,W]", "T") + .Output(0, "output", "Result, has same shape and type as input", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + Crop, 10, + OpSchema() + .Deprecate() + .SetDoc(Crop_ver1_doc) + .Attr("border", "A 1-D values of (leftBorder, topBorder, rightBorder, bottomBorder).", AttributeProto::INTS) + .Attr("scale", "A 1-D values of (height, width).", AttributeProto::INTS, OPTIONAL_VALUE) + .Input(0, "input", "Input tensor of shape [N,C,H,W]", "T") + .Output(0, "output", "Result, has same type as input, with H and W dimensions reduced.", "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + // Type inference + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 0, 0); + + // Shape inference + auto* output_shape = ctx.getOutputType(0)->mutable_tensor_type()->mutable_shape(); + + if (ONNX_NAMESPACE::hasNInputShapes(ctx, 1)) { + const auto& input_shape = ctx.getInputType(0)->tensor_type().shape(); + const auto input_rank = input_shape.dim_size(); + if (input_rank != 4) fail_shape_inference("Input's shape must be 4-D"); + + // parse necessary attributes for futher processing + std::vector border; + bool border_present = getRepeatedAttribute(ctx, "border", border); + if (!border_present || border.size() != 4) + fail_shape_inference( + "'Border' attribute must be present and must contain exactly 4 values - " + "(left_border, top_border, right_border, bottom_border)"); + + std::vector scale; + bool scale_present = getRepeatedAttribute(ctx, "scale", scale); + if (scale_present && scale.size() != 2) + fail_shape_inference("'Scale' must contain exactly 2 values - (height, width)"); + + // actual shape inference processing + // [N, C] can be copied over from the input as is + *output_shape->mutable_dim(static_cast(0)) = input_shape.dim(static_cast(0)); + *output_shape->mutable_dim(static_cast(1)) = input_shape.dim(static_cast(1)); + + // process 'H' and 'W' + if (!utils::HasDimValue(input_shape.dim(static_cast(2))) || + !utils::HasDimValue(input_shape.dim(static_cast(3)))) { + // either height and width input has symbolic dims, so can't proceed further + // add two dims as placeholders for output_H and output_W and return + output_shape->add_dim(); + output_shape->add_dim(); + return; + } + + int64_t H = input_shape.dim(static_cast(2)).dim_value(); + int64_t W = input_shape.dim(static_cast(3)).dim_value(); + + int64_t left_border = border[0], top_border = border[1], right_border = border[2], + bottom_border = border[3]; + + if (H < top_border + bottom_border) + fail_shape_inference("Input's height (", H, + ") needs to be greater than or equal to " + "the top_border (", + top_border, ") + bottom_border (", bottom_border, ")"); + + if (W < left_border + right_border) + fail_shape_inference("Input's width (", W, + ") needs to be greater than or equal to " + "the left_border (", + left_border, ") + right_border (", right_border, ")"); + + int64_t bottom_limit = H - bottom_border; + int64_t right_limit = W - right_border; + + // scale = (height, width) + if (!scale.empty()) { + bottom_limit = top_border + scale[0]; + right_limit = left_border + scale[1]; + + if (H < bottom_limit) + fail_shape_inference("Input's height (", H, ") needs to be greater than or equal to the top_border (", + top_border, ") + scale[0] (", scale[0], ")"); + + if (W < right_limit) + fail_shape_inference("Input's width (", W, ") needs to be greater than or equal to the left_border (", + left_border, ") + scale[1] (", scale[1], ")"); + } + + auto* h_output_dim = output_shape->add_dim(); + h_output_dim->set_dim_value(bottom_limit - top_border); + + auto* w_output_dim = output_shape->add_dim(); + w_output_dim->set_dim_value(right_limit - left_border); + } else { + // Rank Inference at the very least + // (We know that the output is going to be 4-D) + for (int i = 0; i < 4; ++i) { + output_shape->add_dim(); + } + } + })); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + DynamicSlice, 10, + OpSchema() + .Deprecate() + .SetDoc(DynamicSlice_ver1_doc) + .Input(0, "data", "Tensor of data to extract slices from.", "T") + .Input(1, "starts", "1-D tensor of starting indices of corresponding axis in `axes`", "Tind") + .Input(2, "ends", "1-D tensor of ending indices (exclusive) of corresponding axis in axes", "Tind") + .Input(3, "axes", "1-D tensor of axes that `starts` and `ends` apply to.", "Tind", OpSchema::Optional) + .Output(0, "output", "Sliced data tensor.", "T") + .TypeConstraint("T", OpSchema::all_tensor_types(), "Constrain input and output types to all tensor types.") + .TypeConstraint("Tind", {"tensor(int32)", "tensor(int64)"}, "Constrain indices to integer types")); + +ONNX_CONTRIB_OPERATOR_SET_SCHEMA( + ScaledTanh, 10, + OpSchema() + .Deprecate() + .Attr("alpha", "Scaling value", AttributeProto::FLOAT, OPTIONAL_VALUE) + .Attr("beta", "Scaling value", AttributeProto::FLOAT, OPTIONAL_VALUE) + .Input(0, "input", "Input tensor", "T") + .Output(0, "output", + "The scaled hyperbolic tangent values of the input tensor " + "computed element-wise", + "T") + .TypeConstraint("T", {"tensor(float16)", "tensor(float)", "tensor(double)"}, + "Constrain input and output types to float tensors.") + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); + +// End of ONNX exp ops(Affine, Crop, ParametricSoftplus, ImageScaler, ThresholdedRelu, DynamicSlice, ScaledTanh, MVN) +// old version history maintenance +} // namespace contrib +} // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/core/graph/contrib_ops/onnx_deprecated_opset.h b/onnxruntime/core/graph/contrib_ops/onnx_deprecated_opset.h new file mode 100644 index 0000000000000..ccc9ade10c213 --- /dev/null +++ b/onnxruntime/core/graph/contrib_ops/onnx_deprecated_opset.h @@ -0,0 +1,62 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include "onnx/defs/schema.h" +#include "core/graph/contrib_ops/ms_schema.h" + +// This file contains deprecated ONNX operators that have been removed from ONNX spec, but we still need to keep them +// to maintain backward compatibility. Strictly speaking, this file doesn't define an opset. It only contains a group +// of operators. + +namespace onnxruntime { +namespace contrib { +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, Affine); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, ParametricSoftplus); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, ImageScaler); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, Crop); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, ThresholdedRelu); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, DynamicSlice); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, GivenTensorFill); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, Scale); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, GRUUnit); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 10, GivenTensorFill); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 10, Scale); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 10, GRUUnit); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, MeanVarianceNormalization); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 1, ScaledTanh); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 10, Affine); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 10, ParametricSoftplus); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 10, ImageScaler); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 10, Crop); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 10, DynamicSlice); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Onnx, 10, ScaledTanh); + +class OpSet_ONNX_Deprecated { + public: + static void ForEachSchema(std::function fn) { + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + fn(GetOpSchema()); + } +}; +} // namespace contrib +} // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/core/graph/contrib_ops/quantization_defs.cc b/onnxruntime/core/graph/contrib_ops/quantization_defs.cc index 335b7efe8b216..9144dddb75908 100644 --- a/onnxruntime/core/graph/contrib_ops/quantization_defs.cc +++ b/onnxruntime/core/graph/contrib_ops/quantization_defs.cc @@ -5,6 +5,8 @@ #include "core/graph/constants.h" #include "core/graph/contrib_ops/contrib_defs.h" + + namespace ONNX_NAMESPACE { void RNNShapeInference(InferenceContext& ctx); @@ -22,11 +24,13 @@ void matmulShapeInference( namespace onnxruntime { namespace contrib { - using ONNX_NAMESPACE::AttributeProto; using ONNX_NAMESPACE::InferenceContext; using ONNX_NAMESPACE::OpSchema; using ONNX_NAMESPACE::OPTIONAL_VALUE; +#ifndef NDEBUG +using ONNX_NAMESPACE::DbgOperatorSetTracker; +#endif void ValidateTypeAndShapeForScaleAndZP(ONNX_NAMESPACE::InferenceContext& ctx, int index, ::google::protobuf::int32 expectedType, bool isScalar, int expectedTensorSize) { if (ctx.getNumInputs() > static_cast(index)) { @@ -136,16 +140,13 @@ Performs element-wise binary {name} on 8 bit data types (with Numpy-style broadc }; } -void RegisterQuantizationSchemas() { static const char* QuantizeLinear_ver1_doc = R"DOC( The linear quantization operator. It consumes a full precision data, a scale, a zero point to compute the low precision / quantized tensor. The quantization formula is y = saturate ((x / y_scale) + y_zero_point).For saturation, it saturates to [0, 255] if it's uint8, or [-128, 127] if it's int8. For (x / y_scale), it's rounding to nearest ties to even. Refer to https://en.wikipedia.org/wiki/Rounding for details. Scale and zero point must have same shape. They must be either scalar (per tensor) or 1-D tensor (per 'axis').)DOC"; - ONNX_CONTRIB_OPERATOR_SCHEMA(QuantizeLinear) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(QuantizeLinear, 1, OpSchema() .Attr( "axis", "The axis along which same quantization parameters are applied. It's optional." @@ -193,16 +194,14 @@ Scale and zero point must have same shape. They must be either scalar (per tenso auto& input_shape = getInputShape(ctx, 0); updateOutputShape(ctx, 0, input_shape); - }); + })); static const char* DequantizeLinear_ver1_doc = R"DOC( The linear dequantization operator. It consumes a quantized data, a scale, a zero point and computes the full precision data. The dequantization formula is y = (x - x_zero_point) * x_scale. Scale and zero point must have same shape. They must be either scalar (per tensor) or 1-D tensor (per 'axis').)DOC"; - ONNX_CONTRIB_OPERATOR_SCHEMA(DequantizeLinear) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(DequantizeLinear, 1, OpSchema() .Attr("axis", "The axis along which same quantization parameters are applied. It's optional." "If it's not specified, it means per-tensor quantization and input 'x_scale' and 'x_zero_point' must be scalars." @@ -250,11 +249,9 @@ Scale and zero point must have same shape. They must be either scalar (per tenso auto& input_shape = getInputShape(ctx, 0); updateOutputShape(ctx, 0, input_shape); - }); + })); - ONNX_CONTRIB_OPERATOR_SCHEMA(ReduceSumInteger) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(ReduceSumInteger, 1, OpSchema() .SetDoc(R"DOC( Computes the sum of the low-precision input tensor's element along the provided axes. The resulting tensor has the same rank as the input if keepdims equal 1. If keepdims equal 0, @@ -274,12 +271,9 @@ with the exception that numpy default keepdims to False instead of True.)DOC") AttributeProto::INTS) .Attr( "keepdims", - "Keep the reduced dimension or not, default 1 mean keep reduced dimension.", - AttributeProto::INT); + "Keep the reduced dimension or not, default 1 mean keep reduced dimension.", AttributeProto::INT)); - ONNX_CONTRIB_OPERATOR_SCHEMA(MulInteger) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(MulInteger, 1, OpSchema() .SetDoc(R"DOC(Performs element-wise binary quantized multiplication (with Numpy-style broadcasting support). "This operator supports **multidirectional (i.e., Numpy-style) broadcasting**" The output of this op is the int32 accumulated result of the mul operation @@ -328,11 +322,9 @@ C (int32) = (A - A_zero_point) * (B - B_zero_point) ctx.getInputType(2)->tensor_type().shape(), *ctx.getOutputType(0)->mutable_tensor_type()->mutable_shape()); } - }); + })); - ONNX_CONTRIB_OPERATOR_SCHEMA(DynamicQuantizeMatMul) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(DynamicQuantizeMatMul, 1, OpSchema() .Input(0, "A", "N-dimensional matrix A", "T1") .Input(1, "B", "N-dimensional matrix B", "T2") .Input( @@ -367,11 +359,9 @@ C (int32) = (A - A_zero_point) * (B - B_zero_point) .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { propagateElemTypeFromInputToOutput(ctx, 0, 0); ONNX_NAMESPACE::matmulShapeInference(ctx, 0, 1); - }); + })); - ONNX_CONTRIB_OPERATOR_SCHEMA(MatMulIntegerToFloat) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(MatMulIntegerToFloat, 1, OpSchema() .Input(0, "A", "N-dimensional matrix A", "T1") .Input(1, "B", "N-dimensional matrix B", "T2") .Input( @@ -426,23 +416,17 @@ C (int32) = (A - A_zero_point) * (B - B_zero_point) .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { propagateElemTypeFromInputToOutput(ctx, 2, 0); ONNX_NAMESPACE::matmulShapeInference(ctx, 0, 1); - }); + })); - ONNX_CONTRIB_OPERATOR_SCHEMA(QLinearAdd) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(QLinearAdd, 1, OpSchema() .FillUsing(QLinearMathDocGenerator("addition", - "C = (A_scale * (A - A_zero_point) + B_scale * (B - B_zero_point))/C_scale + C_zero_point")); + "C = (A_scale * (A - A_zero_point) + B_scale * (B - B_zero_point))/C_scale + C_zero_point"))); - ONNX_CONTRIB_OPERATOR_SCHEMA(QLinearMul) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(QLinearMul, 1, OpSchema() .FillUsing(QLinearMathDocGenerator("multiplication", - "C = ((A - A_zero_point) * (B - B_zero_point)) * (A_scale * B_scale)/C_scale + C_zero_point")); + "C = ((A - A_zero_point) * (B - B_zero_point)) * (A_scale * B_scale)/C_scale + C_zero_point"))); - ONNX_CONTRIB_OPERATOR_SCHEMA(QLinearReduceMean) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(QLinearReduceMean, 1, OpSchema() .SetDoc(R"DOC( Computes the mean of the low-precision input tensor's element along the provided axes. The resulting tensor has the same rank as the input if keepdims equal 1. If keepdims equal 0, @@ -544,7 +528,7 @@ This helps to improve accuracy as after ReduceMean operation the range of the ou } } } - }); + })); const char* QLinearLeakyReluDoc_ver1 = R"DOC( QLinearLeakyRelu takes quantized input data (Tensor), an argument alpha, and quantize parameter for output, @@ -552,9 +536,7 @@ and produces one output data (Tensor) where the function `f(x) = quantize(alp `f(x) = quantize(dequantize(x)) for dequantize(x) >= 0`, is applied to the data tensor elementwise. )DOC"; - ONNX_CONTRIB_OPERATOR_SCHEMA(QLinearLeakyRelu) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(QLinearLeakyRelu, 1, OpSchema() .SetDoc(QLinearLeakyReluDoc_ver1) .Attr("alpha", "Coefficient of leakage.", AttributeProto::FLOAT, 0.01f) .Input(0, "X", "Input tensor", "T") @@ -575,16 +557,14 @@ and produces one output data (Tensor) where the function `f(x) = quantize(alp "T", {"tensor(uint8)", "tensor(int8)"}, "Constrain input and output types to 8 bit tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); const char* QLinearSigmoidDoc_ver1 = R"DOC( QLinearSigmoid takes quantized input data (Tensor), and quantize parameter for output, and produces one output data (Tensor) where the function `f(x) = quantize(Sigmoid(dequantize(x)))`, is applied to the data tensor elementwise. Wwhere the function `Sigmoid(x) = 1 / (1 + exp(-x))` )DOC"; - ONNX_CONTRIB_OPERATOR_SCHEMA(QLinearSigmoid) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(QLinearSigmoid, 1, OpSchema() .SetDoc(QLinearSigmoidDoc_ver1) .Input(0, "X", "Input tensor", "T") .Input(1, "X_scale", @@ -604,11 +584,9 @@ Wwhere the function `Sigmoid(x) = 1 / (1 + exp(-x))` )DOC"; "T", {"tensor(uint8)", "tensor(int8)"}, "Constrain input and output types to 8 bit tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput); + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::propagateShapeAndTypeFromFirstInput)); - ONNX_CONTRIB_OPERATOR_SCHEMA(DynamicQuantizeLSTM) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(DynamicQuantizeLSTM, 1, OpSchema() .Attr( "direction", "Specify if the RNN is forward, reverse, or bidirectional. " @@ -781,11 +759,9 @@ Wwhere the function `Sigmoid(x) = 1 / (1 + exp(-x))` )DOC"; "T2", {"tensor(uint8)", "tensor(int8)"}, "Constrain weights types to 8 bit tensors.") - .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::RNNShapeInference); + .TypeAndShapeInferenceFunction(ONNX_NAMESPACE::RNNShapeInference)); - ONNX_CONTRIB_OPERATOR_SCHEMA(QLinearConcat) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(QLinearConcat, 1, OpSchema() .Attr("axis", "Which axis to concat on", AttributeProto::INT) .SetDoc( "Concatenate a list of tensors into a single tensor." @@ -861,11 +837,9 @@ Wwhere the function `Sigmoid(x) = 1 / (1 + exp(-x))` )DOC"; if (all_lengths_known) { output_shape->mutable_dim(axis)->set_dim_value(total_length); } - }); + })); - ONNX_CONTRIB_OPERATOR_SCHEMA(QGemm) - .SetDomain(kMSDomain) - .SinceVersion(1) + ONNX_MS_OPERATOR_SET_SCHEMA(QGemm, 1, OpSchema() .SetDoc("Quantized Gemm") .Input(0, "A", @@ -985,8 +959,6 @@ Wwhere the function `Sigmoid(x) = 1 / (1 + exp(-x))` )DOC"; {first_input_shape.dim(transA ? 1 : 0), second_input_shape.dim(transB ? 0 : 1)}); } - }); -} - + })); } // namespace contrib } // namespace onnxruntime diff --git a/onnxruntime/core/graph/contrib_ops/quantization_defs.h b/onnxruntime/core/graph/contrib_ops/quantization_defs.h index 57a45665e75f5..3b4eaaf162e4f 100644 --- a/onnxruntime/core/graph/contrib_ops/quantization_defs.h +++ b/onnxruntime/core/graph/contrib_ops/quantization_defs.h @@ -9,7 +9,6 @@ #endif #include "onnx/onnx_pb.h" #include "onnx/onnx-operators_pb.h" -#include "core/framework/tensorprotoutils.h" namespace onnxruntime { namespace contrib { diff --git a/onnxruntime/core/session/environment.cc b/onnxruntime/core/session/environment.cc index ba479a1b80f19..daa47db1fcffd 100644 --- a/onnxruntime/core/session/environment.cc +++ b/onnxruntime/core/session/environment.cc @@ -10,6 +10,8 @@ #if !defined(ORT_MINIMAL_BUILD) #include "onnx/defs/operator_sets.h" #include "onnx/defs/operator_sets_ml.h" +#include "core/graph/contrib_ops/ms_opset.h" +#include "core/graph/contrib_ops/onnx_deprecated_opset.h" #if defined(ENABLE_TRAINING) || defined(ENABLE_TRAINING_OPS) #include "onnx/defs/operator_sets_training.h" #endif @@ -24,6 +26,7 @@ #include "core/platform/env.h" #include "core/util/thread_utils.h" + #ifdef ONNXRUNTIME_ENABLE_INSTRUMENT #include "core/platform/tracing.h" #endif @@ -225,6 +228,10 @@ Status Environment::Initialize(std::unique_ptr logging_ // Register contributed schemas. // The corresponding kernels are registered inside the appropriate execution provider. #ifndef DISABLE_CONTRIB_OPS +#ifndef ORT_MINIMAL_BUILD + RegisterOpSetSchema(); + RegisterOpSetSchema(); +#endif contrib::RegisterContribSchemas(); #endif #ifdef USE_DML From c9fbd0b15af9f2b595e59632c146f997790ed25c Mon Sep 17 00:00:00 2001 From: Hubert Lu <55214931+hubertlu-tw@users.noreply.github.com> Date: Wed, 9 Feb 2022 12:51:06 -0800 Subject: [PATCH 35/56] Optimize cuComputePartGradGammaBeta kernel for MI100 (#10475) * Optimize cuComputePartGradGammaBeta kernel for MI100 Co-authored-by: root Co-authored-by: Jeff Daily --- .../orttraining/training_ops/cuda/nn/layer_norm.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/orttraining/orttraining/training_ops/cuda/nn/layer_norm.cc b/orttraining/orttraining/training_ops/cuda/nn/layer_norm.cc index 15bac8f7d7c6a..4813382211368 100644 --- a/orttraining/orttraining/training_ops/cuda/nn/layer_norm.cc +++ b/orttraining/orttraining/training_ops/cuda/nn/layer_norm.cc @@ -89,7 +89,12 @@ Status LayerNormGrad::ComputeInternal(OpKernelContext* p_op_ke bias_grad_data = reinterpret_cast(bias_grad->template MutableData()); } + #ifndef USE_ROCM const int part_size = 16; + #else + // Optimization for ROCm MI100 + const int part_size = 64; + #endif auto part_grad_gamma = GetScratchBuffer(part_size * n2); auto part_grad_beta = GetScratchBuffer(part_size * n2); @@ -138,7 +143,12 @@ Status InvertibleLayerNormGrad::ComputeInternal(OpKernelContext* p_op_kern auto scale_grad_data = reinterpret_cast(scale_grad->template MutableData()); auto bias_grad_data = reinterpret_cast(bias_grad->template MutableData()); + #ifndef USE_ROCM const int part_size = 16; + #else + // Optimization for ROCm MI100 + const int part_size = 64; + #endif auto part_grad_gamma = GetScratchBuffer(part_size * n2); auto part_grad_beta = GetScratchBuffer(part_size * n2); From 6f3ade55ecd2b989612c1680b87ad9b6c557d1c9 Mon Sep 17 00:00:00 2001 From: Changming Sun Date: Wed, 9 Feb 2022 14:23:17 -0800 Subject: [PATCH 36/56] Move QAttention/QEmbedLayerNormalization op defs to quantization_defs.cc (#10507) --- .../core/graph/contrib_ops/bert_defs.cc | 286 +----------------- onnxruntime/core/graph/contrib_ops/ms_opset.h | 4 +- .../graph/contrib_ops/quantization_defs.cc | 121 +++++++- .../contrib_ops/shape_inference_functions.cc | 178 +++++++++++ .../contrib_ops/shape_inference_functions.h | 17 ++ 5 files changed, 317 insertions(+), 289 deletions(-) create mode 100644 onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc create mode 100644 onnxruntime/core/graph/contrib_ops/shape_inference_functions.h diff --git a/onnxruntime/core/graph/contrib_ops/bert_defs.cc b/onnxruntime/core/graph/contrib_ops/bert_defs.cc index c9f12a7a1edb5..3da9e4fc8d3d5 100644 --- a/onnxruntime/core/graph/contrib_ops/bert_defs.cc +++ b/onnxruntime/core/graph/contrib_ops/bert_defs.cc @@ -5,177 +5,12 @@ #include "core/graph/contrib_ops/contrib_defs.h" #include "core/graph/contrib_ops/quantization_defs.h" #include "core/graph/contrib_ops/onnx_function_util.h" +#include "core/graph/contrib_ops/shape_inference_functions.h" using namespace ::ONNX_NAMESPACE; namespace onnxruntime { namespace contrib { -void embedLayerNormalizationShapeInference(InferenceContext& ctx) { - propagateElemTypeFromInputToOutput(ctx, 2, 0); - propagateElemTypeFromInputToOutput(ctx, 0, 1); - if (!hasInputShape(ctx, 0)) { - // TODO(kreeger): In this case update the output to (?, ?, hidden_size). - return; - } - - auto& input_ids_shape = getInputShape(ctx, 0); - auto& input_ids_dims = input_ids_shape.dim(); - - // Note that both batch size and sequence length could be symbolic. - // So we only check dimension size here. - if (input_ids_dims.size() != 2) { - fail_shape_inference("input_ids shall be 2 dimensions"); - } - - bool has_segment = hasInputShape(ctx, 1); - if (has_segment) { - // Ensure that segment_ids has the same shape. - auto& segment_ids_shape = getInputShape(ctx, 1); - auto& segment_ids_dims = segment_ids_shape.dim(); - if (segment_ids_dims.size() != 2) { - fail_shape_inference("segment_ids input shall be 2 dimensions"); - } - } - - // get hidden_size from the last dimension of embedding - auto& word_embedding_shape = getInputShape(ctx, 2); - auto& word_embedding_dims = word_embedding_shape.dim(); - if (word_embedding_dims.size() != 2 || - !word_embedding_dims[1].has_dim_value() || - word_embedding_shape.dim(1).dim_value() <= 0) { - fail_shape_inference("word_embedding should have 2 dimensions and dimension size is known."); - } - int64_t hidden_size = word_embedding_shape.dim(1).dim_value(); - - // Ensure that all embeddings + the gamma/beta tensors have the same hidden_size: - auto& position_embedding_shape = getInputShape(ctx, 3); - auto& position_embedding_dims = position_embedding_shape.dim(); - if (position_embedding_dims.size() != 2 || - !position_embedding_dims[1].has_dim_value() || - position_embedding_shape.dim(1).dim_value() != hidden_size) { - fail_shape_inference( - "position_embedding should have 2 dimensions, dimension size known, " - "and same hidden size as word_embedding."); - } - - if (has_segment) { - auto& segment_embedding_shape = getInputShape(ctx, 4); - auto& segment_embedding_dims = segment_embedding_shape.dim(); - if (segment_embedding_dims.size() != 2 || - !segment_embedding_dims[1].has_dim_value() || - segment_embedding_shape.dim(1).dim_value() != hidden_size) { - fail_shape_inference( - "segment_embedding should have 2 dimensions, dimension size known, " - "and same hidden size as word_embedding."); - } - } - - auto& gamma_shape = getInputShape(ctx, 5); - auto& gamma_dims = gamma_shape.dim(); - if (gamma_dims.size() != 1 || - !gamma_dims[0].has_dim_value() || - gamma_shape.dim(0).dim_value() != hidden_size) { - fail_shape_inference( - "gamma should have 2 dimension, dimension size known, " - "and same hidden size as word_embedding."); - } - - auto& beta_shape = getInputShape(ctx, 6); - auto& beta_dims = gamma_shape.dim(); - if (beta_dims.size() != 1 || - !beta_dims[0].has_dim_value() || - beta_shape.dim(0).dim_value() != hidden_size) { - fail_shape_inference( - "beta should have 1 dimension, dimension size known, " - "and same hidden size as word_embedding."); - } - - // input shape is (batch_size, sequence_length), output shape is (batch_size, sequence_length, hidden_size) - ONNX_NAMESPACE::TensorShapeProto output_shape; - *output_shape.add_dim() = input_ids_dims[0]; - *output_shape.add_dim() = input_ids_dims[1]; - - output_shape.add_dim(); - output_shape.mutable_dim(2)->set_dim_value(hidden_size); - - updateOutputShape(ctx, 0, output_shape); - - // mask_index shape is (batch_size) - ONNX_NAMESPACE::TensorShapeProto mask_index_shape; - *mask_index_shape.add_dim() = input_ids_dims[0]; - updateOutputShape(ctx, 1, mask_index_shape); - - if (ctx.getNumOutputs() > 2) { - updateOutputShape(ctx, 2, output_shape); - propagateElemTypeFromInputToOutput(ctx, 0, 2); - } -} -void AttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx, int past_input_index) { - // Type inference - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 2, 0); - if (ctx.getNumOutputs() > 1) { - ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 2, 1); - } - - // Shape inference - if (hasInputShape(ctx, 0) && hasInputShape(ctx, 2)) { - auto& input_shape = getInputShape(ctx, 0); - auto& input_dims = input_shape.dim(); - if (input_dims.size() != 3) { - fail_shape_inference("Inputs 0 shall be 3 dimensions"); - } - - auto& bias_shape = getInputShape(ctx, 2); - auto& bias_dims = bias_shape.dim(); - if (bias_dims.size() != 1) { - fail_shape_inference("Invalid bias shape"); - } - - std::vector qkv_hidden_sizes; - getRepeatedAttribute(ctx, "qkv_hidden_sizes", qkv_hidden_sizes); - - int64_t output_hidden_size; - if (qkv_hidden_sizes.size() != 0) { - if (qkv_hidden_sizes.size() != 3) { - fail_shape_inference("qkv_hidden_sizes should have 3 elements") - } - output_hidden_size = qkv_hidden_sizes[2]; - } else { - output_hidden_size = bias_shape.dim(0).dim_value() / 3; - } - - ONNX_NAMESPACE::TensorShapeProto output_shape; - for (auto& dim : input_dims) { - *output_shape.add_dim() = dim; - } - - output_shape.mutable_dim(2)->set_dim_value(output_hidden_size); - updateOutputShape(ctx, 0, output_shape); - - // TODO does the extra output need any changes? - if (ctx.getNumOutputs() > 1) { - if (hasInputShape(ctx, past_input_index)) { - auto& past_shape = getInputShape(ctx, past_input_index); - auto& past_dims = past_shape.dim(); - if (past_dims.size() != 5) { - fail_shape_inference("Inputs 4 shall be 5 dimensions"); - } - - if (past_dims[3].has_dim_value() && input_dims[1].has_dim_value()) { - auto all_sequence_length = past_shape.dim(3).dim_value() + input_shape.dim(1).dim_value(); - - ONNX_NAMESPACE::TensorShapeProto present_shape; - for (auto& dim : past_dims) { - *present_shape.add_dim() = dim; - } - present_shape.mutable_dim(3)->set_dim_value(all_sequence_length); - - updateOutputShape(ctx, 1, present_shape); - } - } - } - } -} void DecoderAttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx) { // Type inference @@ -255,86 +90,6 @@ ONNX_MS_OPERATOR_SET_SCHEMA(Attention, 1, AttentionTypeAndShapeInference(ctx, past_input_index); })); -ONNX_MS_OPERATOR_SET_SCHEMA(QAttention, 1, - OpSchema() - .SetDoc("Quantization of Multi-Head Self Attention.") - .Attr("num_heads", "Number of attention heads", AttributeProto::INT) - .Attr("unidirectional", - "Whether every token can only attend to previous tokens. Default value is 0.", - AttributeProto::INT, - static_cast(0)) - .Input( - 0, - "input", - "3D input tensor with shape (batch_size, sequence_length, input_hidden_size)", - "T1") - .Input( - 1, - "weight", - "2D input tensor with shape (input_hidden_size, 3 * hidden_size), hidden_size = num_heads * head_size", - "T2") - .Input( - 2, - "bias", - "1D input tensor with shape (3 * hidden_size)", - "T3") - .Input( - 3, - "input_scale", - "scale of quantized input tensor. It's a scalar, which means a per-tensor/layer quantization.", - "T3") - .Input( - 4, - "weight_scale", - "scale of weight scale. It's a scalar or a 1D tensor, which means a per-tensor/per-column quantization." - "Its size should be 3 * hidden_size if it is per-column quantization", - "T3") - .Input( - 5, - "mask_index", - "Attention mask index with shape (batch_size)", - "T4", - OpSchema::Optional) - .Input( - 6, - "input_zero_point", - "zero point of quantized input tensor.It's a scalar, which means a per-tensor/layer quantization.", - "T1", - OpSchema::Optional) - .Input( - 7, - "weight_zero_point", - "zero point of quantized weight tensor. It's a scalar or a 1D tensor, which means a per-tensor/per-column quantization." - "Its size should be 3 * hidden_size if it is per-column quantization", - "T2", - OpSchema::Optional) - .Input( - 8, - "past", - "past state for key and value with shape (2, batch_size, num_heads, past_sequence_length, head_size).", - "T3", - OpSchema::Optional) - .Output( - 0, - "output", - "3D output tensor with shape (batch_size, sequence_length, hidden_size)", - "T3") - .Output( - 1, - "present", - "present state for key and value with shape (2, batch_size, num_heads, past_sequence_length + sequence_length, head_size)", - "T3", - OpSchema::Optional) - .TypeConstraint("T1", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") - .TypeConstraint("T2", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") - .TypeConstraint("T3", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") - .TypeConstraint("T4", {"tensor(int32)"}, "Constrain mask index to integer types") - .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { - constexpr int past_input_index = 8; - - AttentionTypeAndShapeInference(ctx, past_input_index); - })); - constexpr const char* Longformer_Attention_doc = R"DOC( Longformer Self Attention with a local context and a global context. Tokens attend locally: Each token attends to its W previous tokens and W succeding tokens with W being the window length. A selected few tokens @@ -420,44 +175,7 @@ ONNX_MS_OPERATOR_SET_SCHEMA(EmbedLayerNormalization, 1, .Output(2, "embedding_sum", "sum of word_embedding and position_embedding without layer normalization", "T", OpSchema::Optional) .TypeConstraint("T1", {"tensor(int32)"}, "Constrain input and output integer tensors types") .TypeConstraint("T", {"tensor(float)", "tensor(float16)"}, "Constrain input and output float tensors types.") - .TypeAndShapeInferenceFunction(embedLayerNormalizationShapeInference)); - -constexpr const char* QEmbedLayerNormalization_ver1_doc = R"DOC( -QEmbedLayerNormalization is the quantized fusion of embedding layer in BERT model, with optional mask processing. -The embedding layer takes input_ids (word IDs) and segment_ids (sentence IDs) to look up word_embedding, position_embedding, -and segment_emedding; the embeddings are added then applied layer normalization using gamma and beta tensors. The input_ids -and segment_ids remain int32. All embeddings, gamma, and beta tensors are converted to int8/uint8. The last input mask is optional. -If mask is provided, mask index (that is position of first 0 in mask, or number of words will be calculated.)DOC"; - -ONNX_MS_OPERATOR_SET_SCHEMA(QEmbedLayerNormalization, 1, - OpSchema() - .SetSupportLevel(OpSchema::SupportType::EXPERIMENTAL) - .SetDoc(QEmbedLayerNormalization_ver1_doc) - .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultEmbedLayerNormEpsilon) - .Input(0, "input_ids", "2D words IDs with shape (batch_size, sequence_length)", "T1") - .Input(1, "segment_ids", "2D segment IDs with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) - .Input(2, "word_embedding_quant", "2D with shape (,hidden_size)", "T2") - .Input(3, "position_embedding_quant", "2D with shape (, hidden_size)", "T2") - .Input(4, "segment_embedding", "2D with shape (, hidden_size)", "T2", OpSchema::Optional) - .Input(5, "gamma_quant", "1D gamma tensor for layer normalization with shape (hidden_size)", "T2") - .Input(6, "beta_quant", "1D beta tensor for layer normalization with shape (hidden_size)", "T2") - .Input(7, "mask", "Mask", "T1", OpSchema::Optional) - .Input(8, "word_embedding_scale", "Scale for word embeddings", "T") - .Input(9, "position_embedding_scale", "Scale for position embeddings", "T") - .Input(10, "segment_embedding_scale", "Scale for segment embeddings", "T", OpSchema::Optional) - .Input(11, "gamma_scale", "Scale for 1D gamma tensor", "T") - .Input(12, "beta_scale", "Scale for 1D beta tensor", "T") - .Input(13, "word_embedding_zero_point", "Zero point for word embeddings", "T2") - .Input(14, "position_embedding_zero_point", "Zero point for position embeddings", "T2") - .Input(15, "segment_embedding_zero_point", "Zero Point for segment embeddings", "T2", OpSchema::Optional) - .Input(16, "gamma_zero_point", "Zero Point for 1D gamma tensor", "T2") - .Input(17, "beta_zero_point", "Zero Point for 1D beta tensor", "T2") - .Output(0, "layernorm_out", "LayerNorm Output", "T") - .Output(1, "mask_index_out", "Mask Index Output", "T1") - .TypeConstraint("T1", {"tensor(int32)"}, "Constrain mask index to integer types") - .TypeConstraint("T2", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") - .TypeConstraint("T", {"tensor(float)"}, "Constrain input and output types to float32 tensors.") - .TypeAndShapeInferenceFunction(embedLayerNormalizationShapeInference)); + .TypeAndShapeInferenceFunction(EmbedLayerNormalizationShapeInference)); constexpr const char* FastGelu_ver1_doc = R"DOC( GELU (Gaussian Error Linear Unit) approximation: Y=0.5*X*(1+tanh(0.797885*X+0.035677*X*X*X)) with an optional input of bias that will be added to X before GELU.)DOC"; diff --git a/onnxruntime/core/graph/contrib_ops/ms_opset.h b/onnxruntime/core/graph/contrib_ops/ms_opset.h index 0bdeef32d22ae..1b45809d19184 100644 --- a/onnxruntime/core/graph/contrib_ops/ms_opset.h +++ b/onnxruntime/core/graph/contrib_ops/ms_opset.h @@ -19,6 +19,8 @@ class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, DynamicQuantizeLSTM); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, DynamicQuantizeMatMul); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, MatMulIntegerToFloat); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, MulInteger); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QAttention); +class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QEmbedLayerNormalization); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QGemm); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearAdd); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QLinearConcat); @@ -60,8 +62,6 @@ class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, MaxpoolWithMask); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, MurmurHash3); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, NGramRepeatBlock); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Pad); -class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QAttention); -class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, QEmbedLayerNormalization); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, Rfft); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, SampleOp); class ONNX_OPERATOR_SET_SCHEMA_CLASS_NAME(Microsoft, 1, SkipLayerNormalization); diff --git a/onnxruntime/core/graph/contrib_ops/quantization_defs.cc b/onnxruntime/core/graph/contrib_ops/quantization_defs.cc index 9144dddb75908..74dbcd86d4107 100644 --- a/onnxruntime/core/graph/contrib_ops/quantization_defs.cc +++ b/onnxruntime/core/graph/contrib_ops/quantization_defs.cc @@ -4,8 +4,7 @@ #include "core/graph/contrib_ops/quantization_defs.h" #include "core/graph/constants.h" #include "core/graph/contrib_ops/contrib_defs.h" - - +#include "core/graph/contrib_ops/shape_inference_functions.h" namespace ONNX_NAMESPACE { void RNNShapeInference(InferenceContext& ctx); @@ -960,5 +959,121 @@ Wwhere the function `Sigmoid(x) = 1 / (1 + exp(-x))` )DOC"; second_input_shape.dim(transB ? 0 : 1)}); } })); -} // namespace contrib + ONNX_MS_OPERATOR_SET_SCHEMA(QAttention, 1, + OpSchema() + .SetDoc("Quantization of Multi-Head Self Attention.") + .Attr("num_heads", "Number of attention heads", AttributeProto::INT) + .Attr("unidirectional", + "Whether every token can only attend to previous tokens. Default value is 0.", + AttributeProto::INT, + static_cast(0)) + .Input( + 0, + "input", + "3D input tensor with shape (batch_size, sequence_length, input_hidden_size)", + "T1") + .Input( + 1, + "weight", + "2D input tensor with shape (input_hidden_size, 3 * hidden_size), hidden_size = num_heads * head_size", + "T2") + .Input( + 2, + "bias", + "1D input tensor with shape (3 * hidden_size)", + "T3") + .Input( + 3, + "input_scale", + "scale of quantized input tensor. It's a scalar, which means a per-tensor/layer quantization.", + "T3") + .Input( + 4, + "weight_scale", + "scale of weight scale. It's a scalar or a 1D tensor, which means a per-tensor/per-column quantization." + "Its size should be 3 * hidden_size if it is per-column quantization", + "T3") + .Input( + 5, + "mask_index", + "Attention mask index with shape (batch_size)", + "T4", + OpSchema::Optional) + .Input( + 6, + "input_zero_point", + "zero point of quantized input tensor.It's a scalar, which means a per-tensor/layer quantization.", + "T1", + OpSchema::Optional) + .Input( + 7, + "weight_zero_point", + "zero point of quantized weight tensor. It's a scalar or a 1D tensor, which means a per-tensor/per-column quantization." + "Its size should be 3 * hidden_size if it is per-column quantization", + "T2", + OpSchema::Optional) + .Input( + 8, + "past", + "past state for key and value with shape (2, batch_size, num_heads, past_sequence_length, head_size).", + "T3", + OpSchema::Optional) + .Output( + 0, + "output", + "3D output tensor with shape (batch_size, sequence_length, hidden_size)", + "T3") + .Output( + 1, + "present", + "present state for key and value with shape (2, batch_size, num_heads, past_sequence_length + sequence_length, head_size)", + "T3", + OpSchema::Optional) + .TypeConstraint("T1", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") + .TypeConstraint("T2", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") + .TypeConstraint("T3", {"tensor(float)", "tensor(float16)"}, "Constrain input and output types to float tensors.") + .TypeConstraint("T4", {"tensor(int32)"}, "Constrain mask index to integer types") + .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) { + constexpr int past_input_index = 8; + + AttentionTypeAndShapeInference(ctx, past_input_index); + })); + + constexpr const char* QEmbedLayerNormalization_ver1_doc = R"DOC( +QEmbedLayerNormalization is the quantized fusion of embedding layer in BERT model, with optional mask processing. +The embedding layer takes input_ids (word IDs) and segment_ids (sentence IDs) to look up word_embedding, position_embedding, +and segment_emedding; the embeddings are added then applied layer normalization using gamma and beta tensors. The input_ids +and segment_ids remain int32. All embeddings, gamma, and beta tensors are converted to int8/uint8. The last input mask is optional. +If mask is provided, mask index (that is position of first 0 in mask, or number of words will be calculated.)DOC"; + + ONNX_MS_OPERATOR_SET_SCHEMA(QEmbedLayerNormalization, 1, + OpSchema() + .SetSupportLevel(OpSchema::SupportType::EXPERIMENTAL) + .SetDoc(QEmbedLayerNormalization_ver1_doc) + .Attr("epsilon", "The epsilon value to use to avoid division by zero.", AttributeProto::FLOAT, kDefaultEmbedLayerNormEpsilon) + .Input(0, "input_ids", "2D words IDs with shape (batch_size, sequence_length)", "T1") + .Input(1, "segment_ids", "2D segment IDs with shape (batch_size, sequence_length)", "T1", OpSchema::Optional) + .Input(2, "word_embedding_quant", "2D with shape (,hidden_size)", "T2") + .Input(3, "position_embedding_quant", "2D with shape (, hidden_size)", "T2") + .Input(4, "segment_embedding", "2D with shape (, hidden_size)", "T2", OpSchema::Optional) + .Input(5, "gamma_quant", "1D gamma tensor for layer normalization with shape (hidden_size)", "T2") + .Input(6, "beta_quant", "1D beta tensor for layer normalization with shape (hidden_size)", "T2") + .Input(7, "mask", "Mask", "T1", OpSchema::Optional) + .Input(8, "word_embedding_scale", "Scale for word embeddings", "T") + .Input(9, "position_embedding_scale", "Scale for position embeddings", "T") + .Input(10, "segment_embedding_scale", "Scale for segment embeddings", "T", OpSchema::Optional) + .Input(11, "gamma_scale", "Scale for 1D gamma tensor", "T") + .Input(12, "beta_scale", "Scale for 1D beta tensor", "T") + .Input(13, "word_embedding_zero_point", "Zero point for word embeddings", "T2") + .Input(14, "position_embedding_zero_point", "Zero point for position embeddings", "T2") + .Input(15, "segment_embedding_zero_point", "Zero Point for segment embeddings", "T2", OpSchema::Optional) + .Input(16, "gamma_zero_point", "Zero Point for 1D gamma tensor", "T2") + .Input(17, "beta_zero_point", "Zero Point for 1D beta tensor", "T2") + .Output(0, "layernorm_out", "LayerNorm Output", "T") + .Output(1, "mask_index_out", "Mask Index Output", "T1") + .TypeConstraint("T1", {"tensor(int32)"}, "Constrain mask index to integer types") + .TypeConstraint("T2", {"tensor(int8)", "tensor(uint8)"}, "Constrain input and output types to int8 tensors.") + .TypeConstraint("T", {"tensor(float)"}, "Constrain input and output types to float32 tensors.") + .TypeAndShapeInferenceFunction(EmbedLayerNormalizationShapeInference)); + } // namespace contrib } // namespace onnxruntime diff --git a/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc b/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc new file mode 100644 index 0000000000000..381b0755b8bfe --- /dev/null +++ b/onnxruntime/core/graph/contrib_ops/shape_inference_functions.cc @@ -0,0 +1,178 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#include "core/graph/contrib_ops/shape_inference_functions.h" +#include + +namespace onnxruntime { +namespace contrib { +void EmbedLayerNormalizationShapeInference(::ONNX_NAMESPACE::InferenceContext& ctx) { + propagateElemTypeFromInputToOutput(ctx, 2, 0); + propagateElemTypeFromInputToOutput(ctx, 0, 1); + if (!hasInputShape(ctx, 0)) { + // TODO(kreeger): In this case update the output to (?, ?, hidden_size). + return; + } + + auto& input_ids_shape = getInputShape(ctx, 0); + auto& input_ids_dims = input_ids_shape.dim(); + + // Note that both batch size and sequence length could be symbolic. + // So we only check dimension size here. + if (input_ids_dims.size() != 2) { + fail_shape_inference("input_ids shall be 2 dimensions"); + } + + bool has_segment = hasInputShape(ctx, 1); + if (has_segment) { + // Ensure that segment_ids has the same shape. + auto& segment_ids_shape = getInputShape(ctx, 1); + auto& segment_ids_dims = segment_ids_shape.dim(); + if (segment_ids_dims.size() != 2) { + fail_shape_inference("segment_ids input shall be 2 dimensions"); + } + } + + // get hidden_size from the last dimension of embedding + auto& word_embedding_shape = getInputShape(ctx, 2); + auto& word_embedding_dims = word_embedding_shape.dim(); + if (word_embedding_dims.size() != 2 || + !word_embedding_dims[1].has_dim_value() || + word_embedding_shape.dim(1).dim_value() <= 0) { + fail_shape_inference("word_embedding should have 2 dimensions and dimension size is known."); + } + int64_t hidden_size = word_embedding_shape.dim(1).dim_value(); + + // Ensure that all embeddings + the gamma/beta tensors have the same hidden_size: + auto& position_embedding_shape = getInputShape(ctx, 3); + auto& position_embedding_dims = position_embedding_shape.dim(); + if (position_embedding_dims.size() != 2 || + !position_embedding_dims[1].has_dim_value() || + position_embedding_shape.dim(1).dim_value() != hidden_size) { + fail_shape_inference( + "position_embedding should have 2 dimensions, dimension size known, " + "and same hidden size as word_embedding."); + } + + if (has_segment) { + auto& segment_embedding_shape = getInputShape(ctx, 4); + auto& segment_embedding_dims = segment_embedding_shape.dim(); + if (segment_embedding_dims.size() != 2 || + !segment_embedding_dims[1].has_dim_value() || + segment_embedding_shape.dim(1).dim_value() != hidden_size) { + fail_shape_inference( + "segment_embedding should have 2 dimensions, dimension size known, " + "and same hidden size as word_embedding."); + } + } + + auto& gamma_shape = getInputShape(ctx, 5); + auto& gamma_dims = gamma_shape.dim(); + if (gamma_dims.size() != 1 || + !gamma_dims[0].has_dim_value() || + gamma_shape.dim(0).dim_value() != hidden_size) { + fail_shape_inference( + "gamma should have 2 dimension, dimension size known, " + "and same hidden size as word_embedding."); + } + + auto& beta_shape = getInputShape(ctx, 6); + auto& beta_dims = gamma_shape.dim(); + if (beta_dims.size() != 1 || + !beta_dims[0].has_dim_value() || + beta_shape.dim(0).dim_value() != hidden_size) { + fail_shape_inference( + "beta should have 1 dimension, dimension size known, " + "and same hidden size as word_embedding."); + } + + // input shape is (batch_size, sequence_length), output shape is (batch_size, sequence_length, hidden_size) + ONNX_NAMESPACE::TensorShapeProto output_shape; + *output_shape.add_dim() = input_ids_dims[0]; + *output_shape.add_dim() = input_ids_dims[1]; + + output_shape.add_dim(); + output_shape.mutable_dim(2)->set_dim_value(hidden_size); + + updateOutputShape(ctx, 0, output_shape); + + // mask_index shape is (batch_size) + ONNX_NAMESPACE::TensorShapeProto mask_index_shape; + *mask_index_shape.add_dim() = input_ids_dims[0]; + updateOutputShape(ctx, 1, mask_index_shape); + + if (ctx.getNumOutputs() > 2) { + updateOutputShape(ctx, 2, output_shape); + propagateElemTypeFromInputToOutput(ctx, 0, 2); + } +} + +void AttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx, int past_input_index) { + // Type inference + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 2, 0); + if (ctx.getNumOutputs() > 1) { + ONNX_NAMESPACE::propagateElemTypeFromInputToOutput(ctx, 2, 1); + } + + // Shape inference + if (hasInputShape(ctx, 0) && hasInputShape(ctx, 2)) { + auto& input_shape = getInputShape(ctx, 0); + auto& input_dims = input_shape.dim(); + if (input_dims.size() != 3) { + fail_shape_inference("Inputs 0 shall be 3 dimensions"); + } + + auto& bias_shape = getInputShape(ctx, 2); + auto& bias_dims = bias_shape.dim(); + if (bias_dims.size() != 1) { + fail_shape_inference("Invalid bias shape"); + } + + std::vector qkv_hidden_sizes; + getRepeatedAttribute(ctx, "qkv_hidden_sizes", qkv_hidden_sizes); + + int64_t output_hidden_size; + if (qkv_hidden_sizes.size() != 0) { + if (qkv_hidden_sizes.size() != 3) { + fail_shape_inference("qkv_hidden_sizes should have 3 elements") + } + output_hidden_size = qkv_hidden_sizes[2]; + } else { + output_hidden_size = bias_shape.dim(0).dim_value() / 3; + } + + ONNX_NAMESPACE::TensorShapeProto output_shape; + for (auto& dim : input_dims) { + *output_shape.add_dim() = dim; + } + + output_shape.mutable_dim(2)->set_dim_value(output_hidden_size); + updateOutputShape(ctx, 0, output_shape); + + // TODO does the extra output need any changes? + if (ctx.getNumOutputs() > 1) { + if (hasInputShape(ctx, past_input_index)) { + auto& past_shape = getInputShape(ctx, past_input_index); + auto& past_dims = past_shape.dim(); + if (past_dims.size() != 5) { + fail_shape_inference("Inputs 4 shall be 5 dimensions"); + } + + if (past_dims[3].has_dim_value() && input_dims[1].has_dim_value()) { + auto all_sequence_length = past_shape.dim(3).dim_value() + input_shape.dim(1).dim_value(); + + ONNX_NAMESPACE::TensorShapeProto present_shape; + for (auto& dim : past_dims) { + *present_shape.add_dim() = dim; + } + present_shape.mutable_dim(3)->set_dim_value(all_sequence_length); + + updateOutputShape(ctx, 1, present_shape); + } + } + } + } +} + +} // namespace contrib +} // namespace onnxruntime \ No newline at end of file diff --git a/onnxruntime/core/graph/contrib_ops/shape_inference_functions.h b/onnxruntime/core/graph/contrib_ops/shape_inference_functions.h new file mode 100644 index 0000000000000..fe0274c6e6d5a --- /dev/null +++ b/onnxruntime/core/graph/contrib_ops/shape_inference_functions.h @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +// This file contains some helper functions that are used for implementing ONNX type/shape inference. + +namespace ONNX_NAMESPACE { +struct InferenceContext; +} + +namespace onnxruntime { +namespace contrib { +void AttentionTypeAndShapeInference(ONNX_NAMESPACE::InferenceContext& ctx, int past_input_index); +void EmbedLayerNormalizationShapeInference(::ONNX_NAMESPACE::InferenceContext& ctx); +} +} // namespace onnxruntime \ No newline at end of file From dd33ce0fdc6eab593247b613bfce23b4f2b5b209 Mon Sep 17 00:00:00 2001 From: Sunghoon <35605090+hanbitmyths@users.noreply.github.com> Date: Wed, 9 Feb 2022 21:37:05 -0800 Subject: [PATCH 37/56] [js/react_native] Create ONNX Runtime React Native pipeline (#10474) * Pipeline for ONNX Runtime react native * Fix a test failure * test with custom built binaries * add onnxruntime-common package back * don't bob build when bootstrap * revise Android test * rename example to e2e * remove onnxruntime packages from package.json * remove release-it package * upgrade gradle version to the same as CI * add a pipeline for react native * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * android and ios mobile build for react native e2e * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * use android aar package template * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * use android aar package template * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * publish ios test results * add e2e tests and publish a npm package * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * remove aar from npm package * wait for view displayed * change a waiting logic * increase wait time for app launching * give more time to launch an app * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * disable metro server on testing * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * test ios simulator launching * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * fix iOS e2e test * use a publishing version of npm packages * make pretty * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * make only one onnxruntime-common package after packaging * make a powershell script of packaging universal * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Add a warning for file changes during a test * clean up * fix lint errors * fix js npm packaging * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * Update mac-react-native-ci-pipeline.yml for Azure Pipelines * resolve comments * fix a typo --- js/.eslintrc.js | 2 +- js/README.md | 47 +- js/react_native/.gitignore | 2 +- js/react_native/android/build.gradle | 4 +- js/react_native/android/gradle.properties | 1 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 58910 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- js/react_native/{example => }/android/gradlew | 2 + .../{example => }/android/gradlew.bat | 3 +- .../{example => e2e}/android/app/build.gradle | 16 +- .../android/app/proguard-rules.pro | 0 .../OnnxruntimeModuleExampleUITests.java | 79 ++ .../android/app/src/debug/AndroidManifest.xml | 0 .../ReactNativeFlipper.java | 0 .../android/app/src/main/AndroidManifest.xml | 0 .../android/app/src/main/assets/3.jpg | Bin .../app/src/main/assets/index.android.bundle | 811 ++++++++++++++++++ .../android/app/src/main/assets/mnist.ort | Bin .../DataHandlerPackage.java | 0 .../MNISTDataHandler.java | 2 +- .../MainActivity.java | 0 .../MainApplication.java | 1 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../res/mipmap-hdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../res/mipmap-mdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../res/mipmap-xhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../android/app/src/main/res/raw}/app.json | 0 .../app/src/main/res/values/strings.xml | 0 .../app/src/main/res/values/styles.xml | 0 .../{example => e2e}/android/build.gradle | 4 - .../android/gradle.properties | 0 .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58910 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- js/react_native/e2e/android/gradlew | 185 ++++ js/react_native/e2e/android/gradlew.bat | 104 +++ .../{example => e2e}/android/settings.gradle | 3 - js/react_native/e2e/app.json | 4 + .../{example => e2e}/babel.config.js | 0 js/react_native/{example => e2e}/index.tsx | 0 .../{example => e2e}/ios/File.swift | 0 .../{example => e2e}/ios/MNISTDataHandler.h | 0 .../{example => e2e}/ios/MNISTDataHandler.mm | 2 +- ...OnnxruntimeModuleExample-Bridging-Header.h | 0 .../project.pbxproj | 153 +++- .../OnnxruntimeModuleExample.xcscheme | 14 +- .../contents.xcworkspacedata | 0 .../xcshareddata/IDEWorkspaceChecks.plist | 0 .../OnnxruntimeModuleExample/AppDelegate.h | 0 .../OnnxruntimeModuleExample/AppDelegate.m | 0 .../AppIcon.appiconset/Contents.json | 0 .../Images.xcassets/Contents.json | 0 .../ios/OnnxruntimeModuleExample/Info.plist | 0 .../LaunchScreen.storyboard | 0 .../ios/OnnxruntimeModuleExample/main.m | 0 .../OnnxruntimeModuleExampleUITests.m | 25 + js/react_native/{example => e2e}/ios/Podfile | 1 + .../{example => e2e}/ios/main.jsbundle | 0 .../{example => e2e}/metro.config.js | 6 +- js/react_native/{example => e2e}/package.json | 4 +- js/react_native/{example => e2e}/src/3.jpg | Bin js/react_native/{example => e2e}/src/App.tsx | 54 +- .../src/mnist-data-handler.ts | 0 .../{example => e2e}/src/mnist.ort | Bin js/react_native/{example => e2e}/yarn.lock | 213 +++-- js/react_native/ios/Podfile | 6 +- js/react_native/package.json | 21 +- js/react_native/scripts/prepack-e2e.ts | 17 + js/react_native/scripts/prepack.ts | 2 +- js/react_native/tsconfig.build.json | 2 +- js/react_native/yarn.lock | 209 +++-- .../mac-react-native-ci-pipeline.yml | 297 +++++++ .../templates/android-java-api-aar.yml | 9 +- .../ci_build/github/js/pack-npm-packages.ps1 | 48 +- ..._native_e2e_mobile_aar_build_settings.json | 21 + ...e_mobile_ios_framework_build_settings.json | 21 + 81 files changed, 2089 insertions(+), 312 deletions(-) rename js/react_native/{example => }/android/gradle/wrapper/gradle-wrapper.jar (56%) rename js/react_native/{example => }/android/gradlew (99%) rename js/react_native/{example => }/android/gradlew.bat (98%) rename js/react_native/{example => e2e}/android/app/build.gradle (95%) rename js/react_native/{example => e2e}/android/app/proguard-rules.pro (100%) create mode 100644 js/react_native/e2e/android/app/src/androidTest/java/com/example/reactnativeonnxruntimemodule/OnnxruntimeModuleExampleUITests.java rename js/react_native/{example => e2e}/android/app/src/debug/AndroidManifest.xml (100%) rename js/react_native/{example => e2e}/android/app/src/debug/java/com/example/reactnativeonnxruntimemodule/ReactNativeFlipper.java (100%) rename js/react_native/{example => e2e}/android/app/src/main/AndroidManifest.xml (100%) rename js/react_native/{example => e2e}/android/app/src/main/assets/3.jpg (100%) create mode 100644 js/react_native/e2e/android/app/src/main/assets/index.android.bundle rename js/react_native/{example => e2e}/android/app/src/main/assets/mnist.ort (100%) rename js/react_native/{example => e2e}/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/DataHandlerPackage.java (100%) rename js/react_native/{example => e2e}/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MNISTDataHandler.java (99%) rename js/react_native/{example => e2e}/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainActivity.java (100%) rename js/react_native/{example => e2e}/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainApplication.java (98%) rename js/react_native/{example => e2e}/android/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename js/react_native/{example => e2e/android/app/src/main/res/raw}/app.json (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/values/strings.xml (100%) rename js/react_native/{example => e2e}/android/app/src/main/res/values/styles.xml (100%) rename js/react_native/{example => e2e}/android/build.gradle (91%) rename js/react_native/{example => e2e}/android/gradle.properties (100%) create mode 100644 js/react_native/e2e/android/gradle/wrapper/gradle-wrapper.jar rename js/react_native/{example => e2e}/android/gradle/wrapper/gradle-wrapper.properties (80%) create mode 100755 js/react_native/e2e/android/gradlew create mode 100644 js/react_native/e2e/android/gradlew.bat rename js/react_native/{example => e2e}/android/settings.gradle (60%) create mode 100644 js/react_native/e2e/app.json rename js/react_native/{example => e2e}/babel.config.js (100%) rename js/react_native/{example => e2e}/index.tsx (100%) rename js/react_native/{example => e2e}/ios/File.swift (100%) rename js/react_native/{example => e2e}/ios/MNISTDataHandler.h (100%) rename js/react_native/{example => e2e}/ios/MNISTDataHandler.mm (98%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample-Bridging-Header.h (100%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj (79%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample.xcodeproj/xcshareddata/xcschemes/OnnxruntimeModuleExample.xcscheme (87%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample.xcworkspace/contents.xcworkspacedata (100%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist (100%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample/AppDelegate.h (100%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample/AppDelegate.m (100%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample/Images.xcassets/AppIcon.appiconset/Contents.json (100%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample/Images.xcassets/Contents.json (100%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample/Info.plist (100%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample/LaunchScreen.storyboard (100%) rename js/react_native/{example => e2e}/ios/OnnxruntimeModuleExample/main.m (100%) create mode 100644 js/react_native/e2e/ios/OnnxruntimeModuleExampleUITests/OnnxruntimeModuleExampleUITests.m rename js/react_native/{example => e2e}/ios/Podfile (86%) rename js/react_native/{example => e2e}/ios/main.jsbundle (100%) rename js/react_native/{example => e2e}/metro.config.js (84%) rename js/react_native/{example => e2e}/package.json (88%) rename js/react_native/{example => e2e}/src/3.jpg (100%) rename js/react_native/{example => e2e}/src/App.tsx (71%) rename js/react_native/{example => e2e}/src/mnist-data-handler.ts (100%) rename js/react_native/{example => e2e}/src/mnist.ort (100%) rename js/react_native/{example => e2e}/yarn.lock (96%) create mode 100644 js/react_native/scripts/prepack-e2e.ts create mode 100644 tools/ci_build/github/azure-pipelines/mac-react-native-ci-pipeline.yml create mode 100644 tools/ci_build/github/js/react_native_e2e_mobile_aar_build_settings.json create mode 100644 tools/ci_build/github/js/react_native_e2e_mobile_ios_framework_build_settings.json diff --git a/js/.eslintrc.js b/js/.eslintrc.js index a484c73ce4549..dda12c6dff74a 100644 --- a/js/.eslintrc.js +++ b/js/.eslintrc.js @@ -160,7 +160,7 @@ module.exports = { '@typescript-eslint/naming-convention': 'off' } }, { - files: ['react_native/example/src/**/*.ts', 'react_native/example/src/**/*.tsx'], rules: { + files: ['react_native/e2e/src/**/*.ts', 'react_native/e2e/src/**/*.tsx'], rules: { '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-unnecessary-type-assertion': 'off', 'unicorn/filename-case': 'off', diff --git a/js/README.md b/js/README.md index 88d707bb428d7..f92a5bbbcb2de 100644 --- a/js/README.md +++ b/js/README.md @@ -363,12 +363,10 @@ By default, ONNX Runtime React Native leverages ONNX Runtime Mobile package with 4. Copy `/aar_out/MinSizeRel/com/microsoft/onnxruntime/onnxruntime-mobile//onnxruntime-mobile-.aar` into `/js/react_native/android/libs` directory. - 5. Modify `Onnxruntime_mobileVersion` property in `/js/react_native/android/build.properties` to consume a locally built package or a newly published package from Maven. - - 6. To verify, open Android Emulator and run this command from `/js/react_native/android` + 5. To verify, open Android Emulator and run this command from `/js/react_native/android` ```sh - adb shell am instrument -w ai.onnxruntime.react_native.test/androidx.test.runner.AndroidJUnitRunner + ./gradlew connectedDebugAndroidTest ``` 3. Build iOS ONNX Runtime package @@ -393,38 +391,57 @@ By default, ONNX Runtime React Native leverages ONNX Runtime Mobile package with ```sh pod install - xcodebuild test -workspace OnnxruntimeModule.xcworkspace -scheme OnnxruntimeModuleTest -destination 'platform=iOS Simulator,name=iPhone 11,OS=15.0' + xcodebuild test -workspace OnnxruntimeModule.xcworkspace -scheme OnnxruntimeModuleTest -destination 'platform=iOS Simulator,OS=latest,name=iPhone 13' ``` -4. Test an example for Android and iOS. In Windows, open Android Emulator first. +4. Test Android and iOS apps. In Windows, open Android Emulator first. `debug.keystore` must be generated ahead for Android example. ```sh - keytool -genkey -v -keystore /js/react_native/example/android/app/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 999999 -dname "CN=Android Debug,O=Android,C=US" + keytool -genkey -v -keystore /js/react_native/e2e/android/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 999999 -dname "CN=Android Debug,O=Android,C=US" ``` From `/js/react_native, ```sh yarn bootstrap - yarn example ios - yarn example android + ``` + + When testing with a custom built ONNX Runtime Android package, copy `/aar_out/MinSizeRel/com/microsoft/onnxruntime/onnxruntime-mobile//onnxruntime-mobile-.aar` into `/js/react_native/e2e/node_modules/onnxruntime-react-native/android/libs` directory. Using a custom built ONNX Runtime iOS package, copy `onnxruntime-mobile-c.zip` into `/js/react_native/local_pods` directory if it's not already done. + + From `/js/react_native/e2e/android`, run e2e Android tests as follows, + + ```sh + ./gradlew :app:connectedDebugAndroidTest + ``` + + From `/js/react_native/e2e/ios`, run e2e iOS tests as follows, + + ```sh + xcrun xcodebuild test -workspace OnnxruntimeModuleExample.xcworkspace -scheme OnnxruntimeModuleExample -destination 'platform=iOS Simulator,OS=latest,name=iPhone 13' + ``` + + ***`yarn bootstrap` changes `packages.json` and `yarn.lock` files. Once testing is done, restore changes to avoid unwanted commit.*** + +5. Run Android and iOS apps. + + ```sh + yarn e2e android + yarn e2e ios ``` ### NPM Packaging 1. Update a version using `npm verison ` from `/js/react_native` folder. If it's for a dev, use `npm version -dev.` -2. Modify Onnxruntime_mobileVersion property in `/js/react_native/android/build.properties` to update ONNX Runtime Android package version. - -3. Run `yarn prepack` to change `onnxruntime-common` to point to a published npm package +2. Run `yarn prepack-rel` to change `onnxruntime-common` to point to a published npm package -4. Run `npm pack` and verify NPM package contents +3. Run `npm pack` and verify NPM package contents -5. Run `npm publish --dry-run` to see how it's going to be published +4. Run `npm publish --dry-run` to see how it's going to be published -6. Run `npm publish ` to publish to npmjs. If it's for a dev, add flag `--tag dev`. +5. Run `npm publish ` to publish to npmjs. If it's for a dev, add flag `--tag dev`. ### Distribution diff --git a/js/react_native/.gitignore b/js/react_native/.gitignore index 7bc424adb519c..3ecc1be27e5db 100644 --- a/js/react_native/.gitignore +++ b/js/react_native/.gitignore @@ -36,7 +36,7 @@ android.iml # Cocoapods # ios/Pods/ -example/ios/Pods/ +e2e/ios/Pods/ # node.js # diff --git a/js/react_native/android/build.gradle b/js/react_native/android/build.gradle index fde479d23fa8f..9ea0893649d79 100644 --- a/js/react_native/android/build.gradle +++ b/js/react_native/android/build.gradle @@ -121,8 +121,6 @@ repositories { } dependencies { - def onnxruntimeMobileVersion = project.properties['Onnxruntime_mobileVersion'] - // noinspection GradleDynamicVersion api "com.facebook.react:react-native:+" api "org.mockito:mockito-core:2.28.2" @@ -134,5 +132,5 @@ dependencies { androidTestImplementation "com.linkedin.dexmaker:dexmaker-mockito-inline-extended:2.28.1" - implementation "com.microsoft.onnxruntime:onnxruntime-mobile:$onnxruntimeMobileVersion@aar" + implementation "com.microsoft.onnxruntime:onnxruntime-mobile:latest.integration@aar" } diff --git a/js/react_native/android/gradle.properties b/js/react_native/android/gradle.properties index 1962845810f1f..04f6e699f0c93 100644 --- a/js/react_native/android/gradle.properties +++ b/js/react_native/android/gradle.properties @@ -16,4 +16,3 @@ android.useAndroidX=true OnnxruntimeModule_buildToolsVersion=29.0.2 OnnxruntimeModule_compileSdkVersion=29 OnnxruntimeModule_targetSdkVersion=29 -Onnxruntime_mobileVersion=1.8.2 diff --git a/js/react_native/example/android/gradle/wrapper/gradle-wrapper.jar b/js/react_native/android/gradle/wrapper/gradle-wrapper.jar similarity index 56% rename from js/react_native/example/android/gradle/wrapper/gradle-wrapper.jar rename to js/react_native/android/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..62d4c053550b91381bbd28b1afc82d634bf73a8a 100644 GIT binary patch delta 23020 zcmZ6yV{|24)TJ9%DzUY6ksRrv&p?~YSFgp`E zPcOBdd*dQ@-0EJu5{@Rs)8Fukc%2C>|tqZrK zLV^5dGp39tCCDe?lhegZW_)s9c6qS=x5>=o1QrccXaggTb{|SR<7_H(l(Z70W`&rZ z*Dxcys#XiG^E_s)xh_o-)aOX`Ma z22{yd+*PXI5-7hr-c~6pL}6@nDGtj_>wy=jiKd=H%jHgid{1{wgQPaWxAjzYe*kAp zi6)6~N&I~4K!uX0dVFK3POvLlP6oxF!bjU1Ve+ir^&Pon_&F5%I`^Rto4r5|03Z6R zHcKNn>+3Jh5>TT$JJ&1ezdWQ|XW&Z(i|Ngc8*n^8ueC1TEDZtJ52X`>_+<<$x zTag^mA={k`be3UGne|-d9(u01VN=NDn${}U;#5h@UYugK7(Cei>D!F3NYDjm0 zr#f_FwHMwCR7roR&t6dm90CReUHYTRI`xupteox3}eJqc5Y|pg|k*S)!lqA{;l88&*ZBt z%?qh+CBVdkN8U~;DdVo*$+gCvrx!iWpFdw;%zlNhQsN+}EcyeG(3m1=NlfG>I5*?B zLdi^|M(W~lsiwNa-Ymy)K=hHWC?pJ1-99zPE<#~>#hPFTy?!VZWfqb)ViP=0a-Y?3 zeIGI*SR-qEM-DXtCis`Q;{4C~r`z}>UXmX?P8t4Hn$ zr*VYtNz0COSGJA4XD*REx*9m}@QZW$tC$oHw#Kw+o)$Zd5&j6fV#d>7gzk5iZt;AV zHl&k8-VBu0C`M;?>gK1nZ3`K4rw=J-w`wEsI?YXBl*Wq-OznyKX)3sy!tJ7EdME=i zzjhd;+Auz`ujzCkfgzfKep9J%IqvfWv1IO?ly~;PV~SDqjxd0aCkx2Op@$B+S$gki zUGwUQ?2`bga4U_8B&Iw=kU$vu1N`xRbuMT0g*ll|;3^y{5WCVCZNKDb5Pm##;9#01 z*1&}pt=1$`AvZhn!aQ4dcC55V6B%P)B=9I7O=Kn|Q6{qWcXiMP3|tZf%6;PrH+eA# zE;kHamE^0YKm2%kVO{_)%yonbNF~ZLnoocN`sTpjafW91@rx2weCu&=YLtRqRv-Cl z8tnk(4P`Y*puw&Tq`{u`d6CyVYlzx$K@Ut%pCP_(H4a;(Djevc4&=_Bf56S1U&$qU zsLgIz0O2j^z$`5d)8n67AmF}56aMHDkS(rFCX=E!Z`q(gk(0eNeD`#&Za;S%zP%)_ zQRVMvLO&@Nza!eBzQ{`oR6dkKde(;hc)1h>+=8qdU zn>wZ#%B-?)=qNq04ClhR=lEyi9F4M>T)Wz@_{BeexLgQxYj$nAPFJtF4|&Z4*Rj&F zYS_8hvSvflEmTtL}z{^AQ0NI~`qDUdgu3gZ{$cf7F z--E9+IBS3xarvcZj0Vkvt^gthw~%NAQAj2>ehESL4s{*-r@v)QB{Ch8{No`$_$k}LXnRlc-uQSf%^ z>4RFo>ELnm>$#j%?XlX#kKpU#6nAa#d-K=68eSUq7p`7m?AJd*oG1LhqXZqr=zuU} zEJdzt)pDvOt2n_@=x1gy8sV74O`;A*%3l`Ld`>67U=j#RKoC)}K=~k^Ax3_4jhSxt za4DRDo9^GZs|5dmBwGKvgC{CwF6D&)0a=Cmub=+!4hn>Vh7vV1H*&RcNxZ-!02Zrl zso<)i{cPEAz)t*9mZVB*@oQm+kgiZ~Dyp{ix3r{6Rz#}iNj>DS>Ac)G2miu--&HYq zFHn#-@Hvb6y_EheXTjs!eHt}=`no&v%6tIa^|&VYae?8&PaJD^pJ_k&^gS`LC-{80 z;|H19rAKw_QjEpOiZfP>h?3ej1>(!6b46p~#`R*Cb6fA@h2StnA%kmyGp2{_AC0DC zm&JzTi5GL(8&38@f*-&kkI<$D&&ZW*D^m|SZqvaa4@oiorZG4KXh59Fptet*mQ9ZB z7AL^<&c4>A6Kg-}!r&YR19cFN%Nh#dj=dbPnWcXZS)2Ier#K2bxvuE+O%&{!ag&!( zuGDEqs_jrt6!IrdTi>>%PDjV;GDZaVKI4`PGYYI)$N(s%h!{Mt4h{fwl7(@Mp{uLEbX1mMO>4?RT( z+i{y<^N8FmkGP{<1iqQtRUWK^Iz`xHMsZPux(xz0q-~w1Us95UN|xIISO-p2O`g7b z(~1m~7Lu8*<+k{pi*R}_xWhs|`T1J%aC*QgCreBCvG#m++2=1V!FwY9sRaE(_8e_c znI{I)q;s8+l=&3op2993sTN_%H|{rIe=nbKaUU^B15|=jVCm;vw8(i!G_7ul8w$6m zcg7UX_D9$(Ce~%ezc+^GqCY{;*psRn)*g^NW0|c;OfTq2%@n%ca(Z+yrs5=mOSzmITuiKqj|M>!WA#RZr@MR5`g>V`6${VovvXDaCtOdnz@whTFNWQ7#o3e4WZ&)>ewjw7*CTlQ!hQZtu}1aDUzdn9M66cvYgE8d0A-yJfo7v^rfxTyu1lLkPsf`)q#f1| zZo1^M449#bD0`Ehs5e8tffNeEUn+mkPMWm;8rZbeZZhZHOkCO-^OS5w z+|jYNVWhT{J%QEq_rZftlzfByzlD-SdNVnP2m-=G1Oh_*fBvT5!2g-ys!HTqv;v_J!j0=Z9L#_GJC2j#RLJ^$^S$Yb7uH}K%^Ss8+NQs!5az9+rp??D-$ zG_Yj$rK@Nz*ZYj|l(G8}@J>7DV{rS~Z23Jb!+U0r{>~fhyIVZ;_@b{Z`m7Vc8*aW3k`edfY+`%N$n z6CA1O191+QXln1~S3Ii6FVOTEC7)>Q72AdKWnehH+QT!|?2uWs(R)<(qG{}v-x!iP zE4##ws{4m+g+JVq-ODyhoI1yO)p~S}^l1Kx(RE4eZNa!R0s2Jy>v#^lXv~Vz)UTPv zpIkP#O>(3L<@nd_(@j$1rCmpqTR_Dr2qi6MfLHPx2jcxPVlEpH_2y+ShW0yq+o%J2 z;Q59IjH?|A=cP}}Z8=!h@N4RH%*)fNO8^SxmYllKCy#Z-_QdiA6U&?J8h_OM-FOBH zgpRQD@bV5|p8bxX29-;Jvw&%*=%AsVg@L`j#t9Ky78cyI%M(0&&MCB;JCulC+8Sy< zaQ~@U_S?T^%Uha-$#egBHEng|-fjWM8o%+;a?_IEs zo)(=IRknGI``eO%{6zga&~#>6lf?YS_`EE4B%pmeQ)Z26^6;9ikg1`BH-*V-0hKg_ zy)1SRehkrlB*ZzO>%6d#Wv z$J1LHvW^GQvmg~$mNj;?mA7Cr!c`ZJH4)-5)9f69qpU>Ui+?;VlZ75K1WlHM|)@^B}YcmMl})1Yq+Tn*C3ut3qdyWTt@m9 zX1y*xETXWGh1UVZt#48_=a^YVi>ii6C3tX49YX8?J{>@79A*qDdKgzGHad3-#!sD5 z%H|ccT{Gv|!0we~sPzHlqiQ*ZpB9un48-XU+%BIJ^MXOfYP~X*Q6@@V?dspcd6{)B zNqK9Um(f=U z6AR#*W{y^X=@jTIMcPg4Wv0z;iZ1JSjHbl8(@6_W@9|+dIGhIj&YDy44+y63zYOXx z8J6-DG>HTqE@G;Za~3{WAVHwr0RdA&ZfvY4#gClO){0wzGd5ggp#;Op-D@o14pl~s zI(IN{qBpcKv-$)Qb<@~*(VlnInX~!gQoIt+@zHhNhn;rov7I#15(L|y^zr$PM#Y13 zf#=m3I_>ELBzrl)rM9H8LGu%PyR#Um!!2jU_&ypgzD+ zgusW8aF`Tu)ddxL*QiMYz`2+L6NII%lVA*$40B~e1<`=PhC|}>0j1=#gq(i4##%JL zG=9x{2Ipg_7Aab2*F)j=KAT3*p5o}Oyn+do+#P%}cxc*mK$0BL_^xiHytuy5Cczf#> zpv36N^X^u0lR~*zHw=VhM;MoAH(2;%c9S$P?0Ev;)>SXoRr7ppEA+lM6la%SJ$(sx zt03kfUJh^EXph0?qT9YU(`kjE?j5d^I`#}diW#AT4U?!08LKX?3vLl(bdJ+6$z2@B zNK?*se>U*7b@gBx@9<9RYEXhf_34^t#uB~tIi;vsKXRYmkL9pioKK03AyfTG{!kZ6 zmn{M5ks51irtt4rG0kTN%Pl9R$E-h)lag(ve~!4FIVI4hkN%zJG5NfCo+-BTm5CUImX-|iSR1uMwhS^V1Ke%-LR<6XIVdsX8Frm;=t%6bCR z;$kWVcSYhIMf{2bzI|EEEWE!!97;PB$qYAeMriJeG>y84o9a8< z1~3s-X`a>(Q5nlYb~6nXgU9yin^!JS)p<UCTyZdhr^8p`SHNa49f6Y zN#>h`C^JhPsbbzU=trD}s7E`m*v|?bV)Xh;Xf?A2%B1$92ughP8NuLJgsvK+gmE04 z+JwsdH=1_b&+AInZ6>iC2a^RdY7Hq!k)f#X4JqW@-ux$q(Jk4freKUYbuN3{>f)>U zk}0h*&&=f`TW!i#9SZN0VmV*|WtDSa1g6wT#~%Rw97*mAj@ow7IrV%$pOo54nfB^_ zLW}Ce)79;eytZU#ksW>K^xRj|;ZZQrACVbhvE@#N_PP>k5q9hf{!OBm4ny-;t@cjh zR`4%*YR)*lgdG+5?$n&b4y#j7FGBSm!oQqUBXd83^63|Bo`>!m9M{03miuAr!-?5` zju|w17=^igCbSi~`2_uclp-=4oAA-TFJy0f_hz;cJ6Af_8Z0iEJKctVZA0wbb7;S= z;UL$?F&7swmpIg-u2;{iSJk!ZtH%wlHCUTyx|$0vO-ywQm$0=Th_yetwJ&s1^Pf~y z37>7#ib8N*lOt&vPB(xw7Zrz%6*X4K?DDF7Kgjb;N8Pud zR?mu!2Cnoqqly!-3o}OJN7hrb+28k>Meh@=P4#aSPwWslV5lH*B?T(N+wIw&R)}vf}YluLBf5Q_;teH@R#ZQ(m zeFs9O+n^4vqzc|~vE7S7y6d7}qX{BmhamVxNb5pq?@U_?q13`J^Hky-_(JIfV!@lC zRowo+w-pErk>B~aN~ol3=do@j<}O@NmIpoI9+TR@p;{6&*_VwxaisL9nsO>(;c1IbQ41N077J^fPBjbH%{6FGfM%c z3)NRycM%I*I3WYFDxYve1@H}a1T2~DTPFqzGje17s|4kFe&GNHZff}SiLWN*gQrR+ zia8>Q%^hA$t0^L$mw=uK*|+$Dz_S{rK_0`-K4EQsaM5`Nq!96g`F(bRRa_1%F^-sWU0OZjPtE={a`W)7{mVGZ3ADA6I@y`HPK=7aH5x^uXn1 zH>)v=3$p5i&L2;T`Owot^%YTxX#7a~SXrm!(H1{mlD|#9fCc%;t^__(8qa^t2Mr-L zlu)}MN14cIL>ACK#~FayFoG$xvEh=a4#o{k<$Viyu+^b&AY0FxN}U*GIB@!7a(>AC zMFRGUVgtlxf6?kaN)C`+OKbHloHXBTG`!-X5OKqyL^t8vK|R;?!j8;XuT=&NcxZu4;{g*RWtL8|G8FNjh67FieiHf=Jy3Y zqWz;pQ^ytA(^f#mDdu*GreK)q$k7eX#@6Ht|5#$*JgO;#(eEQ>CVy!Wu#RiwL`3j6 zNR6LE3fqbEe%MQUm22k|sCaHYd?NFsdB^ZNifcso1DKd$f5j|*cKQMOvuDIgK672s zooOAo!hUWIgfKjTF#p#XNPHYaZ(PL+LWk$JLEBgVj{}CFfPj$vk3GPE1l08OL32m{ z`ED4YO9Y))6vnj7)V6VE+@lE^5Ef>(MIj;%f+)(qM93s=WWBhg^Y>D;t(NG%NcPIr z6f0h}5uO|V5VY>LpHr`v;J+YzRuTJaZ_c^4MMuq?JM%s5{Ch; zPp2p;&EnX?&`io)dpBI4qiH5%@ue&f zFLWFMVM2dt*)vD)@qrpL$!&q`E+j)5z}9V*l2~O~BJv@H0u(DRC~4tpi@1(&MgYti zLFc-dDb(tcS#qzv6_Lrhp^Q=Ey&1z{3Kb5iNN>2?3E(UxtYJ++FA*%;#QOA<1L{>X z*^O~ha7c$i`?aO{i<;3*biOcV z$PLHD0J+sFLs-t4foPZ(MOkr*THLA(#akUr;03 z3Wc?1pM^&cc&^$l69u|YOyQ`>x{9QiZ@?8xN z*}j8UU~|Au-S-ZOd>UW@Zpz55pU`u&AvQjb@|G9+pT;fJr&3?yYhr-F0i&ocSXxk- zI<4(sh1^8Bd}iy#n3Z&%)kuLn8+1?yJG)srJ=s&O&+fmy8CQ%@o09#IV6Bvs znxd~uozG!qU2$++(;JeI++rG?rIhQ#u1j_@!fuf|Uiy45Sm2qOF&ok7@XlelMv)vp zoPlEIKCFy!Jc#8)XD_w8o}p~^ugy30qPzufR@b@Q4)Q6<;zYQ?`ND9VWj>}w#x-OV z$ZW+{QG8mUEv2F6Gp(Vx$9$}q-e{GnWjkPF1=|j29(tK$LM>5P zxmmjA_6=DdDStfs#>O6R@np5!sR!@|`Pc!uS!dDjNJ4CY|Ln6}o7-&4jE5o9z}DyK71 zVw=$kxZ)1A>5|OObkn5bVDIV}H3{zBBMPE=q277Xd~BeTp705)@pfyBOtbhyApEYn zS6MN(GlMQ#5FfIrn(CHhmAT{6nFY#O2O90nY?$Zr#-N7Z?UnFDFz!7+6|~|7Y%zNw zUrmU8m7(_JhQ!tE8~*vgzKSRScTJ#UmxosWqgQl%F4jZZMO!L^yGO3NkSY&5`UirR z=9L;k@gModLg47tncU&?Bb}4C7v~&jL98$Dt48};^sV_{Rk-%M`;D8bBE2|ZCN zYk3#?rKMyHreQ8cTT2o!3|B)@09VmHWv%J63j8&5M|}BGq_>gU=mAEny}5M)(*)7) z&)Oz$h?eQ;(w%o=Rz|K_R1}gF6zC#5lTlUR-~iVAm-3r8JsEE_k0H=&SwdjlX4Edp z(+XE%w@$RNa%5YuvN z`shlEx{&?)mYM7?M{$DdH8z@?xY_Mp<{(|p8_ zzihZE5--=zT@LUO>bCRs*|ER^j#Qxx*fbCK2KFrVTk6#J7wqwlq#L(z|1Kn53Q{tX_pjsk zEuh;5oYl{Q--Q2Hjr{Kv(kfg6nGe{1X|rD-AfW#fLjp4V21?mEyBOKnh*+ALSpN^S zNKVpIKovp@*#Wfbb!-XK`w|uS$mr1Mz+@l|VM#?%h%qwB-P&n}G}L{K+Esp&+PBS$ z7R(LGFn%fxvo^};NW-(q%}lOkzi{8IrEduUfuCTC{iNWIhi01cid3Vwf+e&(5l*`7 zae`7KIKV)qr`H}@eGaPtqb8rh9p?#vCL^8(UkNPKrsGD=Dn`#tWfKW%m4j!u)m0N; zseZAVS6f7%kJ^jQrfVxg@ZYNWj@uU9>yLhm)k%HTlX3W3D@ckeL;`z`V2j|SV11mW zxfYxcRnw}=#i0u~TLlmMx135{cAIPUwv$o5E@0WpwCsiNMhmsk>S)f5L)!TrrTi9v z-z@DW5YDnf*jy(RK@G1YVDA-uj~gmx)gsK?`36gwm)?%h{=s}TsZWg(wsMF>gxK4x z%~b3UMyFo_gbf_%sQ`{e9y|0p9*)a51o_Om@?TdLv-wp(6Ti-A!xnf82{DD;eoDBK zE|ArT#H?R%eh}^YT+>3cqkt3@wT*s2B*bN9BeR>-s1=LiCsrv_wGXaa3EJz9WKyuOL!WBMRp${&m3iX zQI-QYpOF8pZqga&s9W`$wrOX!Sz)$-(uH{az_otFng(L05C|84$eKdX$EF7Fp*|WJ zf3+%QFmu44g=J12I_RACkBEZx3(=;|12htRaIP}^#@(%p_B&?OY(EKw(Uqf9gJF^Z z73w2PjXAVw{qMUeauCP)|F3Qj-M}0Q(Lg{L=s`e;{*Qo$`v3TvkLuEr0A*vBkq2FP z5R(mpBoVEV1ekFm5*Zd4IUW4sxy*e+)FjGI7c;b8Q#E>Xb+xwDf3jKcG@!bS%#vn( zU0WyB%GSENa|^Tc@4ByVvE0u|Px=^{=kM2#*Wi!s&X-N+nR|hg9Pg9RpY|IpWcs~- zPyis~iHr)-6!yGqe2D{IM)^G2*hv#nvXkV&8Nq%oA6603Ok92X{3Oi1%^#Hvhq#m5 zO(Oi=#-j96N5{C5Tc3P`JVz-%nLroJRDdo)(U~rCQD?id7sj|wau@x)hhtnn9?U(8 zK28yjK1J?Cu@>>v_?=7C48koQ~qqN!m)991FVa`m$%5o zBF^efZ@vlQ%yYZ=&Mta~z7`YW%*R(Dj^jQU#{jKps{b!3E~s5{EC)c{YLlSo$_8k) ziF_!3oj`$7ls)h480Y3p)$4tToosFvXM%_5Kr*`JGse}zMNP8?DnIt1j9eyhuubF| zuGZOR&(}TeUF=yqd;_Z-m09HZ56M^XV1liOPcmgzzn?G(nh?cI0I!I15MFP-t53u7 z6FIupbRKtKY9mbiqGPg!|D4rM+ZCupn$DIeoA3H`Vco)M*Xf`q^3YNZ-@MVvZe!Qs zAT!khFAMo!9w!w?O^I|{Ysp3@-s8lo1lkpP53|)BYc2_U_pj`?WkKUYQ<^y&Mb&hL z{Dfs}h8lm$+?K7jTC^1sEBIA-jt84j6YG>4sf}hTL8@8@d}rk^l40$_eotV{Mi6~F zTN>NerEO$MLcGk>Q+%1$!m>FJ25d* zuOo0wC)JWOoq}C_-&}=e*-Co@4lV);#a7%U)JW`*ck8UVljL?&b|o3#K;+#p(+sDj zogtwqUA^6^Zo#uZA3uIN$qcv}FY4o3e()$+AZy9uLBnsRK3j%Ap%cHH~-qQ?97TiuYr8k^#M4O?)T=H2~*27?-cu+aJ#nq7sSd*&ev!A4^su~-= zAW>H@Gs<>teyx#g^%+R%4PT>QNWd|GZ#Ar=M-TRNhRD%jNsuYmc?2>I9{n<`WM7&i zuAAJ@n>ajU@tz~}x9439@MMMu-Mqc1!i|E+sO7+cP^ck{RY>3|eA9I|q6=PgY&{Jhln6=^!35 zLS~~c$(g&)nM}on+A0~h=3QddeiemtqD4xJe>S$v!yQHGr z0c%B`AQu8+uiJ^uPQInh@C=%tB3ph1sk~1+yA0_{huZtcq*W*97UUY|3x`2|=tVs5 zF1^MvQN?)9;x(|E}kGLG)aCt}it6A!cGkb>9 zg8-YWzC@E)vvNk$p%V!g2o z?lfG#ae#U!B0izhJG=JM&ZX0#Z{pcE1(@j!JPKpD)AZ>5un~!{{a4Ve*fErsOf>2n zVZgxw@h(JDjFy$4qQ>C8_eXu)7Sufi)BC!$NL%i8O#Q6l3!N|;6V0}%YRp2Nlg>AS z>{y3?)8IZ(3y_p(B;9T(GGzVrt(5-L5^ws^Hw&I||Aw0G4sjwc;AGOwT@gDc!A?Hj z(&TeXH(Y)F2p8Wrn5f;a;uHS9e}-mVFR!)%=|Mxn4QcWrRC(qWMKstG3}Bnl zqQ%nQzNsT$qT+zE-gw+X_LG@ThkTW~K4_*xG|lrc-03HN5AxF#Q%_6Dz8jgj`2`Ym zN2nq?oW%~#1j{=aS+KTlvJz22T7Fkvi8#K6|wI?w$rBNqoouB-P)hHOQT;kUf2AZSpxcp>o8Qos=Av z>}?X){}>G71DDPS9~H8Hh7G`A6tX_kF|v&DgBrM5>H4A)9LLTGhgtt<)Qo#20)}<) z{G1&VbmWg6)|bu5y|NB=fP?W%a8{4Zcg+1t+|3LNXsybs*&s!i3;@fx(#*b1J26Et z_l#%BE6UWQm>!IDjtHug0wd}0izVS#Q#Xr_TbCOD?d5FgKC1d9PpZo8TSyrsm$i#z z+HJRdj(Mxnsw{8FGtPO+CY+VVlzvDz4L@Wk&dv&ie&{xF-AAq?AQ&1RB4qNfI}XdX z)uZ>kN3s=O{k$r@+vd&|Rl6wVt*a3FW=tNu(YN)2a5AsYtFy4%l%#Q25F$_!_MH1HL7IJGIS3hA}TU%nVgIu1sz>R|QwSo82KOZ+yH+B-w?@7KeQG zH$pRMS>ghgdFO~Wa8>QoW~xWi>e*R$i0A1cn-hBt_QGp-j2UC%eU1Lo8WkFs*wDpZ zn0VO+H-(-cjqFIjFg~J?s*VHaH2un#mKBd&>u*ZYOj6;ff*$5SPv~>xF-LNSmZV6y zlkfg9dG_itQ8u$ol$*km!{Nxa3)4?WCqVOdd&D>t#7G%3P^xBPv8Aqb4nZ{A_1;^A zjv2du5&KRQuNklyZ*CPn5gZ;7QlzOpIOV!{dlk2AB5JdUzY3>nb8LEFkOjehkKvl} zaTHYLK76bAo+9G~j?x@`PGda5cHoCd9+IXxwu;%Uh|=V!!lr`yYP_*rBCrDbZS9h}@O*EA0q9K4;M zCCak=muNECDZJvA;m3gK>`nmPm02Wz^PA%sRKpITEny0LxOV-CU}>jr_IqI)<<$7i zq`JxXGVDMdB-n!k^V;lhysKOrusK796PP)|jRRevQ)oy$`|*7xjm8S{iZ^9IT`kl` zq?EHIV=_v7tnedfM^qZahz7ymIGDp}&>Ki6(EJ>Y`9Dux5jDdPaI^X%gkm4eK6(fU z`g|wJ@Uv|VLNG08Q8T3yza#~OQOCz)j{pbgd6o|3=O;ru?7ty)A?B=kCl+VU zc^NXSXBb^?XX=yB#>cj4fd_4ch&$0eAmY!Mvb@sya)E5!#Xf%KY@X^K50ne7U`sv1 z_S@BLjVy;3rRlU?!P`0^-`dFco-p}`Re>V^DlSXcprmS_CuBx{1jPihwXX1s940`3 zQ{~T|>aVb0#5eUD0Hr_h!Ck@M#e`ha&Xvt^%L*2r_Jw!EJBMOlZ1xtTlzKzFwYLv_ z`IM&ZZ|=gQQZ5|Xu%I)=I8TpMjaPZXP56qHsA$N7C&q0ah}lv~+JekjEHR!K)%j%R zTB@-pzoeB=pJwIHi`CBy?LeAhw_yc=J%n`^!QqS=6gPfSupo(yvzSI%NFKi7J#Z>+ z2VX>R)pHEm@&;^yMl*P+}-`5bL+EA7s^*? z&D3}fh!)@IXDijBIX#@MDV!~lM~W%^+PU~%AQj;bPVgJo)Joa4Tn1Br@)sL0F60== z<6ZQd#bb6w)svClkVjAjM!M@o1rS+U@J5x4UwqHYtn5GOOdCQYf#`W%9P9}Z29pu1 zy!0Z}WQi6JN7th=M%0t0a4_o&;bj0F{X)E3^9!jqe+i2p5n~I^TQ>-)L;b9hY;wIy zq%Ub{Lur)*QJ0~>`|Qu^C7&kH7pYMH9b?$lObfe{(8Rb?>X2LBC^|+?K>oq78`<0w zgon%gjW`8OVoB|fEV~&xcvI234mEMdBZW3x6T^m9ovsQ@3TLawTzx_NkjC03*kVNg zQjd`K8p=KV>>488^#078r$9<){4nWhN$)Iihg7~fb&dr%Yjf{tGmRlI1?Ea6*V_Tzbub(gZyT~fXG{4~XK%nZP zvi@xhXvNx~T%hX4{=eLFZ9d40-KPMrSG*d79X`PmZciWZdoCxS;sB_&fF!QYud`2# zH#@vMIq*f*=&l~@mTfTH_m8t|`X&F+a;hS98&_j;G|TJKC_u@88k^u{@)*4vDptmEGhyBh<|cRep>W~&8SQrzctsu?RCWkdOs=q&XgcdO>V~$cb~cZ zJ|Ui?35^UqV0yop&A&xGn{XYr!naPLqoi)p1HY-Omc<$cU9p#SrFG5#ir)3xZ;vYP z*gnqimbv-4h4un`A8`DYz2Ax$;E3gQ;zF=+U&8*~NM&9?2H0mW7>JNMJE8-V&n19r z<=g{~?P8qbDc6*EE=XUdjOc&Qnv9n+sP7rli&;<9WlzS~%FEv|N&BXt#n;N7j*;o3 zob)F0@PXhSZ+zIzALRu*?Atl*KP>#kZ5CCI5ZZ*pBUhBFIvFtvD(sa*fpR!@Lwlwc z+mDoRqn-k+WYP(fIH8zX*Fs-KI7y-wRG-ua6Ge#AXj#r2J>hls)}}~ z1j4{jM<47n%I54nmop6$DF0y=%LJ9ywTaF@1ug=~hlB=&?uQx%F5~ej0#d2K-IyuO z_o2!plPcq4Ar>!6?SlFj0$rf@N3F1#IRwW*8Sqni#EnDg2^O8L_@_KU|KVYT6z!fBN%{F*s1k}erWLXodA{uq6&wHNqIV<%F*xt04EV0{= z3qQyhogke{xu@(NJ}g#I0w(lQJ}VZ{fBC=IyBG8ju^}E;_9pUSNr-+B%DcwVe*u0< z#&Ei0xOnB&aE3zS)SL0LCVqFYdj%@e;dufRhmYXjOF2H*35z#8ZQk%B6nsK+HLnP7>{V6@K8K4=ykCCx;nQ;Wt z92(_QLhV)`0P-)GW$3DtlTGXq;WUE5^`m+eWHPU2zd%O`c?zy!w2GLr{R6RW&GjZb zH4PoC8<& zRy(ReJO{~fEWX?|_qSQJ<&KPJWEu@aOy*YP+NGw&*`r*>w+MxjWyYgA^g{F-N1984 z9sA9S5bhD2nZl5ieC_L{@9^*{)&e23@VK$zTCVt_M z9_A$7vjwXo9`U8u*Em>-4|BMboG*4pa&)he zZVT;>J4b-=e|7QIVO4b9+i(DBI5Zp%N_PkdA|;a24bsveT_SmC=^8{Dq`ON(x|>6H zNrRvuA;@`<=IOA~UVct>I*yiK;! z8_mbxdc}+^_b6!%u{KlLec2)%KAuuxuJ&9cb(cN;_M{j8@`Qtc3tQl+>DDKhnr@A) z`p}Ddi(SxGWO>Q9hHMr4G@;{VXXn+~@Y%x8jkC^$p09^z3mcQ-7QX}h`iC{YH^sBE zcyiahM)Eu@^($wQXt0%P&`yZY!P?C*O7e2`d{^XK+-$`f9N%PHv@Ml040#-Bk^6W; zj`dX#<1>SrF-)tNsB#Pp1qw7Z*g^7ytJ@6Aj)sfuz$cCRu`O+4_076Aipp6&6A>QM zq@DyzR<|wlCwHG2063`WbbNqt??m5p|uOOQ{2kY`PQNBr_sH z*X3FoDvuIxo!<>XICZJj#yyu$pt?055^5D^CX5utnwhrH_MJI33$ z_CwqIw#~vUV$@ImxPMV{*q+9HDM~ZM_llI%jseC|VtW}pXzyB}t zJN;0kog_R?NOZEc2M`WZ)`|LsNkR1CbuUF4$tfL$_05}J;DcN*>$bUYIQ#O^azBr6 zfVSC|YL?#0u*u|v9NKiksrt+ng|E^p*?~*63dR$8iZ+uy%@*3VDcBz_&)&520fx|#*VhPF?XBIlu!>*XO(p8iY{00kmmF0s>(4Oh~)ik=bReUwx&q2cv%wJ zR<*cj%Xw{YkG*SmoDSnz>7*(qYGav9cPqq?CVQsdy=s0FNW|w4Q=4}VP76~bk>+FD z-<@^cd~|wbC&2r;xp@0XL@&a(DDy+iMG{`0bSn1wTXmE)SDOm1nd-IFPxCO^v3%F! z;;IYR+gr6w3kymiQK-%S2#23mOS9zB@a8U;Fy2M2a9cBcbs0u0XC3Z5pc2|-#iBiB zu1@5bdp_bIsj$+@xO4~q+EO0x)E4WJ?d^PrbhLQgx%9H-m@G8P`40O9C0Y+-f2qk$*a-af3|fwI}0gZ zsIbEqIAOFmCaSPZr-b1wiW4|rDOyxt$M&X?z-%pxm(?{U@w z1#pp{WNT7x)c!pwcZ>I(;+4gNKdw`Oj7{wOrl6$+oSMYI;U+yI{N0*=+4Lp)_;aTrg4PV$6C`{2#?)dGBqDrg8JNer zkLPkI=W`C^2714Y^W&A{p`wfPooVi`;Lu8%;@qele?fX89grQ{&Dg6y#_5@Mkg=RQ zr%xRtc)||5bx%?8T%(py6H4cRH|#%?vIswWl7oSYDbtH1OEa1KBk2itgcfp&a(CF< zKXzx@PK6;|HMmB?*QSqe<f$b9Bm?0t^mP*5>;~KY$-^_53 zQKokQ>tdKqc@6n|imLPT=r6j#neZlhsKbSa;6PF!aRJdheZlsMOP86jjw~K}MmgpnfyK*#f5igJ@Lmo-hKt(5jjmb0_X!PaP zC6O6oo8*)@?;UPmnAWCm!9h1%`e$^L zuO&3Zv1tiS$j?kLE(Ahe9Al3ZqDFH^qeC|dTapr}*J=9bqFElrT*+~uX5+w?WtaP< zoI}z^*y0onqv+4dICO>>H5GLdqXJC22R!wsHC*D2>u2Y09I)lnII1Ep%D5YeJhhCi z2mh+`5mV6dzS}rmy zES)F;XB>^rF9NN}rbAfT>W^WV54)Ly}c_LU+l@^augoduc{E$j!8y?(Gh!D@>Quld{7GcBSAY==N^qU${ZJ}fUvLsydHfj zZCU%e*4d$eXN;c-uL48)WgJ_yD9Cb#)vAX}i^iGhxM8)EyxlydV8D)7q()HIIdD7G z9@8BysLfxg`zh%3TR08g>0CI0+bK_k@xoCjXhgQ*4E>*I7Fe2q)J*wof-oZ^6p3yS zi_Hya_mhS>FKU4QMwe|hR!<7%%TiLWJt~m(4s)?dowJsYHw>dBTY8k{43JD0R^>&r z!@q%I+Vv7Bl8AZ6{|2s8eIO?P{o3ASR%z>L`uf<{!}*#&M+G7!x4$xtd{Lf${K%tZ zdWwoG&l6JF9|zDF>qwJ+?rIDufj$Wz!RjkkX=apw^}0n<(kyK?GHmjT#&i3*MYlvU z^9x`>-6^iq9U?uwLyXxS=07R)Xf>30N|!*A`AW3ZM~+&I_uVy{%NJiv8uBZ2eeHB~ znKZg}!_{tC&iL1GDg*fxh^nSF6R&2Pmo^lLmgW&8LX zdTqvYFt>s^=I3@i%ngd_4YS4XTFZfjY_9$f+7iUpZ-i8i#FZ@BaZnOi7pHtun5e?7i9bkCxRUr$sYo7BY(OyOHkadI`Sn^d zzTpJVO3!N1!qctA;X`F`u{gX>b$)9PqZ6a99_AwBbLgudP1`j}Ily)Ywpd=m7EUMV zDka}0-)LPjjg8Rinqjt-6vuPlRlq(bN$Uv>Fiu-msgm2lk{N?nS#p5)alt?}o zdYA!2Ytm=Gs<6}R?q?EP)H>MTWtz4fz01U;bUsXxb6$ni`o0$HTE-7DU?nBH({tKI zi`{Yl9`^3w$PZ5_N$9Ulfy{PhxeQ};L3ibfy43!;>OgV+-npl@Q^@04Z~Pw~gTJO7 zBj1ID`!nO%fr{UeEE@}~V!?+JwB7Zj&@o_%r~#*jU|T0}<~slTwu9b5N@kHVv}SE3 zx(d24&Pqi(>S2j_oB~gvBU8S6kN2ImFaLC9*8XnugMGbgE0m||V>Ou)!c`sWp(Rjl zu_loen{s~IqS&lgi$7UPAODgj_I3Vyf*b$e$So3^vQE9*6Mdv$3$hc=fsnn(Gj2Ip z{d##}VtnK}N}7Z2EjHBWS&3Jy+yL>S)T;D`3~ENs%X8ijNL&Pia&(hFlFqxCzR9@a zJG00xItHA5vh*TnmQt2$+t6T1;uMuJBMapE4d%#`$<@|%5OF~vR9U6_{8k>7H$pYB zi(F4S+(0_oAg|tWI{4d~|H8*|6A*w3(<#ljA`wgSRm05f-)1hSiL!nt$7>(!-xjwS zD!0Wsb?uh=eb8T=UM6*Z*vGS9cNZFi zF02iuLchID?8K&4`qfB(y~Q3sg*S$w9tW1pYwTy;I*!N}WF$aB5&%K8{t&Npd&d)jvQ; z%SNiSR;rAYjT2`e7B83A&0;cu^0+xP{I#m1gcF&tTIrhS68>Gt&gJtD0{gAJK&~Cg z`fBU*#mbWV#W@4)=GS=xlJ046q~{Vt4zjy^ql`2Qe*%%@ra2v#lObWtZe)|JIE*I% z88akOYK}bzq<5JR{zxf+wyG7WO)#((#zgv6@mIZ>Ih+Uy4L0KkdMH zY|{T5YboHPhlgZmj`uCO(Mv;rrb>fOK;b$e2=OUQm-R-X+&HZe158eof0`arT&FWm{>D2jpQTe$ni3*3Vv(E+v44rt79F5SA`L zW&;a3@yk=yTq~{()XMZWriw7--8JCOn%axmB`HM~@eRqk>YN_4_DiLGvNfMiu}T`` zJ4)s_Dyx?@&O2z_^%51RCZKNp^&wF~87j|p>LD+KcP%h0Smpv%(F}GqD#>h!TcY_0 zSHO+Ag$>QPeP8r{{tAXE;OTa>1USxkJaIaz8kJN<`*WHf)Ii)4OOvs93r5I%`Uxnv?awurOw!XOHwQeQR6)qPV-7sfMRKq_`+EZZJ9Vn9i zZjK>R-*25P{Iwb8w;3^3++yrg94CuU(bpJbuEu;FaABnBBk>ozl994R!6g}76B;+N zzAxLIyu|ou(r^33D?l=3<^6jf318hxI8oSA&MTU#5<51L+R?RVsk~uc6{Dy%jL4zg zGw5aOws{;c4CZ+L?gz@X2|#xH6ex;6bWaq87o;`7vwppYrMRsqxqvm4T{$~QFyL~V z0JS!O8Pn}0OHM04YjiffCr;k241r)kwbda;=R_}EY__5dIBb;Z?Uiwi3}qQM4YCQ> zVE1E<@L6u<7Jo<;K3VAP8`_ob>7bgg(xmW(j|EFC=<0%{-U9plakC zKjw(vWS|ew@E=d@Fo-}O)xg}g*sd)N_dGwl-KV)$DJnhCt@N-YEs%C&& zx79Jt#+!W|Rf!e94`lHIVkvDgx=vub4GGuq7-8&UpFJIH&q}OWz`kS;Dn5XQz2}W0 zh+_Br!vc!@>x^e1H8R|p3^9Pq({Pqx8FG0_QwTjgX`(39VJJ`!5DSNYi+Q}D&d_et!n6oz;?I;m}pg91J*9GArl#z zSt)-Lsd|dt8t>cXbSmUa2wT&3>ingh;9VW@vp#i0KYVlR>*GO<(J>-_{KZNX8z=Qx zG;DBm`WDmd2$L%3dSaWZ3t_msKpUZkRl}oog9S+imU(I!(9ec%u2DtrF)MICr*l-@I3|e{6`Ui2UQ?MzN=S0c`CH_1dP{m^WLsZNTiPwj zVcV;Ln#G0=@c+l(TGTH9JRKm1K4AMqWZwVh$n~c~0pjRL5G1bO~1%V|LF*LGYA2>(cGICDX0-9R**L{LZt*w z21P+)YzUDZ&>vz2aq-=Q(ubZv9~449=#zr~9t7jW2X2PI(EnSgfXMm&?~&_YA^I;6 z1LyyiEdcBNq|gUx;{WyeXTsjU`qv8`kQ{yr($>0HqvUYz=j?xfT#%3i9{8c?+yg~N zZ~FWJD5V`|e*69Z(w;0QI>5 zCzcEV#uyYB8N~xJxdJLyYzUPV57{N9v0!wLOo4U;0OZf#i*0qlbTXjUOW zv;g|-Q&2@0K+{eO=pn?GA%w_@m{Tw?Gz$T(jRHHf7NFX3KzYs_^l=h6?4|kVS%DcI f+-rUk5ba|kRgp(S#K}lV{D^ZO(dlFOKidBT*sO)q delta 19839 zcmV)EK)}DA%mcu(1F$Or4XW8@*aHOs0O|<<04pTwK!b{dHxe$1wboX!v`W1o0WAS+MB5I@A&gFD(#gb2?-zUh2fp^DPhG2h z3AC=-)z|)u{);|o_nFB+5`wEN)|oT=?A!P4efH${GOj3?!c~8qhJQJV!76V>q7E&2j*mCWsE53!n}+H1!u7+?OJcbtmfIb8SHXLDUxwa+WwFgGID~=>&Ja0gScW^n5K1H$8Kg*^Ve#2& zX_-6o`m#xqXvWU#=A!Nx;=L}E+*PB(kj&UlF#LGeRg zu}hT8?q*|#PXF|(?ojr5+j98>chb}=m5i+yI0@svg~i?U!d#}|NEnwWYfr?mry;f{ z5~0QU40nH5?E*tzgM!0XOrCes{uycZHWT--9FP}lb$f1Tg7kM0SNXd$df8Kxu|mNv zKFIU3YuHvrMvqELhn@0`Fb}h9wO4zj*=B9|+M6&UEOpP}ed#bLP*`k>t&7PKW1?>_mayR?1 z;__1SMGQQ&T6njZyVrGxTQoD0!ORFEZDW5W21i3{%&$6JCkl4utB!CKyvLft`cjd6 zg}ak&#zkM^1>rhP+SljB@x<0)wFO`uT2P)h+t@5^u}QvY&_oRDo_&|P`fQ^w|6Vlt zs*93aMO4(hxG@YzTLwxSL>_8tTyZX@WFonxnPfsZtBdK}%=N|u?{1ZmO-Xm@ijaTD zo_0LmB%mv{LrN_`+mO}<=tktW&KK#EJV4)O@fQLUBaqf(^p>V4qi1+%4eVFi?7(qa zBc5yn2;J0lWIs%62sHbPTDogPBWca`j1S|L|=qx;t%jg8Sj*W z4KzjfVQ1#vbIv_?ZsynT?>_hmdy5+gJs-ykbrMv z#l{_m@n>Ni>gNmzKflG0EX$f;xL65efAPA#yCc*az7tWztH>&kwzvw-xgSjGM%bd< zhLU^TwYF}EScg@vrDAYj#<5W4h__mTFvW^g^`NeJEfPUT@n%z~;DzkOk>s_dvjQcC zsk+b`MDIvd8_0z+W?1y|mG}Gu4`QK%;h>U@y9^8d$ik~7)3vo%WSBb#$lz?sf3~WM z_0aU5K28;k4;N`nlEyin7$zH9Hw#VE@7tD8HtxA7AfQY9n>gk&z$A+{R$ZFz15@Oo zjYkZH|GP|v?1`~ciJ6g2Gh}+ih{yF{v)j^Qmtn%pMM*;HF2k~48GvXN#`RMEY>45> z5a2&jGpA!@Ld$Z4t2L!KnMnHif9*0uZb*skvYGJoh&C}#uf~P>60po5K`($#0j)Fx zjIA8N`brxM8Tya+f*)}SW@3IG5I2mk;8K>#(jJe$A{005jF001GAkwF%dUe*qOommNd zT*q1ef70&0r`6Np^|`*XPV89LX*-S`%ZU?9zGTaitd-=-cH%rqPtw|}UFGdt+e%79 zN)4qYgrhXg(WF4zKq=s~^~#OfCIsq0fpSxz#F$;HTyXezZt}D;kONZK8PTG zCy3w0?*;J;eqS|zpm_dJHGdSu4*ao!FBtffAeQ4#g9zczf_NTZRMTHl&7Yh2iy+>Q zzf{d%8ThjL{&f(~;ctTYTYN<|e^*6me{bR+g7`=LlYxIW@p=%O@h^UVsDJfMeQ4*CbG$tTTQvml+C7WG39ns zwwltQHrQrJqajTKt1FRk+|Ib2N;xS(sLxGao;i^ACY^*A8@0WpE2tanIo{KIs^{F$ zq5f!BZx7kJ&)XO6wz!>`Xp4GoEHSZ9P}7-Aq&z#}4cYOuV@k7spti5S_elStX!Km? zQEnoTu1e)=L3PLA;lqde&qcdVAF2czND9Q06B7>Qt?N#@6KxZ&Jr;M`F1hyfwBxpQ z>q&|+IPS5h9Qv2NA;(R{k_kcmw40o8om8qjmhzm0+NY)5J_nPR67i%x*0+G2I|uHL zC1T!wK}W+98Z0({eKBR*kigfO9HWwT-LZtzlb#xJ+yQ$e?kMLaNA38K?Z(tNNA!7< zG5UYQQYur$I2E|kp_3Y6LC+z8*HRf1Otl*Z0 z?7j)dYa8tE%1MbO+YZO#j+S89V`EA+rb{U+vt-Okd9g%)PF8K{S|-4u%cIV;n&jg8 zyv(kI=eP+wPUX^We8H~WTvnS-Iqrc8Czq)V{78CyTxCqfnGWicNKf@UO7|MtPH%bL zPGZ8FWGwSJ)|pHzAvW${u$H-I!qG0$*=i=ubK%X2>0s zO`mtzso3bkcy22juEj>Ezy(JOV}@KgwJR~6B&LkmDQEYtLy1vc0k=1l$*gh!Qa|B% z*+uRN$D2&jmurjoTxUE^X>Hj#@>`B(&hr}Cp<4=nPrW1OxkyD_(eCVZ57}-!rnpuX zaTO9N&$y?EF`y&M&g!BS8Zx`}1f#M`u#81LnvUC^Gg$D%t>pt!YPR-VLL-_v%}p;Q zU0M?=*-mGxU`0dO9fFEBJD=FCY99-i@u+GZv*03S!NYkAY1LfBB@5q=$LPLE&zo+YR$!qtH{?!BcH<+0 z)+OL+^Wt-da%7JocUiJm+AY~9cUy9g?6>ePyu-pz<7X_nSMDP~Qu`lJO@}3&a?rwu@L>xtVU8|PinnNgpIdTB4qI|Wj`Cbu!T?LUq#5>s&Drl&n;%#eOdqB0;@Ua0WiLjDQD`7I-t>{O&^VXIP>%T)aj zS~4W340($s!*be^Gjdh{OYWBeOCC^Ru!HP}`I<%A+DOj|>qn z8ObAago`3av;!k!Jc!)bNLulFFeO7>kfLL;Q#w8#+17|-TZ|wFm+)p=BD(u^E3;|OKN|A6gcPac*`0V zUo^uFQ1VwHyUfelpyHVxa#HdqpVLG6>RjyN;rtjjdL+$b> z5Z@_YIz znoN1wULQd)*RxfqO!iKu9fiZHs1CdK#FW0sO~0vJSxo8r-j*qU8v^vH9ZxL?RqlGM zs;T8o-P3bNt-7~*g~LwSsZm9_blbvP^1f`wm%vVVF_<=IF;*;$rdwL%+9-AJ3F=ZMnyYa#+WVr+#u-Rn9{74sBdI zM+(TFeWo{bE)^?(m3{NilE8Sg`_PO7*oh9#bh15&E*wT5j?m#pF~rdrjRF_ zq8}e6=f^RCS8GMzKjR(6`Z4g7N_xb(%!&X5j-G%oRccpVqrw5z>iX! zTD*dH<3||Oop=_HGjR<{zQVaDm@W^p)_;tDRh0TR{5X3-%6tSrfuBS*b-axCuvbHC zUc*n(R-a0Yd`hvGODXoUDODlWcoOeJrKq&duJDVAr)ZO3C-!@x6t z2A(zWegn@Lc-}z2ffEoP<=kYAF2yC9>l^5}NlgQb83|E0X-&xt6kQB_;3f;Me$h<+ z9~s!(q&;Q#Eh-#S{kV~<(&O}^Dz8m**fHFg!A@aw2mf~Q?@s>h=HH%K+;z23w*kH2 zLJ#T%$*j8+tk*i0tA@3T-TaS9D^=5e~?Uo(TVAG$CX3)CgW69^ALTdeqeglLwAo~euVIq6(yYD2 z%abgteiqauOX*P-(_<_o<*&1U^uQW&`~u6jlH9j3Y9FN=_LBNb_+>_Ll0MGT9%Iz6 z;zjoQ2@)S;Phs}s1z$g|{mLr{<$oNXppMGJO{lm@@s&C^Sqj%wN=I+# zgagrGvne`UA82M{v_!96V{E<(vsLgs_51+TuazN|beOtFSbbYreag0@S%q@81qjHW z(vh(kh)-+VLIi-%XxqYs`j_<$A;Kzpg*`v_*^OUeFF?*$wd7yLguX^qU|j!SO%v+> zMNT64ZL@_Sq7@2oK;iXc2LJ#G5R)-BDSub_e;j2Ue%|ac)6ImYfd-eh5T($~mSlU- z)}{w7Nh^^}T9PKAp(vBx>1LYA%sM;U0}nj#RunG?rzb^4DcEdNs(_-XhziQD{vCck z0_yY5>~1!jZEXEv-}8Gs@B4ke-*@)4f4}e|fK7O785=`3M`e?f&7^Eh*&K^uGk>NO zSTU%WR$#{v!<3vja+Fu`5!t(Pr63zmHbvPSk0FB-F`UFH75B=OkII#gsra~5`9uu& z;gfRZQ_c7^J|hM0m($NS<1jwgjB$KkHeXQjMY;T?7`}|J#Bir{mcdtL^MHb{srb5z z2UUDS#W!Q<#JA+ex23i3#CU**6n{LdU`D|s08+&;EMDy{kWbo zos^vK5NMV%S+n5vnXbTZ!6g|_iM_j9_WE);;WT>A?E2LP)v5%U$qN__efzGt! z=2AIV&ss+6gsbQChMO7-`rcYm>c{Kd3{UEtwrm|PP7AaJ&Me)|rG_bB=YOaW^(M{2 z+6@A$8+qxs3!ZLSQf{Ydo8E4L`x8qEF1&AMnYINZ02m;E4p;IcdR!_ENpP zSm~|-p4hNcbTdY9S6Vq7-BOI<-e+elr$7=67~Z6lRq&*S@8WwJcH(-)aWer!u5Ah=nPvJDf+wDwgcv{Z);Kv$% zf}d)5Mm9f_Yd^=c3V+UMcn;4CM7s03>uLCf+&+t0daVSS#yh0Nl7e#@=5Sua3%H=* zml}SB7d5lCeQhwXSBMf+Ye-$CYdcn&+!Euan=dVj&Odua6yd7?M*Hw}N6 z{%@0aw0fy5q3!yR3#?f(=9Ng4D*>zELXI+r=NI}tgLS}hD<|{))ST>^i-RMTGOnR} zeqIS|Z&j1gStFRKu(48L4De&PmTHFDs9_L@vcOJDz<2;%sncq zo)atyT%TxEMSttdVY6B2tB}Ko%bF533jxmM#JP8(;8;b^IH-G*ycj)`F$%2v8(8_% zmtD~t9Ao~jRy8m-U+ffF=tf+V)i<&5LFlZ13!_=ddt)B$Mv1m@7%ONSzLjYwm-DZ6 zK^V&QX{j*8FKUc;Y&ne1%0_`5ork~bH7e7s^Sxw#cMD2bhr75FK>V-k$B(pPY`&|XV%@RP@ zOz|DxZw#o+ZM2{fM_NKz}`)Jd36hmR&&X@HsRGGp&S{wkz0_ zu>2f9s<;{|VZ{vAtS_N$2JKuBaxvJrat>FW2{hXtff7EAaA+6j;W?}vTs?!SCH=Hl z{q%(6;S#PMlh)_(p0a3LoB~}XTtlG}Rt1}@rTKXHJl2E|4+qw+9jm~a!*xCWE}!q7 zNPj$X9`6;H!7e#^pTNsdd!lttuBVfDlxGRhlpV#Rb67ie`ads~Ek{bYp~U#mAAj6j zSKep}+$K)ro}NgZ=_E}C2&M71^}#e$p5C;;VU1dsL_~+(Re^YrZ zs;$~htG3pvpSJxL{fegl^WMy4k_-a!Blo>`mvhhZKg+%I+!qHA5z!p}$W7aMxHKcA z87a*uX+~#%qsftGjC_uDQz7RnJkCb^>SJzlbDoTim&W7f2|Q7nNp7CZQ`~d|PnE{2 z@JVhO%hP23$qG+*alV@#;28?fbkhVbaMK1^9i!0>0SlC^EB4ekzDUX-B_%wMg%jQa6?&d14 zcH^x^;T3LLh`lg&x-=`LsTB%m2!%6UTqiyC3O6Xc%EhZ)e3o>qanmwxlxD4)UgLEN zuUB}3yq@i*T5fXFNMQwcF5V;`=Snk2;mvMp3o^n&KJmnZ-~4Xy6F?XNIox;w~NIz7b*NrCbc#k)}vKH zEf&*bOrGkR6_xAi)^4t@ZCtyicKN!swW}I`Hm|N+yOJrV?mTUqRvy&Ct>ukIG!SlG z%rv|z5{?;K*jTRx*E89xB7U7|WL+SvH^f8DdUUOZ zL9sx@rv=w*(SUp>I_*YV0G6ASac8kjFbMA5zNoGldUYUXFfGa`!3OIIgSG@(<5A5B zM8b;;Eu#k_<)RZYg)e=asqnZ-K_WkYwvPsyO8e|$_kq_%e`MNc=n39`5rLj$$ zGk-y2Jj66QD56)V4J!OCbk_~;W}0_QEl(e^3Og&Zb9Eq^Vya(e)!h7?K)ZZHm%xeM zF3VyH?|@k_=!*xT-ZX}%6%3?On8|x=ZF(mY2k=)5OSYKgvqEr*$=39k?u$o%14dVQ zJ+KHMRtH-3m?0}$#OS%HJ!-@4aRYR9Erd~q8l27XmKK3}*2d-Vw&pHaUo$kOY;0|qV`?ki!Zu1LnZ^vAAS3z!gs)1u-Qtv$%@ws_Y#EKWL$&Es+*Sx!83}>TaOD5n?*4$&$Iz}Mrr!`M#m7WN#bNUz0m&Iot z$Kn$WqFJ4D`*&G?AiFF+VRNUuO_J2Y6P8vMH=42Ag1(xVS0>X`dYYb5=^c7krCxei zrQg#ZRC=7AQ0Wr-mP!}XH&uF&9#ZLYz6u+kP^l@4zNgZ+=`xje5VG#~RsI2At@1T| zt-{yI$Mq`zkZ(}=M|=a)@zI5vK3j^wBg& z1qH~;xA3hh-^RDAdKq`Ck61H20~zo3B;*XY>YgLI27% z@vspH>8Y5_wB>YD4sUur;GLNto9XpO^q4msF}x^04J{D%YT+(Siz1;$B$}0ZYZBSj zYec*)2;^RWy%UKz*yWv_n%7l^QlfwVRn6z2Tjihg{i3G_RNlk)Fl{<26N$ZJ*dpQ$ zeKihL-pdcFbSvGa@n{_?xHMCH>q-}3Uz-TMW51R#fG~_kfGy{!)?wy&j+@9%ek4CW2=<-6-U9y)2 zu+jv;$`a!c+bcz@HxPqzq9P*<{3+K;Q`4{jIP@wZ>F_j(;VD4oma= z0HIRlnaVHlwaD+HLV^E_$!P=2ER|o9X;Z#`ywXzmWtD%;uc-X01iQSUks+aiqN+$d z=r^4hwJ4k;S&Vwy`>RoJOC(z1m8kI>g@3E^Yy1Eb@#>(i#RN`XIqZt-!M1R$K#K{r z4lQhm)5S4IV3u%Lk2{)5VYukqDbv_Y_2K}2*S1A}BOTTm5cRth%>}i!@|<~`HxytIN85q=7*$X> z_=;luph;rakNMtXS%PWviCoEirTdMXL2R3+nUr|_MsZ_a>Z)VMS1!K>YVEj% z%Ul;awZ!?VGUG|fL<^EL;E7|GQC;;8#{W5xB3^lJHhZ&KT{WmeW1+^Km2I*e;F=TMUssWhtkBem>%SY!H>?c5*_u4(68QRyM~X!MLG|D-2AyU8pkP zoi^mI^c#iM;HLjvJSIao)X^?qLAi?3I|HUcEd%4rjI!Bsk0V$#FH#DJ#JFLBSaq`a z0}GlTwmbRQS7g{?6lAK>!jUk_!k{J8xPlB93TCJSoTH{D(-ql&m7;WiXaNKHA7R-< ze_901OA7%5ZxP35KDo<&WBP{@S3=V362GW3?|qh>5N3wl9!U_YPhO~{nG!MHbiLsT zS5JNq47^tFV!6{v7A)rR@3>qdc`xNT>hWIgB_gd>AX%L#l$mB67yZRaaje8BaawN4 z)-|SnUr8HSYzB$CNC%>SB378L5t{Gx(-y_G>@)_er;G=L_egR zkZdC4ype9gtZ6ifevCIK-Hg?Cth@zlaQwC8;S12`#>l0AIpg<}r@ogaG!^&I#0J{} z`{+^hu&ct6YtOosCY5>|-85-|J=cCq-zOy=hb&yseqJIn|jDwq1YC< za$O$hp*v{SXzKGgb6s;U+)pP}WP7r^X`1~u8sDLY0uyR9m6~ZL`JgC2okFcpM}SVJ^Jooi#f%`nLUcYw zs0)1;QPfmn3j~zaw?j$UbOz0*JLo6m5}{LSy_D{RlHeLxbr;5k5FNgt)y{3 z!6Awt#b^n_$*qau(!s;F15}np3C!8kFxP>$6JmA&=U)fnE}$xSXuoeXq?FTOVu{VS zeNbY57FMpLZt8(@_M=xd6(>Ch&?9QdrmQ10U7>?h28h^84<|%?2|5%eYD%A`s-lt} zDzC7Yir>t-k>&zYvp3|-QA|mS8=LItnA_OoC~a(Vdh8-ug<~(x6GYCp@23TOQm`p9 zv3vkOx@ZY(3o&w)l2EVC)hM!z%dXp1z~9sKj1{J{hGU~_^dAQ7PDKpb(@S|x#W_oR=(Kun=%r;%&PS-S$(FMm z2Ff(WI7D^xv<+BdY)c@u`B3IdeQW%D=_zE`ZfBlhgn~y zS4=n`P66OBFev~SgPnh4!Z{az{QNcr=NfXk`mnDnX?gswRA`w(uPL-rp?abtGzEQq zl9$sb5iM7!@eGC54KD=Q*XfN!25-Zcc+G^IE&EB^OU>Qnt1Hg&caxrVCpql9ZM#z* zoMW>4Bv^ln#sOmE0WeXbp)h?T}8F z`Q~vwx(7mTLYj?&yC@mv(+!|Y1$P;$x64urYyj8@mT^Nhqo4|Z50o*T-iGqtp;IC0 zGI|e`-UqD@kh(tvr4NvmK14?P2=qQiEdK=5K8E5xLG|+wQ`u{vm+5pi{e}Jtjcr0< z@E-jQ79WMY_CEa`J40tFWnTk|RtCEUbOrQREP#-Mk7_<^wBr`=L*!U;?E0HN~ zMxVenf3zKCS3_|r%B`ja_M2!#NvT2*B(@sM^+_@vL0_-)R32@%~d(d;dno zi{wk6r$7m!DNW>K?mea^^67t|G0Ejq&7#Hz$mY@inuX4P{ics0ha>*)JwmzM&-5r4 zcKS5IbPZOCrj?>%0Z>Z=1d}e=8nbm) zoB|DRZW$4_0RRAC0{{RxlL1>Jlf&5#65H4Rn%86N+c0z#vKz0e2(%4H+bR(O+m%yxmJE*!Xg zuSDA;P;?6?+8Ln`?T+AHbKb$Cond+uPwFx16w63Z=1erkVu=r|XE?}uP=?j9p3z}g zSMg-R8uM+siqQ=USAS_do78r6Fm9NPCOmx*?A`}oJ^*&`%-ZLy8?2DH@|xd7e*jQR z0|W{H00;;G002P%9ZJ~Z76$+TTa*1-FMnxc8&?%QV@n!Y9>j zK->nrHBoEX!CP_C)*V|Dc@lY~jz){g;JbqVVi?~G z>MHMe8I67Te)AN&N$+6AVvVUV1ECpKHvJ877ua`G1`%v{;lMR#=YZBYl_5^#yx+FmOP8k%Vcs35$mmy8)*0vXQItS7eG zg#z8My_G6|aOF!^%%XzX_Xswb*>rVWfkGd<_E??TTr-M(d_pA`f(Y}DzIG#{ z7yUwMw~dX$O=D`)F|3js_JHL^OJQ`BG-K#jf)~Sn-xJGlQj2rxLw`ab;a#-zwW8kD zrtu=nK*bLfL}+)MNplm@e|UiE7a|}z=E3PsrN+%% z+H#DXQ2LW7jAC2pyr$q-gUl=FsqfB}Eyvt2_Wap9Q7GrLF{|Lj)>)`A(<+vom{%$z zV*Af@m%?B0x`sQbXsC+2cLXl>cJ3L9j=D3mtJjS+XW!PmU*h+_!~4s_@xg-ydh9^s8+U82 zGv2V!4=RiQBri}_R>AN)y7qpFNfUDlyFQ#g(32Y&TJr7?+nC4EUw9nG8g}dboxc&n z-Zwzo8yW>C|9?*_^4dh&ee%}G<;>xpAKJ^p(h$6M7Kjf@LkpFQS>2(zVEpR1FbZXT zv`{?l?R3S{4KtHy)Yt1f3+r~_mNY=u(N;e4B%d`lXRnFL2Hfd?OR2oN+eMGZ(~WVZ z=lfM)JYClFr33c7vK<|~vcGb-N{+GN1@W?7V5*$0Lw|@Y;S|4;&hm?_8QpjQ=b+$& zTs2{k>ksW&C;4L&q#WiRdm_h&xOzWlg>x`bh4PxKdVynvGth?s?!`waX`T{3iZRY& zVB9zGFf~OtA_fx4J7}s~IYL_CcU6EiThQ-XI__!vmP8U-LSh1wzRmvB6L2m19e&c3RlsxgUE6ftz2mpv_+3_=ninGpuLKY^TA!+qx*ED z`*dAtsD3E4gJa8y?qGMQiq7qtJ3R<-jMJ4tv?GBNjOql2u!&*UwM!o9nrpW)#qh9J z@C+_87fn2MlUnB(mJ_h}`kZ5ECK$>`7=j?}w144IN+D|UW%7ej7#9iEz zAz=5+5Yc*eaB?|7M!i+^bqrK+?{;PfvE}F~W~%>9*YYW*{5`Z+kKGu@akSFs4ko*w z$bYAaE&M(}|3m1-WqgeIt&Gnc=6UusCEpW1?z228HhUPS`!Yk4nty={eFPuc9_kA`Rl)sr^yBmx^f5^PGRiO(Ve!KW|UZ5EX++;F3SV7_? zgcGl$X*(HBx~mSk8_}V=7_MSuTe9buRW!wNa%<~-yO-k3n+J$LPS7Vv;z_1zg(5|y z@44NRHR6-V))GZ7N4ogG;TGvNrd-OD?jAshFa^jR*WQn8QQaknNQ?Rd8MExl!BHR zGuGE-eI={u>YQvARda~6hc#WZMi?eK-PQlqu-PkRdP7}{48AdAMP+CdjM>fgWz~Ex zFBgat&KinbSd>jooJ&lfaF^j?=9Q(IJ5Ftl1(eOVQGfWF~-p3(2gk*T7>noGrKCkkrM@3&nFfvQ`7T9 zm7Fej&nvLW2d`}AMdB*(=*tquTCT)9>DxOxB0#dDtj)+9_NU-@!mxHORp1_L z%B~d8+oV`hVo5VZs=3D?Ef|}oqK<2#d|E1WdPJ^&f(YY65Fs>iJPl$T6C9I4OyLqo4;wr8Q$7ZOIT@6eh1K)C-pu5Tfa|(!BtNbY3niWfq zq3=vRR!vNf#mts$s)u7bPLMu*(@^cZSJ8<@;3!d@$%>*Di;;mORcUV(jnU<_>87O> z64X_HqQed`sGakw#n4ecF>=eRs$%WkEoX7e(cC%|+PkA>%{jDV`OvAhd8ezId)1=- zI>X>Oxx!CUFO9(emAd$8P|-%e{6=~luuw=0G@`uli1`NkZPICy&R*Js(by+=qOtf6 zydUW7K{KrlLdGUg!zK}6Q)nSx3&}_ymv9Atuqm2M#ACQl)*RIL@WV%YCi)Sc&+x^+ zpvHsmsGaTpf$%Q)Qj8@2DBD5Z_AaC)p|^{`QY=oaVE3M|e%p3fxDpnCYz9qi7R@Y& z2%ERvi8_Y%-O1n<+Q|(;-6qOIK_?Nx9m44#t{?0-A{@0Lf!SGdI7d=}!|e>PgACM5 z3Me*SW{U5d;^-o9W>Zl+2ZD+rZs)k$#^}Li+DFN313kuCiF1SYn?4D51w_bCH&W<_ zc!i}fMDhUb4&6MBn6sVad28Ev?jgDLU9#rIU~zWUZIcBw@7E&At}?O|2osR z=-<9WJ3T8oU}A$zCNuq`-97v1oNqs!Jvx8>`|Aq;b9f+Q2#Y7^k&zL>B1cY!ge4hS zTn^$2u5x@N7Rwwf0``Bg3>nurt_N^~W6owHmsWBlMDC8uk^28sva*DPdS|*2=ndS1nh`63*8(wYs5NhFG_ZlAy~FS-hKCdy!mt1UbD{r_BY@B zIQz_;)lqd(K-?}?XXExQE^~<&eEyN?(QE^LRT00juzF)_Vviaw=W-%Ek!0gRYoHho z^)X}=J=@ZnziD??fWfUtl;|gpium$Y+fO?uC;TifvKWes!Y;R;g)Rx?cEsIr%>B?f zkgSnjOlJi1sIIE_p?FNjUE+d1m(FUpy1Wc9AiH|!{Or4y@fz#7RrbvU-JzqKXuwxe*`Tb zDB`x1%yz(k1|C*wb2+4zJ`5EB zZTkMuy>U9P-P6BBmcOSSDt9|XQ5ImcKp#Yxlv(@b%!O#0o;+{gLL+%oU6T>Ky}^#p zUg-vL!b&#vPFhbBKD#N5x42`1^0?D{O$M_~YFx;x&7|j+!9|+y7rx zqMf_a-rv;h5k<>5f~gQRT0ihfmZ-MHQpc)%rT06kc_Gq#3vj@vOh)V;xwyG1qGcYh zrJAH&A1>Au{`-~cSyFIRpUht|N`>xcRAXR1t&E=v?8AnIt9A zO-Jaua72Z&#CC-3SP0!P%3nMK`JA_xy9z(mb4oVEa^t`glO3xyA%Z44Yz*e3@O4i$ z*NjmAAk5L@xet}A;P-aThg)>Gk>GyNq9G(*?gXY!`mL#J%A?{ygGL?>G4f~YID7R3 zT2#XDdg(&f1y1F#W3P7i)vhGB0X&?a6uH@%t!oDYTrD{Q&VX3bl+C6;KSg+V(gmFG z)acrvU%N(V~+m>AfKh0UUxo5ki%Ywt*l?v`QO zdcPy>oklaHnFP+Nd7w$z6wu1+QY{BnvN(-sZsU$G zt?PRb6r7}vufVLuc@vwg21YB$6I=e!)F2GI_ltw&eR?B|YB@z%Lb-%?LW+%vr{OJS z?(6UdSAvctJC%o~k&tgHYz@k`UOl}Ku2EM11gkY6^42SMsDI;URDp(U0{hsY=JeMk zuq=i6o3t|3L(dhTdb-%SGpGg446611WR}sMaWDE6N+`NBU*YSg9`#zcQ)0u;y{|3} zWJ+aYrmJk5DBH%JRtB##v$5xn<^9%HY@bG!Ogm;e$GB2*iQYKRQ(=F6^LnXFuGDw8 zQNl(9AM)*@JRi5>E)xn&dqHPUhdX|~@=$|5<4uz7Bh=-Vs4geV0>bwaMqelwsMD-8 zgF$+4G1t@p;-itJvqD;_t)Ep{Of+<*F!>SJ{Med|-NQ z2$D_8lH62!kqG@)r(x{X$-AbC*>B|w*%q&2@P}MHyM+}u-~z!(zPzUK{N1_hCuMxj*9vs`@f&KD$d(m6=4-h}by9unzpV49=Vi?dU0C%xp%;M_ z7@zc#p{~aH%5)VcmewmeWfcZpPB@yBm5wAe#e7la?sI8Qm{+_lAu-SXr=pnzZq6TQ zK=}ne^rod++kY5N+pf1rL%mVm&3|k#xZ+fjcwX(;oR-kad}5-`Y)K+)wIEUFrWAR@ z(%A4x(CfJRv=f8x1m(8mcBJOtgls0=@V-CR(wX9uFT8VNM`Dg|U(q?CSDD?Z?ZPwF zBodFG{IjPYj~{yz>0xIT2`Ac~y#=kfWOJ!7J+HFH-muoH?>W%~_0&BgrqgS9MSLXJ z?O2fwtbC;WBqK{BSn@kGp3@@V(K7A2Q}ycOYf`!57cM9a#=fXR63W-s@ypLK*@x1U z&B&m!ubh$vam$3<6217F?8cZne`N*8C8cQIM}29(sUrB^v&nnA_u!XaE$C>P(C0wB z`mUwA5CNuj^P+~i$gBDF&htlIpE-Cmzbot;eRw60KYritlI_HJ>gGnpU^i~+^0gkh z64#rJK?i*`8jQo0A5*t}iKWGC{#%kG`1MBsezQHOr1@0=14 zz~k+PB=U>=zUfhg4Nf?Qr{DN472oNE>6uH|&udobf-IU#H#V9ZHD>Qpi7-x$_Sk<& zW5wia@vQ?=r?9$4&5<}C{yI8(G@j&dp>V&@Hn+V+zZM}aC#p3LG{R|i3k1)=YH0P+ zK9tkqnV00s#y1UXQf`hL!~hw4p}SHM=>gI9$mZwoRN2;h&BBc!}KGv>Aw#bMNrgb z=*}0azjA*QxbE*3O)v_2xlYyiJfN@ZK$|%0X(D7EUvuY9t60Yy&LoGDg-gFS1%55D zW3FX=QLi~%B{>j4+E@x#!+f{w>z@^&W(P6_4C@HLysvnW>Nk? z+(>AD(x^h6)QBc4&1{YFo!8MzdG&58x!5DFMpvI2@F8axj_%i}1HBLWa3Afy+TUj` zTlR3yVoklb8}-9#m+NqMhT7qs=ri=0bwWrqDgNlww$25xK^E$7k(=N{x{LR3dsuoQ zMD+HY^%ihgNx+uqpqf22s+FU5AUjj=fXl_45kVvb;wcM( z9A@^blC@y<7lc4=)A;WIzi+qcibF}RB=yasx4Hk$gfdivB zpiBr%5my1_#&AHj7*iwwdX4D=wNO@%-e4Y7EG96|Jf^N zx_}(sBj7h@3M4>T>T$sPkN*@xH3Y&gvEUF@9|*Mn8*+iiX==cTE9g!$2b76m6U`b3 zC4$IFO`w7ZnorsRCq0;h5a{491ujnFfKS&!pK2_qG^GoK`LN*Rq$pTDg#o5-vcio4 zUXV5c2RWuOfK(tTKCOY>vpun=P*@OCAPHtq>jU+nEXcTv1Y^hG*nj#gC7{ z0hd2n@FMdp12Z#r&+ERY!2BZSGm`-q=W)P#131tn1L`c`0FHLhW5EWH?E<%k@ZjbM t97HfMz;-t{JgmtI1DN4(FPO?W14#6Na}0%pN)RPT7Xkut?fZBBe*sCPA activityTestRule = new ActivityTestRule<>(MainActivity.class); + + @Test + public void testExample() { + // Wait for a view displayed + int waitTime = 0; + final int sleepTime = 1000; + do { + try { + ViewInteraction view = onView(allOf(withContentDescription("output"), isDisplayed())); + if (getText(view) != null) { + break; + } + } catch (NoMatchingViewException ne) { + try { + Thread.sleep(sleepTime); + } catch (InterruptedException ie) { + } + waitTime += sleepTime; + } + } while (waitTime < 180000); + + ViewInteraction view = onView(allOf(withContentDescription("output"), isDisplayed())); + Assert.assertEquals(getText(view), "Result: 3"); + } + + private String getText(ViewInteraction matcher) { + final String[] text = {null}; + + matcher.perform(new ViewAction() { + @Override + public Matcher getConstraints() { + return isAssignableFrom(TextView.class); + } + + @Override + public String getDescription() { + return "get a text from a TextView"; + } + + @Override + public void perform(UiController uiController, View view) { + TextView textView = (TextView)view; + text[0] = textView.getText().toString(); + } + }); + + return text[0]; + } +} diff --git a/js/react_native/example/android/app/src/debug/AndroidManifest.xml b/js/react_native/e2e/android/app/src/debug/AndroidManifest.xml similarity index 100% rename from js/react_native/example/android/app/src/debug/AndroidManifest.xml rename to js/react_native/e2e/android/app/src/debug/AndroidManifest.xml diff --git a/js/react_native/example/android/app/src/debug/java/com/example/reactnativeonnxruntimemodule/ReactNativeFlipper.java b/js/react_native/e2e/android/app/src/debug/java/com/example/reactnativeonnxruntimemodule/ReactNativeFlipper.java similarity index 100% rename from js/react_native/example/android/app/src/debug/java/com/example/reactnativeonnxruntimemodule/ReactNativeFlipper.java rename to js/react_native/e2e/android/app/src/debug/java/com/example/reactnativeonnxruntimemodule/ReactNativeFlipper.java diff --git a/js/react_native/example/android/app/src/main/AndroidManifest.xml b/js/react_native/e2e/android/app/src/main/AndroidManifest.xml similarity index 100% rename from js/react_native/example/android/app/src/main/AndroidManifest.xml rename to js/react_native/e2e/android/app/src/main/AndroidManifest.xml diff --git a/js/react_native/example/android/app/src/main/assets/3.jpg b/js/react_native/e2e/android/app/src/main/assets/3.jpg similarity index 100% rename from js/react_native/example/android/app/src/main/assets/3.jpg rename to js/react_native/e2e/android/app/src/main/assets/3.jpg diff --git a/js/react_native/e2e/android/app/src/main/assets/index.android.bundle b/js/react_native/e2e/android/app/src/main/assets/index.android.bundle new file mode 100644 index 0000000000000..00d9a7249c151 --- /dev/null +++ b/js/react_native/e2e/android/app/src/main/assets/index.android.bundle @@ -0,0 +1,811 @@ +var __BUNDLE_START_TIME__=this.nativePerformanceNow?nativePerformanceNow():Date.now(),__DEV__=false,process=this.process||{},__METRO_GLOBAL_PREFIX__='';process.env=process.env||{};process.env.NODE_ENV=process.env.NODE_ENV||"production"; +!(function(r){"use strict";r.__r=o,r[__METRO_GLOBAL_PREFIX__+"__d"]=function(r,i,n){if(null!=e[i])return;var o={dependencyMap:n,factory:r,hasError:!1,importedAll:t,importedDefault:t,isInitialized:!1,publicModule:{exports:{}}};e[i]=o},r.__c=n,r.__registerSegment=function(r,t,i){s[r]=t,i&&i.forEach(function(t){e[t]||v.has(t)||v.set(t,r)})};var e=n(),t={},i={}.hasOwnProperty;function n(){return e=Object.create(null)}function o(r){var t=r,i=e[t];return i&&i.isInitialized?i.publicModule.exports:d(t,i)}function l(r){var i=r;if(e[i]&&e[i].importedDefault!==t)return e[i].importedDefault;var n=o(i),l=n&&n.__esModule?n.default:n;return e[i].importedDefault=l}function u(r){var n=r;if(e[n]&&e[n].importedAll!==t)return e[n].importedAll;var l,u=o(n);if(u&&u.__esModule)l=u;else{if(l={},u)for(var a in u)i.call(u,a)&&(l[a]=u[a]);l.default=u}return e[n].importedAll=l}o.importDefault=l,o.importAll=u;var a=!1;function d(e,t){if(!a&&r.ErrorUtils){var i;a=!0;try{i=h(e,t)}catch(e){r.ErrorUtils.reportFatalError(e)}return a=!1,i}return h(e,t)}var f=16,c=65535;function p(r){return{segmentId:r>>>f,localId:r&c}}o.unpackModuleId=p,o.packModuleId=function(r){return(r.segmentId<0){var n,a=null!==(n=v.get(t))&&void 0!==n?n:0,d=s[a];null!=d&&(d(t),i=e[t],v.delete(t))}var f=r.nativeRequire;if(!i&&f){var c=p(t),h=c.segmentId;f(c.localId,h),i=e[t]}if(!i)throw Error('Requiring unknown module "'+t+'".');if(i.hasError)throw _(t,i.error);i.isInitialized=!0;var m=i,g=m.factory,I=m.dependencyMap;try{var M=i.publicModule;return M.id=t,g(r,o,l,u,M,M.exports,I),i.factory=void 0,i.dependencyMap=void 0,M.exports}catch(r){throw i.hasError=!0,i.error=r,i.isInitialized=!1,i.publicModule.exports=void 0,r}}function _(r,e){return Error('Requiring module "'+r+'", which threw an exception: '+e)}})('undefined'!=typeof globalThis?globalThis:'undefined'!=typeof global?global:'undefined'!=typeof window?window:this); +!(function(n){var e=(function(){function n(n,e){return n}function e(n){var e={};return n.forEach(function(n,r){e[n]=!0}),e}function r(n,r,u){if(n.formatValueCalls++,n.formatValueCalls>200)return"[TOO BIG formatValueCalls "+n.formatValueCalls+" exceeded limit of 200]";var f=t(n,r);if(f)return f;var c=Object.keys(r),s=e(c);if(d(r)&&(c.indexOf('message')>=0||c.indexOf('description')>=0))return o(r);if(0===c.length){if(v(r)){var g=r.name?': '+r.name:'';return n.stylize('[Function'+g+']','special')}if(p(r))return n.stylize(RegExp.prototype.toString.call(r),'regexp');if(y(r))return n.stylize(Date.prototype.toString.call(r),'date');if(d(r))return o(r)}var h,b,m='',j=!1,O=['{','}'];(h=r,Array.isArray(h)&&(j=!0,O=['[',']']),v(r))&&(m=' [Function'+(r.name?': '+r.name:'')+']');return p(r)&&(m=' '+RegExp.prototype.toString.call(r)),y(r)&&(m=' '+Date.prototype.toUTCString.call(r)),d(r)&&(m=' '+o(r)),0!==c.length||j&&0!=r.length?u<0?p(r)?n.stylize(RegExp.prototype.toString.call(r),'regexp'):n.stylize('[Object]','special'):(n.seen.push(r),b=j?i(n,r,u,s,c):c.map(function(e){return l(n,r,u,s,e,j)}),n.seen.pop(),a(b,m,O)):O[0]+m+O[1]}function t(n,e){if(s(e))return n.stylize('undefined','undefined');if('string'==typeof e){var r="'"+JSON.stringify(e).replace(/^"|"$/g,'').replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return n.stylize(r,'string')}return c(e)?n.stylize(''+e,'number'):u(e)?n.stylize(''+e,'boolean'):f(e)?n.stylize('null','null'):void 0}function o(n){return'['+Error.prototype.toString.call(n)+']'}function i(n,e,r,t,o){for(var i=[],a=0,u=e.length;a-1&&(u=l?u.split('\n').map(function(n){return' '+n}).join('\n').substr(2):'\n'+u.split('\n').map(function(n){return' '+n}).join('\n')):u=n.stylize('[Circular]','special')),s(a)){if(l&&i.match(/^\d+$/))return u;(a=JSON.stringify(''+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=n.stylize(a,'name')):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=n.stylize(a,'string'))}return a+': '+u}function a(n,e,r){return n.reduce(function(n,e){return 0,e.indexOf('\n')>=0&&0,n+e.replace(/\u001b\[\d\d?m/g,'').length+1},0)>60?r[0]+(''===e?'':e+'\n ')+' '+n.join(',\n ')+' '+r[1]:r[0]+e+' '+n.join(', ')+' '+r[1]}function u(n){return'boolean'==typeof n}function f(n){return null===n}function c(n){return'number'==typeof n}function s(n){return void 0===n}function p(n){return g(n)&&'[object RegExp]'===h(n)}function g(n){return'object'==typeof n&&null!==n}function y(n){return g(n)&&'[object Date]'===h(n)}function d(n){return g(n)&&('[object Error]'===h(n)||n instanceof Error)}function v(n){return'function'==typeof n}function h(n){return Object.prototype.toString.call(n)}function b(n,e){return Object.prototype.hasOwnProperty.call(n,e)}return function(e,t){return r({seen:[],formatValueCalls:0,stylize:n},e,t.depth)}})(),r='(index)',t={trace:0,info:1,warn:2,error:3},o=[];o[t.trace]='debug',o[t.info]='log',o[t.warn]='warning',o[t.error]='error';var i=1;function l(r){return function(){var l;l=1===arguments.length&&'string'==typeof arguments[0]?arguments[0]:Array.prototype.map.call(arguments,function(n){return e(n,{depth:10})}).join(', ');var a=arguments[0],u=r;'string'==typeof a&&'Warning: '===a.slice(0,9)&&u>=t.error&&(u=t.warn),n.__inspectorLog&&n.__inspectorLog(o[u],l,[].slice.call(arguments),i),s.length&&(l=p('',l)),n.nativeLoggingHook(l,u)}}function a(n,e){return Array.apply(null,Array(e)).map(function(){return n})}var u="\u2502",f="\u2510",c="\u2518",s=[];function p(n,e){return s.join('')+n+' '+(e||'')}if(n.nativeLoggingHook){n.console;n.console={error:l(t.error),info:l(t.info),log:l(t.info),warn:l(t.warn),trace:l(t.trace),debug:l(t.trace),table:function(e){if(!Array.isArray(e)){var o=e;for(var i in e=[],o)if(o.hasOwnProperty(i)){var l=o[i];l[r]=i,e.push(l)}}if(0!==e.length){var u=Object.keys(e[0]).sort(),f=[],c=[];u.forEach(function(n,r){c[r]=n.length;for(var t=0;t';return function(){for(var r=arguments.length,u=new Array(r),e=0;e1?n-1:0),o=1;o0?l[l.length-1]:null,c=l.length>1?l[l.length-2]:null,v='function'==typeof s,h='function'==typeof c;h&&r(d[1])(v,'Cannot have a non-function arg after a function arg.');var y=v?s:null,C=h?c:null,M=v+h,b=l.slice(0,l.length-M);if('sync'===o)return r(d[3]).callNativeSyncHook(n,t,b,C,y);r(d[3]).enqueueNativeCall(n,t,b,C,y)}).type=o,u}function u(n,t){return-1!==n.indexOf(t)}function l(n,t){return r(d[2])(t,n||{})}g.__fbGenNativeModule=n;var f={};if(g.nativeModuleProxy)f=g.nativeModuleProxy;else if(!g.nativeExtensions){var s=g.__fbBatchedBridgeConfig;r(d[1])(s,'__fbBatchedBridgeConfig is not set, cannot invoke native modules');var c=r(d[4]);(s.remoteModuleConfig||[]).forEach(function(o,u){var l=n(o,u);l&&(l.module?f[l.name]=l.module:c(f,l.name,{get:function(){return t(l.name,u)}}))})}m.exports=f},22,[23,18,29,30,39]); +__d(function(g,r,_i,a,m,e,d){m.exports=function(t,o){return r(d[0])(t)||r(d[1])(t,o)||r(d[2])(t,o)||r(d[3])()},m.exports.__esModule=!0,m.exports.default=m.exports},23,[24,25,26,28]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t){if(Array.isArray(t))return t},m.exports.__esModule=!0,m.exports.default=m.exports},24,[]); +__d(function(g,r,_i2,a,m,e,d){m.exports=function(t,l){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var o,u,f=[],i=!0,y=!1;try{for(n=n.call(t);!(i=(o=n.next()).done)&&(f.push(o.value),!l||f.length!==l);i=!0);}catch(t){y=!0,u=t}finally{try{i||null==n.return||n.return()}finally{if(y)throw u}}return f}},m.exports.__esModule=!0,m.exports.default=m.exports},25,[]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t,o){if(t){if("string"==typeof t)return r(d[0])(t,o);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(d[0])(t,o):void 0}},m.exports.__esModule=!0,m.exports.default=m.exports},26,[27]); +__d(function(g,r,_i,a,m,e,d){m.exports=function(t,n){(null==n||n>t.length)&&(n=t.length);for(var o=0,l=new Array(n);o=5){var h=this._queue;this._queue=[[],[],[],this._callID],this._lastFlush=o,g.nativeFlushQueueImmediate(h)}r(d[2]).counterEvent('pending_js_to_native_queue',this._queue[0].length),this.__spy&&this.__spy({type:1,module:t+'',method:l,args:s})}},{key:"createDebugLookup",value:function(t,l,s){}},{key:"setReactNativeMicrotasksCallback",value:function(t){this._reactNativeMicrotasksCallback=t}},{key:"__guard",value:function(t){if(this.__shouldPauseOnThrow())t();else try{t()}catch(t){r(d[3]).reportFatalError(t)}}},{key:"__shouldPauseOnThrow",value:function(){return'undefined'!=typeof DebuggerInternal&&!0===DebuggerInternal.shouldPauseOnThrow}},{key:"__callReactNativeMicrotasks",value:function(){r(d[2]).beginEvent('JSTimers.callReactNativeMicrotasks()'),null!=this._reactNativeMicrotasksCallback&&this._reactNativeMicrotasksCallback(),r(d[2]).endEvent()}},{key:"__callFunction",value:function(t,l,s){this._lastFlush=Date.now(),this._eventLoopStartTime=this._lastFlush,this.__spy?r(d[2]).beginEvent(t+"."+l+"("+r(d[4]).default(s)+")"):r(d[2]).beginEvent(t+"."+l+"(...)"),this.__spy&&this.__spy({type:0,module:t,method:l,args:s});var u=this.getCallableModule(t);r(d[5])(!!u,"Module "+t+" is not a registered callable module (calling "+l+"). A frequent cause of the error is that the application entry file path is incorrect.\n This can also happen when the JS bundle is corrupt or there is an early initialization error when loading React Native."),r(d[5])(!!u[l],"Method "+l+" does not exist on module "+t),u[l].apply(u,s),r(d[2]).endEvent()}},{key:"__invokeCallback",value:function(t,l){this._lastFlush=Date.now(),this._eventLoopStartTime=this._lastFlush;var s=t>>>1,u=1&t?this._successCallbacks.get(s):this._failureCallbacks.get(s);u&&(this._successCallbacks.delete(s),this._failureCallbacks.delete(s),u.apply(void 0,r(d[6])(l)))}}],[{key:"spy",value:function(l){t.prototype.__spy=!0===l?function(t){console.log((0===t.type?'N->JS':'JS->N')+" : "+(null!=t.module?t.module+'.':'')+t.method+"("+JSON.stringify(t.args)+")")}:!1===l?null:l}}]),t})();m.exports=t},31,[7,8,32,33,34,18,35]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=!1,t=0,c={installReactHook:function(){!0},setEnabled:function(t){n!==t&&(n=t)},isEnabled:function(){return n},beginEvent:function(t,c){if(n){var o='function'==typeof t?t():t;g.nativeTraceBeginSection(131072,o,c)}},endEvent:function(){n&&g.nativeTraceEndSection(131072)},beginAsyncEvent:function(c){var o=t;if(n){t++;var f='function'==typeof c?c():c;g.nativeTraceBeginAsyncSection(131072,f,o)}return o},endAsyncEvent:function(t,c){if(n){var o='function'==typeof t?t():t;g.nativeTraceEndAsyncSection(131072,o,c)}},counterEvent:function(t,c){if(n){var o='function'==typeof t?t():t;g.nativeTraceCounter&&g.nativeTraceCounter(131072,o,c)}}};m.exports=c},32,[]); +__d(function(g,r,i,a,m,e,d){m.exports=g.ErrorUtils},33,[]); +__d(function(g,r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.createStringifySafeWithLimits=o,_e.default=void 0;var t=r(d[0])(r(d[1]));function e(t,e){var i="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(i)return(i=i.call(t)).next.bind(i);if(Array.isArray(t)||(i=n(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var o=0;return function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function n(t,e){if(t){if("string"==typeof t)return i(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(t,e):void 0}}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);nf+"...(truncated)...".length?i.substring(0,f)+"...(truncated)...":i}if('object'!=typeof i||null===i)return i;var u=i;if(Array.isArray(i))h.length>=o?u="[ ... array with "+i.length+" values ... ]":i.length>c&&(u=i.slice(0,c).concat(["... extra "+(i.length-c)+" values truncated ..."]));else{(0,t.default)('object'==typeof i,'This was already found earlier');var l=Object.keys(i);if(h.length>=o)u="{ ... object with "+l.length+" keys ... }";else if(l.length>s){u={};for(var y,v=e(l.slice(0,s));!(y=v()).done;){var b=y.value;u[b]=i[b]}u['...(truncated keys)...']=l.length-s}}return h.unshift(u),u}return function(t){if(void 0===t)return'undefined';if(null===t)return'null';if('function'==typeof t)try{return t.toString()}catch(t){return'[function unknown]'}else{if(t instanceof Error)return t.name+': '+t.message;try{var e=JSON.stringify(t,v);return void 0===e?'["'+typeof t+'" failed to stringify]':e}catch(e){if('function'==typeof t.toString)try{return t.toString()}catch(t){}}}return'["'+typeof t+'" failed to stringify]'}}var u=o({maxDepth:10,maxStringLimit:100,maxArrayLimit:50,maxObjectKeysLimit:50});_e.default=u},34,[3,18]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t){return r(d[0])(t)||r(d[1])(t)||r(d[2])(t)||r(d[3])()},m.exports.__esModule=!0,m.exports.default=m.exports},35,[36,37,26,38]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t){if(Array.isArray(t))return r(d[0])(t)},m.exports.__esModule=!0,m.exports.default=m.exports},36,[27]); +__d(function(g,r,i,a,m,e,d){m.exports=function(o){if("undefined"!=typeof Symbol&&null!=o[Symbol.iterator]||null!=o["@@iterator"])return Array.from(o)},m.exports.__esModule=!0,m.exports.default=m.exports},37,[]); +__d(function(g,r,i,a,m,e,d){m.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},m.exports.__esModule=!0,m.exports.default=m.exports},38,[]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=function(t,n,u){var b,c=u.get,o=!1!==u.enumerable,f=!1!==u.writable,l=!1;function s(u){b=u,l=!0,Object.defineProperty(t,n,{value:u,configurable:!0,enumerable:o,writable:f})}Object.defineProperty(t,n,{get:function(){return l||(l=!0,s(c())),b},set:s,configurable:!0,enumerable:o})}},39,[]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=n[l]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).get('AccessibilityInfo');e.default=n},40,[21]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('AccessibilityManager');e.default=n},41,[21]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));m.exports=function(s,c){'focus'===c&&t.default.sendAccessibilityEvent(s,t.default.getConstants().AccessibilityEventTypes.typeViewFocused),'click'===c&&t.default.sendAccessibilityEvent(s,t.default.getConstants().AccessibilityEventTypes.typeViewClicked)}},42,[3,43]); +__d(function(g,r,i,a,m,e,d){var l=r(d[0])(r(d[1])),n=!0===g.RN$Bridgeless?r(d[2]):null==l.default.unstable_UIManager?r(d[3]):l.default.unstable_UIManager;m.exports=n},43,[3,44,45,46]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default={unstable_UIManager:null}},44,[]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports={getViewManagerConfig:function(n){return console.warn('Attempting to get config for view manager: '+n),'RCTVirtualText'===n?{}:null},hasViewManagerConfig:function(n){return'RCTVirtualText'===n||'RCTShimmeringView'===n},getConstants:function(){return{}},getConstantsForViewManager:function(n){},getDefaultEventTypes:function(){return[]},lazilyLoadView:function(n){},createView:function(n,t,o,u){},updateView:function(n,t,o){},focus:function(n){},blur:function(n){},findSubviewIn:function(n,t,o){},dispatchViewManagerCommand:function(n,t,o){},measure:function(n,t){},measureInWindow:function(n,t){},viewIsDescendantOf:function(n,t,o){},measureLayout:function(n,t,o,u){},measureLayoutRelativeToParent:function(n,t,o){},setJSResponder:function(n,t){},clearJSResponder:function(){},configureNextLayoutAnimation:function(n,t,o){},removeSubviewsFromContainerWithID:function(n){},replaceExistingNonRootView:function(n,t){},setChildren:function(n,t){},manageChildren:function(n,t,o,u,c,f){},setLayoutAnimationEnabledExperimental:function(n){},sendAccessibilityEvent:function(n,t){},showPopupMenu:function(n,t,o,u){},dismissPopupMenu:function(){}}},45,[]); +__d(function(g,r,i,a,m,_e,d){var n=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),t={},o=new Set,f={},u=!1;function c(){return u||(f=e.default.getConstants(),u=!0),f}function l(n){if(void 0===t[n]&&g.nativeCallSyncHook&&e.default.getConstantsForViewManager)try{t[n]=e.default.getConstantsForViewManager(n)}catch(e){console.error("NativeUIManager.getConstantsForViewManager('"+n+"') threw an exception.",e),t[n]=null}var f=t[n];if(f)return f;if(!g.nativeCallSyncHook)return f;if(e.default.lazilyLoadView&&!o.has(n)){var u=e.default.lazilyLoadView(n);o.add(n),null!=u&&null!=u.viewConfig&&(c()[n]=u.viewConfig,w(n))}return t[n]}var s=(0,n.default)({},e.default,{createView:function(n,t,o,f){e.default.createView(n,t,o,f)},getConstants:function(){return c()},getViewManagerConfig:function(n){return l(n)},hasViewManagerConfig:function(n){return null!=l(n)}});function w(n){var e=c()[n];t[n]=e,e.Manager&&(r(d[3])(e,'Constants',{get:function(){var n=r(d[4])[e.Manager],t={};return n&&Object.keys(n).forEach(function(e){var o=n[e];'function'!=typeof o&&(t[e]=o)}),t}}),r(d[3])(e,'Commands',{get:function(){var n=r(d[4])[e.Manager],t={},o=0;return n&&Object.keys(n).forEach(function(e){'function'==typeof n[e]&&(t[e]=o++)}),t}}))}e.default.getViewManagerConfig=s.getViewManagerConfig,c().ViewManagerNames&&e.default.getConstants().ViewManagerNames.forEach(function(n){r(d[3])(e.default,n,{get:function(){return e.default.getConstantsForViewManager(n)}})}),g.nativeCallSyncHook||Object.keys(c()).forEach(function(n){r(d[5]).includes(n)||(t[n]||(t[n]=c()[n]),r(d[3])(e.default,n,{get:function(){return console.warn("Accessing view manager configs directly off UIManager via UIManager['"+n+"'] is no longer supported. Use UIManager.getViewManagerConfig('"+n+"') instead."),s.getViewManagerConfig(n)}}))}),m.exports=s},46,[3,29,47,39,22,48]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=n[l]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).getEnforcing('UIManager');e.default=n},47,[21]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=['clearJSResponder','configureNextLayoutAnimation','createView','dismissPopupMenu','dispatchViewManagerCommand','findSubviewIn','getConstantsForViewManager','getDefaultEventTypes','manageChildren','measure','measureInWindow','measureLayout','measureLayoutRelativeToParent','removeRootView','removeSubviewsFromContainerWithID','replaceExistingNonRootView','sendAccessibilityEvent','setChildren','setJSResponder','setLayoutAnimationEnabledExperimental','showPopupMenu','updateView','viewIsDescendantOf','PopupMenu','LazyViewManagersEnabled','ViewManagerNames','StyleConstants','AccessibilityEventTypes','UIView','getViewManagerConfig','hasViewManagerConfig','blur','focus','genericBubblingEventTypes','genericDirectEventTypes','lazilyLoadView']},48,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var t;t=r(d[0]),m.exports=t},49,[50]); +__d(function(e,n,t,r,l,a,i){"use strict";n(i[0]);var u=n(i[1]);function o(e,n,t,r,l,a,i,u,o){var s=Array.prototype.slice.call(arguments,3);try{n.apply(t,s)}catch(e){this.onError(e)}}var s=!1,c=null,d=!1,f=null,p={onError:function(e){s=!0,c=e}};function h(e,n,t,r,l,a,i,u,d){s=!1,c=null,o.apply(p,arguments)}function g(e,n,t,r,l,a,i,u,o){if(h.apply(this,arguments),s){if(!s)throw Error("clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.");var p=c;s=!1,c=null,d||(d=!0,f=p)}}var m=Array.isArray,v=null,b=null,y=null;function S(e,n,t){var r=e.type||"unknown-event";e.currentTarget=y(t),g(r,n,void 0,e),e.currentTarget=null}function k(e){var n=e._dispatchListeners,t=e._dispatchInstances;if(m(n))throw Error("executeDirectDispatch(...): Invalid `event`.");return e.currentTarget=n?y(t):null,n=n?n(e):null,e.currentTarget=null,e._dispatchListeners=null,e._dispatchInstances=null,n}function w(){return!0}function _(){return!1}function T(e,n,t,r){for(var l in this.dispatchConfig=e,this._targetInst=n,this.nativeEvent=t,this._dispatchInstances=this._dispatchListeners=null,e=this.constructor.Interface)e.hasOwnProperty(l)&&((n=e[l])?this[l]=n(t):"target"===l?this.target=r:this[l]=t[l]);return this.isDefaultPrevented=(null!=t.defaultPrevented?t.defaultPrevented:!1===t.returnValue)?w:_,this.isPropagationStopped=_,this}function x(e,n,t,r){if(this.eventPool.length){var l=this.eventPool.pop();return this.call(l,e,n,t,r),l}return new this(e,n,t,r)}function P(e){if(!(e instanceof this))throw Error("Trying to release an event instance into a pool of a different type.");e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function R(e){e.getPooled=x,e.eventPool=[],e.release=P}n(i[2])(T.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=w)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=w)},persist:function(){this.isPersistent=w},isPersistent:_,destructor:function(){var e,n=this.constructor.Interface;for(e in n)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=_,this._dispatchInstances=this._dispatchListeners=null}}),T.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},T.extend=function(e){function t(){}function r(){return l.apply(this,arguments)}var l=this;t.prototype=l.prototype;var a=new t;return n(i[2])(a,r.prototype),r.prototype=a,r.prototype.constructor=r,r.Interface=n(i[2])({},l.Interface,e),r.extend=l.extend,R(r),r},R(T);var E=T.extend({touchHistory:function(){return null}});function C(e){return"topTouchStart"===e}function N(e){return"topTouchMove"===e}var z=["topTouchStart"],I=["topTouchMove"],L=["topTouchCancel","topTouchEnd"],U=[],M={touchBank:U,numberActiveTouches:0,indexOfSingleActiveTouch:-1,mostRecentTimeStamp:0};function F(e){return e.timeStamp||e.timestamp}function D(e){if(null==(e=e.identifier))throw Error("Touch object is missing identifier.");return e}function A(e){var n=D(e),t=U[n];t?(t.touchActive=!0,t.startPageX=e.pageX,t.startPageY=e.pageY,t.startTimeStamp=F(e),t.currentPageX=e.pageX,t.currentPageY=e.pageY,t.currentTimeStamp=F(e),t.previousPageX=e.pageX,t.previousPageY=e.pageY,t.previousTimeStamp=F(e)):(t={touchActive:!0,startPageX:e.pageX,startPageY:e.pageY,startTimeStamp:F(e),currentPageX:e.pageX,currentPageY:e.pageY,currentTimeStamp:F(e),previousPageX:e.pageX,previousPageY:e.pageY,previousTimeStamp:F(e)},U[n]=t),M.mostRecentTimeStamp=F(e)}function Q(e){var n=U[D(e)];n&&(n.touchActive=!0,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=F(e),M.mostRecentTimeStamp=F(e))}function H(e){var n=U[D(e)];n&&(n.touchActive=!1,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=F(e),M.mostRecentTimeStamp=F(e))}var O,j={instrument:function(e){O=e},recordTouchTrack:function(e,n){if(null!=O&&O(e,n),N(e))n.changedTouches.forEach(Q);else if(C(e))n.changedTouches.forEach(A),M.numberActiveTouches=n.touches.length,1===M.numberActiveTouches&&(M.indexOfSingleActiveTouch=n.touches[0].identifier);else if(("topTouchEnd"===e||"topTouchCancel"===e)&&(n.changedTouches.forEach(H),M.numberActiveTouches=n.touches.length,1===M.numberActiveTouches))for(e=0;ei||(a=i),Ne(a,e,l)}}}),v=function(e){return we.get(e._nativeTag)||null},b=_e,y=function(e){var n=(e=e.stateNode)._nativeTag;if(void 0===n&&(n=(e=e.canonical)._nativeTag),!n)throw Error("All native instances should have a tag.");return e},re.injection.injectGlobalResponderHandler({onChange:function(e,t,r){null!==t?n(i[3]).UIManager.setJSResponder(t.stateNode._nativeTag,r):n(i[3]).UIManager.clearJSResponder()}});var ze=u.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Ie=60103,Le=60106,Ue=60107,Me=60108,Fe=60114,De=60109,Ae=60110,Qe=60112,He=60113,Oe=60120,je=60115,Be=60116,Ve=60129,We=60130,Ye=60131,qe=60132;if("function"==typeof Symbol&&Symbol.for){var Xe=Symbol.for;Ie=Xe("react.element"),Le=Xe("react.portal"),Ue=Xe("react.fragment"),Me=Xe("react.strict_mode"),Fe=Xe("react.profiler"),De=Xe("react.provider"),Ae=Xe("react.context"),Qe=Xe("react.forward_ref"),He=Xe("react.suspense"),Oe=Xe("react.suspense_list"),je=Xe("react.memo"),Be=Xe("react.lazy"),Xe("react.scope"),Ve=Xe("react.debug_trace_mode"),We=Xe("react.offscreen"),Ye=Xe("react.legacy_hidden"),qe=Xe("react.cache")}var $e="function"==typeof Symbol&&Symbol.iterator;function Ge(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$e&&e[$e]||e["@@iterator"])?e:null}function Ke(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case Ue:return"Fragment";case Le:return"Portal";case Fe:return"Profiler";case Me:return"StrictMode";case He:return"Suspense";case Oe:return"SuspenseList";case qe:return"Cache"}if("object"==typeof e)switch(e.$$typeof){case Ae:return(e.displayName||"Context")+".Consumer";case De:return(e._context.displayName||"Context")+".Provider";case Qe:var n=e.render;return(e=e.displayName)||(e=""!==(e=n.displayName||n.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case je:return null!==(n=e.displayName||null)?n:Ke(e.type)||"Memo";case Be:n=e._payload,e=e._init;try{return Ke(e(n))}catch(e){}}return null}function Je(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=n.render).displayName||e.name||"",n.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ke(n);case 23:return"LegacyHidden";case 8:return n===Me?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof n)return n.displayName||n.name||null;if("string"==typeof n)return n}return null}function Ze(e){var n=e,t=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do{0!=(2050&(n=e).flags)&&(t=n.return),e=n.return}while(e)}return 3===n.tag?t:null}function en(e){if(Ze(e)!==e)throw Error("Unable to find node on an unmounted component.")}function nn(e){var n=e.alternate;if(!n){if(null===(n=Ze(e)))throw Error("Unable to find node on an unmounted component.");return n!==e?null:e}for(var t=e,r=n;;){var l=t.return;if(null===l)break;var a=l.alternate;if(null===a){if(null!==(r=l.return)){t=r;continue}break}if(l.child===a.child){for(a=l.child;a;){if(a===t)return en(l),e;if(a===r)return en(l),n;a=a.sibling}throw Error("Unable to find node on an unmounted component.")}if(t.return!==r.return)t=l,r=a;else{for(var i=!1,u=l.child;u;){if(u===t){i=!0,t=l,r=a;break}if(u===r){i=!0,r=l,t=a;break}u=u.sibling}if(!i){for(u=a.child;u;){if(u===t){i=!0,t=a,r=l;break}if(u===r){i=!0,r=a,t=l;break}u=u.sibling}if(!i)throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.")}}if(t.alternate!==r)throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.")}if(3!==t.tag)throw Error("Unable to find node on an unmounted component.");return t.stateNode.current===t?e:n}function tn(e){return null!==(e=nn(e))?rn(e):null}function rn(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var n=rn(e);if(null!==n)return n;e=e.sibling}return null}var ln={},an=null,un=0,on={unsafelyIgnoreFunctions:!0};function sn(e,t){return"object"!=typeof t||null===t||n(i[3]).deepDiffer(e,t,on)}function cn(e,n,t){if(m(n))for(var r=n.length;r--&&0=(a=n&-n)||16===l&&0!=(4194240&a)))return n;if(0!=(4&r)&&(r|=16&t),0!==(n=e.entangledLanes))for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function Rn(e,n,t){e.pendingLanes|=n,536870912!==n&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[n=31-Nn(n)]=t}function En(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0Xn||(e.current=qn[Xn],qn[Xn]=null,Xn--)}function Kn(e,n){qn[++Xn]=e.current,e.current=n}var Jn={},Zn=$n(Jn),et=$n(!1),nt=Jn;function tt(e,n){var t=e.type.contextTypes;if(!t)return Jn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l,a={};for(l in t)a[l]=n[l];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=a),a}function rt(e){return null!==(e=e.childContextTypes)&&void 0!==e}function lt(){Gn(et),Gn(Zn)}function at(e,n,t){if(Zn.current!==Jn)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");Kn(Zn,n),Kn(et,t)}function it(e,t,r){var l=e.stateNode;if(t=t.childContextTypes,"function"!=typeof l.getChildContext)return r;for(var a in l=l.getChildContext())if(!(a in t))throw Error((Je(e)||"Unknown")+'.getChildContext(): key "'+a+'" is not defined in childContextTypes.');return n(i[2])({},r,l)}function ut(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Jn,nt=Zn.current,Kn(Zn,e),Kn(et,et.current),!0}function ot(e,n,t){var r=e.stateNode;if(!r)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");t?(e=it(e,n,nt),r.__reactInternalMemoizedMergedChildContext=e,Gn(et),Gn(Zn),Kn(Zn,e)):Gn(et),Kn(et,t)}var st=null,ct=!1,dt=!1;function ft(){if(!dt&&null!==st){dt=!0;var e=0,t=Ln;try{var r=st;for(Ln=1;eg?(m=h,h=null):m=h.sibling;var v=f(l,h,u[g],o);if(null===v){null===h&&(h=m);break}e&&h&&null===v.alternate&&n(l,h),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v,h=m}if(g===u.length)return t(l,h),s;if(null===h){for(;gg?(m=h,h=null):m=h.sibling;var b=f(l,h,v.value,o);if(null===b){null===h&&(h=m);break}e&&h&&null===b.alternate&&n(l,h),i=a(b,i,g),null===c?s=b:c.sibling=b,c=b,h=m}if(v.done)return t(l,h),s;if(null===h){for(;!v.done;g++,v=u.next())null!==(v=d(l,v.value,o))&&(i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return s}for(h=r(l,h);!v.done;g++,v=u.next())null!==(v=p(h,l,g,v.value,o))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return e&&h.forEach(function(e){return n(l,e)}),s}return function(e,r,a,u){var o="object"==typeof a&&null!==a&&a.type===Ue&&null===a.key;if(o&&(a=a.props.children),"object"==typeof a&&null!==a){switch(a.$$typeof){case Ie:e:{var s=a.key;for(o=r;null!==o;){if(o.key===s){if((s=a.type)===Ue){if(7===o.tag){t(e,o.sibling),(r=l(o,a.props.children)).return=e,e=r;break e}}else if(o.elementType===s){t(e,o.sibling),(r=l(o,a.props)).ref=Wt(e,o,a),r.return=e,e=r;break e}t(e,o);break}n(e,o),o=o.sibling}a.type===Ue?((r=Ka(a.props.children,e.mode,u,a.key)).return=e,e=r):((u=Ga(a.type,a.key,a.props,null,e.mode,u)).ref=Wt(e,r,a),u.return=e,e=u)}return i(e);case Le:e:{for(o=a.key;null!==r;){if(r.key===o){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){t(e,r.sibling),(r=l(r,a.children||[])).return=e,e=r;break e}t(e,r);break}n(e,r),r=r.sibling}(r=ei(a,e.mode,u)).return=e,e=r}return i(e)}if(m(a))return h(e,r,a,u);if(Ge(a))return g(e,r,a,u);Yt(e,a)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(t(e,r.sibling),(r=l(r,a)).return=e,e=r):(t(e,r),(r=Za(a,e.mode,u)).return=e,e=r),i(e);if(void 0===a&&!o)switch(e.tag){case 1:case 0:case 11:case 15:throw Error((Je(e)||"Component")+"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.")}return t(e,r)}}var Xt=qt(!0),$t=qt(!1),Gt={},Kt=$n(Gt),Jt=$n(Gt),Zt=$n(Gt);function er(e){if(e===Gt)throw Error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.");return e}function nr(e,n){Kn(Zt,n),Kn(Jt,e),Kn(Kt,Gt),Gn(Kt),Kn(Kt,{isInAParentText:!1})}function tr(){Gn(Kt),Gn(Jt),Gn(Zt)}function rr(e){er(Zt.current);var n=er(Kt.current),t=e.type;t="AndroidTextInput"===t||"RCTMultilineTextInputView"===t||"RCTSinglelineTextInputView"===t||"RCTText"===t||"RCTVirtualText"===t,n!==(t=n.isInAParentText!==t?{isInAParentText:t}:n)&&(Kn(Jt,e),Kn(Kt,t))}function lr(e){Jt.current===e&&(Gn(Kt),Gn(Jt))}var ar=$n(0);function ir(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===t.dehydrated||Mn()||Mn()))return n}else if(19===n.tag&&void 0!==n.memoizedProps.revealOrder){if(0!=(128&n.flags))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var ur=[];function or(){for(var e=0;ea))throw Error("Too many re-renders. React limits the number of renders to prevent an infinite loop.");a+=1,hr=pr=null,n.updateQueue=null,sr.current=Yr,e=t(r,l)}while(mr)}if(sr.current=Br,n=null!==pr&&null!==pr.next,dr=0,hr=pr=fr=null,gr=!1,n)throw Error("Rendered fewer hooks than expected. This may be caused by an accidental early return statement.");return e}function Sr(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===hr?fr.memoizedState=hr=e:hr=hr.next=e,hr}function kr(){if(null===pr){var e=fr.alternate;e=null!==e?e.memoizedState:null}else e=pr.next;var n=null===hr?fr.memoizedState:hr.next;if(null!==n)hr=n,pr=e;else{if(null===e)throw Error("Rendered more hooks than during the previous render.");e={memoizedState:(pr=e).memoizedState,baseState:pr.baseState,baseQueue:pr.baseQueue,queue:pr.queue,next:null},null===hr?fr.memoizedState=hr=e:hr=hr.next=e}return hr}function wr(e,n){return"function"==typeof n?n(e):n}function _r(e){var n=kr(),t=n.queue;if(null===t)throw Error("Should have a queue. This is likely a bug in React. Please file an issue.");t.lastRenderedReducer=e;var r=pr,l=r.baseQueue,a=t.pending;if(null!==a){if(null!==l){var i=l.next;l.next=a.next,a.next=i}r.baseQueue=l=a,t.pending=null}if(null!==l){a=l.next,r=r.baseState;var u=i=null,o=null,s=a;do{var c=s.lane;if((dr&c)===c)null!==o&&(o=o.next={lane:0,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null}),r=s.eagerReducer===e?s.eagerState:e(r,s.action);else{var d={lane:c,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null};null===o?(u=o=d,i=r):o=o.next=d,fr.lanes|=c,ia|=c}s=s.next}while(null!==s&&s!==a);null===o?i=r:o.next=u,ht(r,n.memoizedState)||(Zr=!0),n.memoizedState=r,n.baseState=i,n.baseQueue=o,t.lastRenderedState=r}if(null!==(e=t.interleaved)){l=e;do{a=l.lane,fr.lanes|=a,ia|=a,l=l.next}while(l!==e)}else null===l&&(t.lanes=0);return[n.memoizedState,t.dispatch]}function Tr(e){var n=kr(),t=n.queue;if(null===t)throw Error("Should have a queue. This is likely a bug in React. Please file an issue.");t.lastRenderedReducer=e;var r=t.dispatch,l=t.pending,a=n.memoizedState;if(null!==l){t.pending=null;var i=l=l.next;do{a=e(a,i.action),i=i.next}while(i!==l);ht(a,n.memoizedState)||(Zr=!0),n.memoizedState=a,null===n.baseQueue&&(n.baseState=a),t.lastRenderedState=a}return[a,r]}function xr(e,n,t){var r=n._getVersion;r=r(n._source);var l=n._workInProgressVersionPrimary;if(null!==l?e=l===r:(e=e.mutableReadLanes,(e=(dr&e)===e)&&(n._workInProgressVersionPrimary=r,ur.push(n))),e)return t(n._source);throw ur.push(n),Error("Cannot read from mutable source during the current render without tearing. This may be a bug in React. Please file an issue.")}function Pr(e,n,t,r){var l=Zl;if(null===l)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");var a=n._getVersion,i=a(n._source),u=sr.current,o=u.useState(function(){return xr(l,n,t)}),s=o[1],c=o[0];o=hr;var d=e.memoizedState,f=d.refs,p=f.getSnapshot,h=d.source;d=d.subscribe;var g=fr;return e.memoizedState={refs:f,source:n,subscribe:r},u.useEffect(function(){f.getSnapshot=t,f.setSnapshot=s;var e=a(n._source);ht(i,e)||(e=t(n._source),ht(c,e)||(s(e),e=wa(g),l.mutableReadLanes|=e&l.pendingLanes),Cn(l,l.mutableReadLanes))},[t,n,r]),u.useEffect(function(){return r(n._source,function(){var e=f.getSnapshot,t=f.setSnapshot;try{t(e(n._source));var r=wa(g);l.mutableReadLanes|=r&l.pendingLanes}catch(e){t(function(){throw e})}})},[n,r]),ht(p,t)&&ht(h,n)&&ht(d,r)||((e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:wr,lastRenderedState:c}).dispatch=s=jr.bind(null,fr,e),o.queue=e,o.baseQueue=null,c=xr(l,n,t),o.memoizedState=o.baseState=c),c}function Rr(e,n,t){return Pr(kr(),e,n,t)}function Er(e){var n=Sr();return"function"==typeof e&&(e=e()),n.memoizedState=n.baseState=e,e=(e=n.queue={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:wr,lastRenderedState:e}).dispatch=jr.bind(null,fr,e),[n.memoizedState,e]}function Cr(e,n,t,r){return e={tag:e,create:n,destroy:t,deps:r,next:null},null===(n=fr.updateQueue)?(n={lastEffect:null},fr.updateQueue=n,n.lastEffect=e.next=e):null===(t=n.lastEffect)?n.lastEffect=e.next=e:(r=t.next,t.next=e,e.next=r,n.lastEffect=e),e}function Nr(){return kr().memoizedState}function zr(e,n,t,r){var l=Sr();fr.flags|=e,l.memoizedState=Cr(1|n,t,void 0,void 0===r?null:r)}function Ir(e,n,t,r){var l=kr();r=void 0===r?null:r;var a=void 0;if(null!==pr){var i=pr.memoizedState;if(a=i.destroy,null!==r&&br(r,i.deps))return void(l.memoizedState=Cr(n,t,a,r))}fr.flags|=e,l.memoizedState=Cr(1|n,t,a,r)}function Lr(e,n){return zr(1049600,4,e,n)}function Ur(e,n){return Ir(1024,4,e,n)}function Mr(e,n){return Ir(4,2,e,n)}function Fr(e,n){return"function"==typeof n?(e=e(),n(e),function(){n(null)}):null!==n&&void 0!==n?(e=e(),n.current=e,function(){n.current=null}):void 0}function Dr(e,n,t){return t=null!==t&&void 0!==t?t.concat([e]):null,Ir(4,2,Fr.bind(null,n,e),t)}function Ar(){}function Qr(e,n){var t=kr();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&br(n,r[1])?r[0]:(t.memoizedState=[e,n],e)}function Hr(e,n){var t=kr();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&br(n,r[1])?r[0]:(e=e(),t.memoizedState=[e,n],e)}function Or(e,n){var t=Ln;Ln=0!==t&&4>t?t:4,e(!0);var r=cr.transition;cr.transition=1;try{e(!1),n()}finally{Ln=t,cr.transition=r}}function jr(e,n,t){var r=ka(),l=wa(e),a={lane:l,action:t,eagerReducer:null,eagerState:null,next:null},i=e.alternate;if(e===fr||null!==i&&i===fr)mr=gr=!0,null===(l=n.pending)?a.next=a:(a.next=l.next,l.next=a),n.pending=a;else{if(null!==Zl&&0!=(1&e.mode)&&0==(8&Jl)){var u=n.interleaved;null===u?(a.next=a,null===Et?Et=[n]:Et.push(n)):(a.next=u.next,u.next=a),n.interleaved=a}else null===(u=n.pending)?a.next=a:(a.next=u.next,u.next=a),n.pending=a;if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=n.lastRenderedReducer))try{var o=n.lastRenderedState,s=i(o,t);if(a.eagerReducer=i,a.eagerState=s,ht(s,o))return}catch(e){}a=_a(e,l,r),0!=(4194240&l)&&null!==a&&(e=n.lanes,l|=e&=a.pendingLanes,n.lanes=l,Cn(a,l))}}var Br={readContext:Rt,useCallback:vr,useContext:vr,useEffect:vr,useImperativeHandle:vr,useLayoutEffect:vr,useMemo:vr,useReducer:vr,useRef:vr,useState:vr,useDebugValue:vr,useDeferredValue:vr,useTransition:vr,useMutableSource:vr,useOpaqueIdentifier:vr,unstable_isNewReconciler:!1},Vr={readContext:Rt,useCallback:function(e,n){return Sr().memoizedState=[e,void 0===n?null:n],e},useContext:Rt,useEffect:Lr,useImperativeHandle:function(e,n,t){return t=null!==t&&void 0!==t?t.concat([e]):null,zr(4,2,Fr.bind(null,n,e),t)},useLayoutEffect:function(e,n){return zr(4,2,e,n)},useMemo:function(e,n){var t=Sr();return n=void 0===n?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=Sr();return n=void 0!==t?t(n):n,r.memoizedState=r.baseState=n,e=(e=r.queue={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n}).dispatch=jr.bind(null,fr,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Sr().memoizedState=e},useState:Er,useDebugValue:Ar,useDeferredValue:function(e){var n=Er(e),t=n[0],r=n[1];return Lr(function(){var n=cr.transition;cr.transition=1;try{r(e)}finally{cr.transition=n}},[e]),t},useTransition:function(){var e=Er(!1),n=e[0];return e=Or.bind(null,e[1]),Sr().memoizedState=e,[n,e]},useMutableSource:function(e,n,t){var r=Sr();return r.memoizedState={refs:{getSnapshot:n,setSnapshot:null},source:e,subscribe:t},Pr(r,e,n,t)},useOpaqueIdentifier:function(){throw Error("Not yet implemented")},unstable_isNewReconciler:!1},Wr={readContext:Rt,useCallback:Qr,useContext:Rt,useEffect:Ur,useImperativeHandle:Dr,useLayoutEffect:Mr,useMemo:Hr,useReducer:_r,useRef:Nr,useState:function(){return _r(wr)},useDebugValue:Ar,useDeferredValue:function(e){var n=_r(wr),t=n[0],r=n[1];return Ur(function(){var n=cr.transition;cr.transition=1;try{r(e)}finally{cr.transition=n}},[e]),t},useTransition:function(){return[_r(wr)[0],kr().memoizedState]},useMutableSource:Rr,useOpaqueIdentifier:function(){return _r(wr)[0]},unstable_isNewReconciler:!1},Yr={readContext:Rt,useCallback:Qr,useContext:Rt,useEffect:Ur,useImperativeHandle:Dr,useLayoutEffect:Mr,useMemo:Hr,useReducer:Tr,useRef:Nr,useState:function(){return Tr(wr)},useDebugValue:Ar,useDeferredValue:function(e){var n=Tr(wr),t=n[0],r=n[1];return Ur(function(){var n=cr.transition;cr.transition=1;try{r(e)}finally{cr.transition=n}},[e]),t},useTransition:function(){return[Tr(wr)[0],kr().memoizedState]},useMutableSource:Rr,useOpaqueIdentifier:function(){return Tr(wr)[0]},unstable_isNewReconciler:!1};function qr(e,n){return{value:e,source:n,stack:vt(n)}}if("function"!=typeof n(i[3]).ReactFiberErrorDialog.showErrorDialog)throw Error("Expected ReactFiberErrorDialog.showErrorDialog to be a function.");function Xr(e,t){try{!1!==n(i[3]).ReactFiberErrorDialog.showErrorDialog({componentStack:null!==t.stack?t.stack:"",error:t.value,errorBoundary:null!==e&&1===e.tag?e.stateNode:null})&&console.error(t.value)}catch(e){setTimeout(function(){throw e})}}var $r="function"==typeof WeakMap?WeakMap:Map;function Gr(e,n,t){(t=It(-1,t)).tag=3,t.payload={element:null};var r=n.value;return t.callback=function(){da||(da=!0,fa=r),Xr(e,n)},t}function Kr(e,n,t){(t=It(-1,t)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var l=n.value;t.payload=function(){return Xr(e,n),r(l)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(t.callback=function(){"function"!=typeof r&&(null===pa?pa=new Set([this]):pa.add(this),Xr(e,n));var t=n.stack;this.componentDidCatch(n.value,{componentStack:null!==t?t:""})}),t}var Jr=ze.ReactCurrentOwner,Zr=!1;function el(e,n,t,r){n.child=null===e?$t(n,null,t,r):Xt(n,e.child,t,r)}function nl(e,n,t,r,l){t=t.render;var a=n.ref;return Pt(n,l),r=yr(e,n,t,r,a,l),null===e||Zr?(n.flags|=1,el(e,n,r,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-1029,e.lanes&=~l,_l(e,n,l))}function tl(e,n,t,r,l,a){if(null===e){var i=t.type;return"function"!=typeof i||qa(i)||void 0!==i.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=Ga(t.type,null,r,n,n.mode,a)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=i,rl(e,n,i,r,l,a))}return i=e.child,0==(l&a)&&(l=i.memoizedProps,(t=null!==(t=t.compare)?t:gt)(l,r)&&e.ref===n.ref)?_l(e,n,a):(n.flags|=1,(e=$a(i,r)).ref=n.ref,e.return=n,n.child=e)}function rl(e,n,t,r,l,a){if(null!==e&>(e.memoizedProps,r)&&e.ref===n.ref){if(Zr=!1,0==(a&l))return n.lanes=e.lanes,_l(e,n,a);0!=(32768&e.flags)&&(Zr=!0)}return il(e,n,t,r,a)}function ll(e,n,t){var r=n.pendingProps,l=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(1&n.mode))n.memoizedState={baseLanes:0,cachePool:null},Kn(ra,ta),ta|=t;else{if(0==(1073741824&t))return e=null!==a?a.baseLanes|t:t,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null},n.updateQueue=null,Kn(ra,ta),ta|=e,null;n.memoizedState={baseLanes:0,cachePool:null},r=null!==a?a.baseLanes:t,Kn(ra,ta),ta|=r}else null!==a?(r=a.baseLanes|t,n.memoizedState=null):r=t,Kn(ra,ta),ta|=r;return el(e,n,l,t),n.child}function al(e,n){var t=n.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(n.flags|=256)}function il(e,n,t,r,l){var a=rt(t)?nt:Zn.current;return a=tt(n,a),Pt(n,l),t=yr(e,n,t,r,a,l),null===e||Zr?(n.flags|=1,el(e,n,t,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-1029,e.lanes&=~l,_l(e,n,l))}function ul(e,n,t,r,l){if(rt(t)){var a=!0;ut(n)}else a=!1;if(Pt(n,l),null===n.stateNode)null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2),jt(n,t,r),Vt(n,t,r,l),r=!0;else if(null===e){var i=n.stateNode,u=n.memoizedProps;i.props=u;var o=i.context,s=t.contextType;"object"==typeof s&&null!==s?s=Rt(s):s=tt(n,s=rt(t)?nt:Zn.current);var c=t.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==r||o!==s)&&Bt(n,i,r,s),Ct=!1;var f=n.memoizedState;i.state=f,Ft(n,r,i,l),o=n.memoizedState,u!==r||f!==o||et.current||Ct?("function"==typeof c&&(Qt(n,t,c,r),o=n.memoizedState),(u=Ct||Ot(n,t,u,r,f,o,s))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(n.flags|=4)):("function"==typeof i.componentDidMount&&(n.flags|=4),n.memoizedProps=r,n.memoizedState=o),i.props=r,i.state=o,i.context=s,r=u):("function"==typeof i.componentDidMount&&(n.flags|=4),r=!1)}else{i=n.stateNode,zt(e,n),u=n.memoizedProps,s=n.type===n.elementType?u:bt(n.type,u),i.props=s,d=n.pendingProps,f=i.context,"object"==typeof(o=t.contextType)&&null!==o?o=Rt(o):o=tt(n,o=rt(t)?nt:Zn.current);var p=t.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==d||f!==o)&&Bt(n,i,r,o),Ct=!1,f=n.memoizedState,i.state=f,Ft(n,r,i,l);var h=n.memoizedState;u!==d||f!==h||et.current||Ct?("function"==typeof p&&(Qt(n,t,p,r),h=n.memoizedState),(s=Ct||Ot(n,t,s,r,f,h,o)||!1)?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,o),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,o)),"function"==typeof i.componentDidUpdate&&(n.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(n.flags|=512)):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=512),n.memoizedProps=r,n.memoizedState=h),i.props=r,i.state=h,i.context=o,r=s):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=512),r=!1)}return ol(e,n,t,r,a,l)}function ol(e,n,t,r,l,a){al(e,n);var i=0!=(128&n.flags);if(!r&&!i)return l&&ot(n,t,!1),_l(e,n,a);r=n.stateNode,Jr.current=n;var u=i&&"function"!=typeof t.getDerivedStateFromError?null:r.render();return n.flags|=1,null!==e&&i?(n.child=Xt(n,e.child,null,a),n.child=Xt(n,null,u,a)):el(e,n,u,a),n.memoizedState=r.state,l&&ot(n,t,!0),n.child}function sl(e){var n=e.stateNode;n.pendingContext?at(0,n.pendingContext,n.pendingContext!==n.context):n.context&&at(0,n.context,!1),nr(e,n.containerInfo)}var cl,dl,fl,pl,hl={dehydrated:null,retryLane:0};function gl(e){return{baseLanes:e,cachePool:null}}function ml(e,n,t){var r,l=n.pendingProps,a=ar.current,i=!1;return(r=0!=(128&n.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,n.flags&=-129):null!==e&&null===e.memoizedState||void 0===l.fallback||!0===l.unstable_avoidThisFallback||(a|=1),Kn(ar,1&a),null===e?(e=l.children,a=l.fallback,i?(e=vl(n,e,a,t),n.child.memoizedState=gl(t),n.memoizedState=hl,e):"number"==typeof l.unstable_expectedLoadTime?(e=vl(n,e,a,t),n.child.memoizedState=gl(t),n.memoizedState=hl,n.lanes=4194304,e):((t=Ja({mode:"visible",children:e},n.mode,t,null)).return=n,n.child=t)):(e.memoizedState,i?(l=yl(e,n,l.children,l.fallback,t),i=n.child,a=e.child.memoizedState,i.memoizedState=null===a?gl(t):{baseLanes:a.baseLanes|t,cachePool:null},i.childLanes=e.childLanes&~t,n.memoizedState=hl,l):(t=bl(e,n,l.children,t),n.memoizedState=null,t))}function vl(e,n,t,r){var l=e.mode,a=e.child;return n={mode:"hidden",children:n},0==(1&l)&&null!==a?(a.childLanes=0,a.pendingProps=n):a=Ja(n,l,0,null),t=Ka(t,l,r,null),a.return=e,t.return=e,a.sibling=t,e.child=a,t}function bl(e,n,t,r){var l=e.child;return e=l.sibling,t=$a(l,{mode:"visible",children:t}),0==(1&n.mode)&&(t.lanes=r),t.return=n,t.sibling=null,null!==e&&(null===(r=n.deletions)?(n.deletions=[e],n.flags|=16):r.push(e)),n.child=t}function yl(e,n,t,r,l){var a=n.mode,i=(e=e.child).sibling,u={mode:"hidden",children:t};return 0==(1&a)&&n.child!==e?((t=n.child).childLanes=0,t.pendingProps=u,n.deletions=null):(t=$a(e,u)).subtreeFlags=1835008&e.subtreeFlags,null!==i?r=$a(i,r):(r=Ka(r,a,l,null)).flags|=2,r.return=n,t.return=n,t.sibling=r,n.child=t,r}function Sl(e,n){e.lanes|=n;var t=e.alternate;null!==t&&(t.lanes|=n),xt(e.return,n)}function kl(e,n,t,r,l){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:l}:(a.isBackwards=n,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=t,a.tailMode=l)}function wl(e,n,t){var r=n.pendingProps,l=r.revealOrder,a=r.tail;if(el(e,n,r.children,t),0!=(2&(r=ar.current)))r=1&r|2,n.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Sl(e,t);else if(19===e.tag)Sl(e,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Kn(ar,r),0==(1&n.mode))n.memoizedState=null;else switch(l){case"forwards":for(t=n.child,l=null;null!==t;)null!==(e=t.alternate)&&null===ir(e)&&(l=t),t=t.sibling;null===(t=l)?(l=n.child,n.child=null):(l=t.sibling,t.sibling=null),kl(n,!1,l,t,a);break;case"backwards":for(t=null,l=n.child,n.child=null;null!==l;){if(null!==(e=l.alternate)&&null===ir(e)){n.child=l;break}e=l.sibling,l.sibling=t,t=l,l=e}kl(n,!0,t,null,a);break;case"together":kl(n,!1,null,null,void 0);break;default:n.memoizedState=null}return n.child}function _l(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),ia|=n.lanes,0==(t&n.childLanes))return null;if(null!==e&&n.child!==e.child)throw Error("Resuming work not yet implemented.");if(null!==n.child){for(t=$a(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=$a(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function Tl(e,n){switch(e.tailMode){case"hidden":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function xl(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,r=0;if(n)for(var l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=1835008&l.subtreeFlags,r|=1835008&l.flags,l.return=e,l=l.sibling;else for(l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=t,n}function Pl(e,t,r){var l=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return xl(t),null;case 1:return rt(t.type)&<(),xl(t),null;case 3:return l=t.stateNode,tr(),Gn(et),Gn(Zn),or(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),null!==e&&null!==e.child||l.hydrate||(t.flags|=512),dl(e,t),xl(t),null;case 5:lr(t),r=er(Zt.current);var a=t.type;if(null!==e&&null!=t.stateNode)fl(e,t,a,l,r),e.ref!==t.ref&&(t.flags|=256);else{if(!l){if(null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return xl(t),null}er(Kt.current),e=Qn(),a=Fn(a);var u=hn(null,ln,l,a.validAttributes);n(i[3]).UIManager.createView(e,a.uiViewClassName,r,u),r=new mn(e,a,t),ke.set(e,t),we.set(e,l),cl(r,t,!1,!1),t.stateNode=r,On(r)&&(t.flags|=4),null!==t.ref&&(t.flags|=256)}return xl(t),null;case 6:if(e&&null!=t.stateNode)pl(e,t,e.memoizedProps,l);else{if("string"!=typeof l&&null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");if(e=er(Zt.current),!er(Kt.current).isInAParentText)throw Error("Text strings must be rendered within a component.");r=Qn(),n(i[3]).UIManager.createView(r,"RCTRawText",e,{text:l}),ke.set(r,t),t.stateNode=r}return xl(t),null;case 13:return Gn(ar),l=t.memoizedState,0!=(128&t.flags)?(t.lanes=r,t):(l=null!==l,r=!1,null!==e&&(r=null!==e.memoizedState),l&&!r&&0!=(1&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&ar.current)?0===la&&(la=3):(0!==la&&3!==la||(la=4),null===Zl||0==(268435455&ia)&&0==(268435455&ua)||Ra(Zl,na))),(l||r)&&(t.flags|=4),xl(t),null);case 4:return tr(),dl(e,t),xl(t),null;case 10:return Tt(t.type._context),xl(t),null;case 17:return rt(t.type)&<(),xl(t),null;case 19:if(Gn(ar),null===(a=t.memoizedState))return xl(t),null;if(l=0!=(128&t.flags),null===(u=a.rendering))if(l)Tl(a,!1);else{if(0!==la||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(u=ir(e))){for(t.flags|=128,Tl(a,!1),null!==(e=u.updateQueue)&&(t.updateQueue=e,t.flags|=4),t.subtreeFlags=0,e=r,l=t.child;null!==l;)a=e,(r=l).flags&=1835010,null===(u=r.alternate)?(r.childLanes=0,r.lanes=a,r.child=null,r.subtreeFlags=0,r.memoizedProps=null,r.memoizedState=null,r.updateQueue=null,r.dependencies=null,r.stateNode=null):(r.childLanes=u.childLanes,r.lanes=u.lanes,r.child=u.child,r.subtreeFlags=0,r.deletions=null,r.memoizedProps=u.memoizedProps,r.memoizedState=u.memoizedState,r.updateQueue=u.updateQueue,r.type=u.type,a=u.dependencies,r.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),l=l.sibling;return Kn(ar,1&ar.current|2),t.child}e=e.sibling}null!==a.tail&&n(i[4]).unstable_now()>ca&&(t.flags|=128,l=!0,Tl(a,!1),t.lanes=4194304)}else{if(!l)if(null!==(e=ir(u))){if(t.flags|=128,l=!0,null!==(e=e.updateQueue)&&(t.updateQueue=e,t.flags|=4),Tl(a,!0),null===a.tail&&"hidden"===a.tailMode&&!u.alternate)return xl(t),null}else 2*n(i[4]).unstable_now()-a.renderingStartTime>ca&&1073741824!==r&&(t.flags|=128,l=!0,Tl(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(null!==(e=a.last)?e.sibling=u:t.child=u,a.last=u)}return null!==a.tail?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=n(i[4]).unstable_now(),t.sibling=null,e=ar.current,Kn(ar,l?1&e|2:1&e),t):(xl(t),null);case 22:case 23:return Ca(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&"unstable-defer-without-hiding"!==l.mode&&(t.flags|=4),r&&0==(1073741824&ta)&&0!=(1&t.mode)||xl(t),null}throw Error("Unknown unit of work tag ("+t.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function Rl(e){switch(e.tag){case 1:rt(e.type)&<();var n=e.flags;return 16384&n?(e.flags=-16385&n|128,e):null;case 3:if(tr(),Gn(et),Gn(Zn),or(),0!=(128&(n=e.flags)))throw Error("The root failed to unmount after an error. This is likely a bug in React. Please file an issue.");return e.flags=-16385&n|128,e;case 5:return lr(e),null;case 13:return Gn(ar),16384&(n=e.flags)?(e.flags=-16385&n|128,e):null;case 19:return Gn(ar),null;case 4:return tr(),null;case 10:return Tt(e.type._context),null;case 22:case 23:return Ca(),null;case 24:default:return null}}cl=function(e,n){for(var t=n.child;null!==t;){if(5===t.tag||6===t.tag)e._children.push(t.stateNode);else if(4!==t.tag&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===n)break;for(;null===t.sibling;){if(null===t.return||t.return===n)return;t=t.return}t.sibling.return=t.return,t=t.sibling}},dl=function(){},fl=function(e,n,t,r){e.memoizedProps!==r&&(er(Kt.current),n.updateQueue=Dn)&&(n.flags|=4)},pl=function(e,n,t,r){t!==r&&(n.flags|=4)};var El="function"==typeof WeakSet?WeakSet:Set,Cl=null;function Nl(e,n){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){ja(e,n,t)}else t.current=null}var zl=!1;function Il(e,n){for(Cl=n;null!==Cl;)if(n=(e=Cl).child,0!=(516&e.subtreeFlags)&&null!==n)n.return=e,Cl=n;else for(;null!==Cl;){e=Cl;try{var t=e.alternate;if(0!=(512&e.flags))switch(e.tag){case 0:case 11:case 15:break;case 1:if(null!==t){var r=t.memoizedProps,l=t.memoizedState,a=e.stateNode,i=a.getSnapshotBeforeUpdate(e.elementType===e.type?r:bt(e.type,r),l);a.__reactInternalSnapshotBeforeUpdate=i}break;case 3:break;case 5:case 6:case 4:case 17:break;default:throw 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.")}}catch(n){ja(e,e.return,n)}if(null!==(n=e.sibling)){n.return=e.return,Cl=n;break}Cl=e.return}return t=zl,zl=!1,t}function Ll(e,n,t){var r=n.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var l=r=r.next;do{if((l.tag&e)===e){var a=l.destroy;if(l.destroy=void 0,void 0!==a){var i=n,u=t;try{a()}catch(e){ja(i,u,e)}}}l=l.next}while(l!==r)}}function Ul(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function Ml(e,t){for(var r=null,l=e;;){if(5===l.tag){if(null===r){r=l;var a=l.stateNode;if(t){var u=a.viewConfig,o=hn(null,ln,{style:{display:"none"}},u.validAttributes);n(i[3]).UIManager.updateView(a._nativeTag,u.uiViewClassName,o)}else{a=l.stateNode,o=l.memoizedProps,u=a.viewConfig,o=hn(null,n(i[2])({},o,{style:[o.style,{display:"none"}]}),o,u.validAttributes),n(i[3]).UIManager.updateView(a._nativeTag,u.uiViewClassName,o)}}}else if(6===l.tag){if(null===r)throw Error("Not yet implemented.")}else if((22!==l.tag&&23!==l.tag||null===l.memoizedState||l===e)&&null!==l.child){l.child.return=l,l=l.child;continue}if(l===e)break;for(;null===l.sibling;){if(null===l.return||l.return===e)return;r===l&&(r=null),l=l.return}r===l&&(r=null),l.sibling.return=l.return,l=l.sibling}}function Fl(e,n,t){if(bn&&"function"==typeof bn.onCommitFiberUnmount)try{bn.onCommitFiberUnmount(vn,n)}catch(e){}switch(n.tag){case 0:case 11:case 14:case 15:if(null!==(e=n.updateQueue)&&null!==(e=e.lastEffect)){var r=e=e.next;do{var l=r,a=l.destroy;if(l=l.tag,void 0!==a&&0!=(2&l)){l=n;var i=t;try{a()}catch(e){ja(l,i,e)}}r=r.next}while(r!==e)}break;case 1:if(Nl(n,t),"function"==typeof(e=n.stateNode).componentWillUnmount)try{e.props=n.memoizedProps,e.state=n.memoizedState,e.componentWillUnmount()}catch(e){ja(n,t,e)}break;case 5:Nl(n,t);break;case 4:jl(e,n,t)}}function Dl(e){var n=e.alternate;null!==n&&(e.alternate=null,Dl(n)),e.child=null,e.deletions=null,e.sibling=null,e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Al(e){return 5===e.tag||3===e.tag||4===e.tag}function Ql(e){e:{for(var n=e.return;null!==n;){if(Al(n))break e;n=n.return}throw Error("Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.")}var t=n;switch(n=t.stateNode,t.tag){case 5:var r=!1;break;case 3:case 4:n=n.containerInfo,r=!0;break;default:throw Error("Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.")}32&t.flags&&(t.flags&=-33);e:n:for(t=e;;){for(;null===t.sibling;){if(null===t.return||Al(t.return)){t=null;break e}t=t.return}for(t.sibling.return=t.return,t=t.sibling;5!==t.tag&&6!==t.tag&&18!==t.tag;){if(2&t.flags)continue n;if(null===t.child||4===t.tag)continue n;t.child.return=t,t=t.child}if(!(2&t.flags)){t=t.stateNode;break e}}r?Hl(e,t,n):Ol(e,t,n)}function Hl(e,t,r){var l=e.tag;if(5===l||6===l)if(e=e.stateNode,t){if("number"==typeof r)throw Error("Container does not support insertBefore operation")}else n(i[3]).UIManager.setChildren(r,["number"==typeof e?e:e._nativeTag]);else if(4!==l&&null!==(e=e.child))for(Hl(e,t,r),e=e.sibling;null!==e;)Hl(e,t,r),e=e.sibling}function Ol(e,t,r){var l=e.tag;if(5===l||6===l)if(e=e.stateNode,t){var a=(l=r._children).indexOf(e);0<=a?(l.splice(a,1),t=l.indexOf(t),l.splice(t,0,e),n(i[3]).UIManager.manageChildren(r._nativeTag,[a],[t],[],[],[])):(t=l.indexOf(t),l.splice(t,0,e),n(i[3]).UIManager.manageChildren(r._nativeTag,[],[],["number"==typeof e?e:e._nativeTag],[t],[]))}else t="number"==typeof e?e:e._nativeTag,0<=(a=(l=r._children).indexOf(e))?(l.splice(a,1),l.push(e),n(i[3]).UIManager.manageChildren(r._nativeTag,[a],[l.length-1],[],[],[])):(l.push(e),n(i[3]).UIManager.manageChildren(r._nativeTag,[],[],[t],[l.length-1],[]));else if(4!==l&&null!==(e=e.child))for(Ol(e,t,r),e=e.sibling;null!==e;)Ol(e,t,r),e=e.sibling}function jl(e,t,r){for(var l,a,u=t,o=!1;;){if(!o){o=u.return;e:for(;;){if(null===o)throw Error("Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.");switch(l=o.stateNode,o.tag){case 5:a=!1;break e;case 3:case 4:l=l.containerInfo,a=!0;break e}o=o.return}o=!0}if(5===u.tag||6===u.tag){e:for(var s=e,c=u,d=r,f=c;;)if(Fl(s,f,d),null!==f.child&&4!==f.tag)f.child.return=f,f=f.child;else{if(f===c)break e;for(;null===f.sibling;){if(null===f.return||f.return===c)break e;f=f.return}f.sibling.return=f.return,f=f.sibling}a?(s=l,Hn(u.stateNode),n(i[3]).UIManager.manageChildren(s,[],[],[],[],[0])):(s=l,Hn(d=u.stateNode),d=(c=s._children).indexOf(d),c.splice(d,1),n(i[3]).UIManager.manageChildren(s._nativeTag,[],[],[],[],[d]))}else if(4===u.tag){if(null!==u.child){l=u.stateNode.containerInfo,a=!0,u.child.return=u,u=u.child;continue}}else if(Fl(e,u,r),null!==u.child){u.child.return=u,u=u.child;continue}if(u===t)break;for(;null===u.sibling;){if(null===u.return||u.return===t)return;4===(u=u.return).tag&&(o=!1)}u.sibling.return=u.return,u=u.sibling}}function Bl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:return void Ll(3,t,t.return);case 1:return;case 5:var r=t.stateNode;if(null!=r){var l=t.memoizedProps;e=null!==e?e.memoizedProps:l;var a=t.updateQueue;t.updateQueue=null,null!==a&&(t=r.viewConfig,we.set(r._nativeTag,l),null!=(l=hn(null,e,l,t.validAttributes))&&n(i[3]).UIManager.updateView(r._nativeTag,t.uiViewClassName,l))}return;case 6:if(null===t.stateNode)throw Error("This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.");return void n(i[3]).UIManager.updateView(t.stateNode,"RCTRawText",{text:t.memoizedProps});case 3:case 12:return;case 13:return null!==t.memoizedState&&(sa=n(i[4]).unstable_now(),Ml(t.child,!0)),void Vl(t);case 19:return void Vl(t);case 17:return;case 22:case 23:return void Ml(t,null!==t.memoizedState)}throw 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.")}function Vl(e){var n=e.updateQueue;if(null!==n){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new El),n.forEach(function(n){var r=Va.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))})}}function Wl(e,n){for(Cl=n;null!==Cl;){var t=(n=Cl).deletions;if(null!==t)for(var r=0;ra&&(a=o),l&=~u}if(l=a,10<(l=(120>(l=n(i[4]).unstable_now()-l)?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*Xl(l/1960))-l)){e.timeoutHandle=jn(Aa.bind(null,e),l);break}Aa(e);break;case 5:Aa(e);break;default:throw Error("Unknown root exit status.")}}return xa(e,n(i[4]).unstable_now()),e.callbackNode===r?Pa.bind(null,e):null}function Ra(e,n){for(n&=~oa,n&=~ua,e.suspendedLanes|=n,e.pingedLanes&=~n,e=e.expirationTimes;0 component higher in the tree to provide a loading indicator or placeholder to display.")}5!==la&&(la=2),o=qr(o,u),p=i;do{switch(p.tag){case 3:a=o,p.flags|=16384,n&=-n,p.lanes|=n,Mt(p,Gr(p,a,n));break e;case 1:a=o;var w=p.type,_=p.stateNode;if(0==(128&p.flags)&&("function"==typeof w.getDerivedStateFromError||null!==_&&"function"==typeof _.componentDidCatch&&(null===pa||!pa.has(_)))){p.flags|=16384,n&=-n,p.lanes|=n,Mt(p,Kr(p,a,n));break e}}p=p.return}while(null!==p)}Da(t)}catch(e){n=e,ea===t&&null!==t&&(ea=t=t.return);continue}break}}function Ia(){var e=$l.current;return $l.current=Br,null===e?Br:e}function La(e,n){var t=Jl;Jl|=8;var r=Ia();for(Zl===e&&na===n||Na(e,n);;)try{Ua();break}catch(n){za(e,n)}if(_t(),Jl=t,$l.current=r,null!==ea)throw Error("Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.");return Zl=null,na=0,la}function Ua(){for(;null!==ea;)Fa(ea)}function Ma(){for(;null!==ea&&!n(i[4]).unstable_shouldYield();)Fa(ea)}function Fa(e){var n=ql(e.alternate,e,ta);e.memoizedProps=e.pendingProps,null===n?Da(e):ea=n,Gl.current=null}function Da(e){var n=e;do{var t=n.alternate;if(e=n.return,0==(8192&n.flags)){if(null!==(t=Pl(t,n,ta)))return void(ea=t)}else{if(null!==(t=Rl(n)))return t.flags&=8191,void(ea=t);null!==e&&(e.flags|=8192,e.subtreeFlags=0,e.deletions=null)}if(null!==(n=n.sibling))return void(ea=n);ea=n=e}while(null!==n);0===la&&(la=5)}function Aa(e){var n=Ln,t=Kl.transition;try{Kl.transition=0,Ln=1,Qa(e,n)}finally{Kl.transition=t,Ln=n}return null}function Qa(e,t){do{Ha()}while(null!==ga);if(0!=(24&Jl))throw Error("Should not already be working.");var r=e.finishedWork,l=e.finishedLanes;if(null===r)return null;if(e.finishedWork=null,e.finishedLanes=0,r===e.current)throw Error("Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.");e.callbackNode=null,e.callbackPriority=0;var a=r.lanes|r.childLanes;if(En(e,a),e===Zl&&(ea=Zl=null,na=0),0==(1040&r.subtreeFlags)&&0==(1040&r.flags)||ha||(ha=!0,n(i[4]).unstable_scheduleCallback(n(i[4]).unstable_NormalPriority,function(){return Ha(),null})),a=0!=(8054&r.flags),0!=(8054&r.subtreeFlags)||a){a=Kl.transition,Kl.transition=0;var u=Ln;Ln=1;var o=Jl;Jl|=16,Gl.current=null,Il(e,r),Wl(e,r),e.current=r,Yl(r),n(i[4]).unstable_requestPaint(),Jl=o,Ln=u,Kl.transition=a}else e.current=r;if(ha&&(ha=!1,ga=e,ma=l),0===(a=e.pendingLanes)&&(pa=null),0!=(1&a)?e===ba?va++:(va=0,ba=e):va=0,yn(r.stateNode),xa(e,n(i[4]).unstable_now()),da)throw da=!1,e=fa,fa=null,e;return 0!=(4&Jl)?null:(0!=(1&ma)&&0!==e.tag&&Ha(),ft(),null)}function Ha(){if(null!==ga){var e=Un(ma),n=Kl.transition,t=Ln;try{if(Kl.transition=0,Ln=16>e?16:e,null===ga)var r=!1;else{if(e=ga,ga=null,ma=0,0!=(24&Jl))throw Error("Cannot flush passive effects while already rendering.");var l=Jl;for(Jl|=16,Cl=e.current;null!==Cl;){var a=Cl,i=a.child;if(0!=(16&Cl.flags)){var u=a.deletions;if(null!==u){for(var o=0;on(i[4]).unstable_now()-sa?Na(e,0):oa|=r),xa(e,t)}function Va(e,n){var t=e.stateNode;null!==t&&t.delete(n),0===(n=0)&&(0==(1&e.mode)?n=1:(n=kn,0==(130023424&(kn<<=1))&&(kn=4194304))),t=ka(),null!==(e=Ta(e,n))&&(Rn(e,n,t),xa(e,t))}function Wa(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ya(e,n,t,r){return new Wa(e,n,t,r)}function qa(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Xa(e){if("function"==typeof e)return qa(e)?1:0;if(void 0!==e&&null!==e){if((e=e.$$typeof)===Qe)return 11;if(e===je)return 14}return 2}function $a(e,n){var t=e.alternate;return null===t?((t=Ya(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=1835008&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Ga(e,n,t,r,l,a){var i=2;if(r=e,"function"==typeof e)qa(e)&&(i=1);else if("string"==typeof e)i=5;else e:switch(e){case Ue:return Ka(t.children,l,a,n);case Ve:i=8,l|=4;break;case Me:i=8,l|=8;break;case Fe:return(e=Ya(12,t,n,2|l)).elementType=Fe,e.lanes=a,e;case He:return(e=Ya(13,t,n,l)).elementType=He,e.lanes=a,e;case Oe:return(e=Ya(19,t,n,l)).elementType=Oe,e.lanes=a,e;case We:return Ja(t,l,a,n);case Ye:return(e=Ya(23,t,n,l)).elementType=Ye,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case De:i=10;break e;case Ae:i=9;break e;case Qe:i=11;break e;case je:i=14;break e;case Be:i=16,r=null;break e}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(null==e?e:typeof e)+".")}return(n=Ya(i,t,n,l)).elementType=e,n.type=r,n.lanes=a,n}function Ka(e,n,t,r){return(e=Ya(7,e,r,n)).lanes=t,e}function Ja(e,n,t,r){return(e=Ya(22,e,r,n)).elementType=We,e.lanes=t,e}function Za(e,n,t){return(e=Ya(6,e,null,n)).lanes=t,e}function ei(e,n,t){return(n=Ya(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function ni(e,n,t){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=t,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Pn(0),this.expirationTimes=Pn(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Pn(0)}function ti(e,n,t){var r=3=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function n(t,n){if(t){if("string"==typeof t)return o(t,n);var u=Object.prototype.toString.call(t).slice(8,-1);return"Object"===u&&t.constructor&&(u=t.constructor.name),"Map"===u||"Set"===u?Array.from(t):"Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u)?o(t,n):void 0}}function o(t,n){(null==n||n>t.length)&&(n=t.length);for(var o=0,u=new Array(n);o|\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,u=/\((\S*)(?::(\d+))(?::(\d+))\)/;function t(t){var o=l.exec(t);if(!o)return null;var c=o[2]&&0===o[2].indexOf('native'),s=o[2]&&0===o[2].indexOf('eval'),v=u.exec(o[2]);return s&&null!=v&&(o[2]=v[1],o[3]=v[2],o[4]=v[3]),{file:c?null:o[2],methodName:o[1]||n,arguments:c?[o[2]]:[],lineNumber:o[3]?+o[3]:null,column:o[4]?+o[4]:null}}var o=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;function c(l){var u=o.exec(l);return u?{file:u[2],methodName:u[1]||n,arguments:[],lineNumber:+u[3],column:u[4]?+u[4]:null}:null}var s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,v=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function f(l){var u=s.exec(l);if(!u)return null;var t=u[3]&&u[3].indexOf(' > eval')>-1,o=v.exec(u[3]);return t&&null!=o&&(u[3]=o[1],u[4]=o[2],u[5]=null),{file:u[3],methodName:u[1]||n,arguments:u[2]?u[2].split(','):[],lineNumber:u[4]?+u[4]:null,column:u[5]?+u[5]:null}}var b=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;function p(l){var u=b.exec(l);return u?{file:u[3],methodName:u[1]||n,arguments:[],lineNumber:+u[4],column:u[5]?+u[5]:null}:null}var x=/^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;function h(l){var u=x.exec(l);return u?{file:u[2],methodName:u[1]||n,arguments:[],lineNumber:+u[3],column:u[4]?+u[4]:null}:null}e.parse=function(n){return n.split('\n').reduce(function(n,l){var u=t(l)||c(l)||f(l)||h(l)||p(l);return u&&n.push(u),n},[])}},64,[]); +__d(function(g,r,_i,a,m,e,d){'use strict';var t=/^ {4}at (.+?)(?: \((native)\)?| \((address at )?(.*?):(\d+):(\d+)\))$/,n=/^ {4}... skipping (\d+) frames$/;function s(s){var i=s.match(t);if(i)return{type:'FRAME',functionName:i[1],location:'native'===i[2]?{type:'NATIVE'}:'address at '===i[3]?{type:'BYTECODE',sourceUrl:i[4],line1Based:Number.parseInt(i[5],10),virtualOffset0Based:Number.parseInt(i[6],10)}:{type:'SOURCE',sourceUrl:i[4],line1Based:Number.parseInt(i[5],10),column1Based:Number.parseInt(i[6],10)}};var u=s.match(n);return u?{type:'SKIPPED',count:Number.parseInt(u[1],10)}:void 0}m.exports=function(t){for(var n=t.split(/\n/),i=[],u=-1,p=0;p-1}m.exports={isNativeFunction:t,hasNativeConstructor:function(n,o){var c=Object.getPrototypeOf(n).constructor;return c.name===o&&t(c)}}},74,[]); +__d(function(g,r,i,a,m,e,d){m.exports=r(d[0])},75,[76]); +__d(function(g,r,_i,a,m,e,d){var t=(function(t){"use strict";var n,o=Object.prototype,i=o.hasOwnProperty,c="function"==typeof Symbol?Symbol:{},u=c.iterator||"@@iterator",h=c.asyncIterator||"@@asyncIterator",f=c.toStringTag||"@@toStringTag";function l(t,n,o){return Object.defineProperty(t,n,{value:o,enumerable:!0,configurable:!0,writable:!0}),t[n]}try{l({},"")}catch(t){l=function(t,n,o){return t[n]=o}}function s(t,n,o,i){var c=n&&n.prototype instanceof b?n:b,u=Object.create(c.prototype),h=new R(i||[]);return u._invoke=F(t,o,h),u}function p(t,n,o){try{return{type:"normal",arg:t.call(n,o)}}catch(t){return{type:"throw",arg:t}}}t.wrap=s;var y="suspendedStart",v="suspendedYield",w="executing",L="completed",x={};function b(){}function E(){}function _(){}var j={};l(j,u,function(){return this});var O=Object.getPrototypeOf,k=O&&O(O(A([])));k&&k!==o&&i.call(k,u)&&(j=k);var G=_.prototype=b.prototype=Object.create(j);function N(t){["next","throw","return"].forEach(function(n){l(t,n,function(t){return this._invoke(n,t)})})}function T(t,n){function o(c,u,h,f){var l=p(t[c],t,u);if("throw"!==l.type){var s=l.arg,y=s.value;return y&&"object"==typeof y&&i.call(y,"__await")?n.resolve(y.__await).then(function(t){o("next",t,h,f)},function(t){o("throw",t,h,f)}):n.resolve(y).then(function(t){s.value=t,h(s)},function(t){return o("throw",t,h,f)})}f(l.arg)}var c;this._invoke=function(t,i){function u(){return new n(function(n,c){o(t,i,n,c)})}return c=c?c.then(u,u):u()}}function F(t,n,o){var i=y;return function(c,u){if(i===w)throw new Error("Generator is already running");if(i===L){if("throw"===c)throw u;return Y()}for(o.method=c,o.arg=u;;){var h=o.delegate;if(h){var f=P(h,o);if(f){if(f===x)continue;return f}}if("next"===o.method)o.sent=o._sent=o.arg;else if("throw"===o.method){if(i===y)throw i=L,o.arg;o.dispatchException(o.arg)}else"return"===o.method&&o.abrupt("return",o.arg);i=w;var l=p(t,n,o);if("normal"===l.type){if(i=o.done?L:v,l.arg===x)continue;return{value:l.arg,done:o.done}}"throw"===l.type&&(i=L,o.method="throw",o.arg=l.arg)}}}function P(t,o){var i=t.iterator[o.method];if(i===n){if(o.delegate=null,"throw"===o.method){if(t.iterator.return&&(o.method="return",o.arg=n,P(t,o),"throw"===o.method))return x;o.method="throw",o.arg=new TypeError("The iterator does not provide a 'throw' method")}return x}var c=p(i,t.iterator,o.arg);if("throw"===c.type)return o.method="throw",o.arg=c.arg,o.delegate=null,x;var u=c.arg;return u?u.done?(o[t.resultName]=u.value,o.next=t.nextLoc,"return"!==o.method&&(o.method="next",o.arg=n),o.delegate=null,x):u:(o.method="throw",o.arg=new TypeError("iterator result is not an object"),o.delegate=null,x)}function S(t){var n={tryLoc:t[0]};1 in t&&(n.catchLoc=t[1]),2 in t&&(n.finallyLoc=t[2],n.afterLoc=t[3]),this.tryEntries.push(n)}function I(t){var n=t.completion||{};n.type="normal",delete n.arg,t.completion=n}function R(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(S,this),this.reset(!0)}function A(t){if(t){var o=t[u];if(o)return o.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var c=-1,h=function o(){for(;++c=0;--u){var h=this.tryEntries[u],f=h.completion;if("root"===h.tryLoc)return c("end");if(h.tryLoc<=this.prev){var l=i.call(h,"catchLoc"),s=i.call(h,"finallyLoc");if(l&&s){if(this.prev=0;--o){var c=this.tryEntries[o];if(c.tryLoc<=this.prev&&i.call(c,"finallyLoc")&&this.prev=0;--n){var o=this.tryEntries[n];if(o.finallyLoc===t)return this.complete(o.completion,o.afterLoc),I(o),x}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc===t){var i=o.completion;if("throw"===i.type){var c=i.arg;I(o)}return c}}throw new Error("illegal catch attempt")},delegateYield:function(t,o,i){return this.delegate={iterator:A(t),resultName:o,nextLoc:i},"next"===this.method&&(this.arg=n),x}},t})("object"==typeof m?m.exports:{});try{regeneratorRuntime=t}catch(n){"object"==typeof globalThis?globalThis.regeneratorRuntime=t:Function("r","regeneratorRuntime = r")(t)}},76,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var l,n,t=!0===(null==(l=g.HermesInternal)?void 0:null==l.hasPromise?void 0:l.hasPromise())&&!0===(null==(n=g.HermesInternal)?void 0:null==n.useEngineQueue?void 0:n.useEngineQueue()),u=r(d[0]).isNativeFunction(Promise)||t;if(!g.RN$Bridgeless){var o=function(l){r(d[1]).polyfillGlobal(l,function(){return r(d[2])[l]})};o('setTimeout'),o('clearTimeout'),o('setInterval'),o('clearInterval'),o('requestAnimationFrame'),o('cancelAnimationFrame'),o('requestIdleCallback'),o('cancelIdleCallback')}u?(r(d[1]).polyfillGlobal('setImmediate',function(){return r(d[3]).setImmediate}),r(d[1]).polyfillGlobal('clearImmediate',function(){return r(d[3]).clearImmediate})):g.RN$Bridgeless||(r(d[1]).polyfillGlobal('setImmediate',function(){return r(d[2]).queueReactNativeMicrotask}),r(d[1]).polyfillGlobal('clearImmediate',function(){return r(d[2]).clearReactNativeMicrotask})),t?r(d[1]).polyfillGlobal('queueMicrotask',function(){var l;return null==(l=g.HermesInternal)?void 0:l.enqueueJob}):r(d[1]).polyfillGlobal('queueMicrotask',function(){return r(d[4]).default})},77,[74,67,78,80,81]); +__d(function(g,r,_i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=16.666666666666668,n=[],i=[],l=[],o=[],c=[],u={},f=1,s=null,v=!1;function h(){var e=l.indexOf(null);return-1===e&&(e=l.length),e}function T(e,t){var o=f++,c=h();return l[c]=o,n[c]=e,i[c]=t,o}function k(e,o,c){e>f&&console.warn('Tried to call timer with ID %s but no such timer exists.',e);var u=l.indexOf(e);if(-1!==u){var v=i[u],h=n[u];if(h&&v){'setInterval'!==v&&p(u);try{'setTimeout'===v||'setInterval'===v||'queueReactNativeMicrotask'===v?h():'requestAnimationFrame'===v?h(g.performance.now()):'requestIdleCallback'===v?h({timeRemaining:function(){return Math.max(0,t-(g.performance.now()-o))},didTimeout:!!c}):console.error('Tried to call a callback with invalid type: '+v)}catch(e){s?s.push(e):s=[e]}}else console.error('No callback found for timerID '+e)}}function w(){if(0===o.length)return!1;var e=o;o=[];for(var t=0;t0}function p(e){l[e]=null,n[e]=null,i[e]=null}function N(e){if(null!=e){var t=l.indexOf(e);if(-1!==t){var n=i[t];p(t),'queueReactNativeMicrotask'!==n&&'requestIdleCallback'!==n&&M(e)}}}var b,I={setTimeout:function(e,t){for(var n=arguments.length,i=new Array(n>2?n-2:0),l=2;l2?n-2:0),l=2;l1?t-1:0),i=1;i-1&&(c.splice(e,1),k(i,g.performance.now(),!0)),delete u[i],0===c.length&&R(!1)},n);u[i]=l}return i},cancelIdleCallback:function(e){N(e);var t=c.indexOf(e);-1!==t&&c.splice(t,1);var n=u[e];n&&(I.clearTimeout(n),delete u[e]),0===c.length&&R(!1)},clearTimeout:function(e){N(e)},clearInterval:function(e){N(e)},clearReactNativeMicrotask:function(e){N(e);var t=o.indexOf(e);-1!==t&&o.splice(t,1)},cancelAnimationFrame:function(e){N(e)},callTimers:function(e){r(d[2])(0!==e.length,'Cannot call `callTimers` with an empty list of IDs.'),s=null;for(var t=0;t1)for(var i=1;i0){var n=c;c=[];for(var i=0;i1?u-1:0),c=1;c=0,loaded:t,total:s})}},{key:"__didCompleteResponse",value:function(e,t,s){e===this._requestId&&(t&&(''!==this._responseType&&'text'!==this._responseType||(this._response=t),this._hasError=!0,s&&(this._timedOut=!0)),this._clearSubscriptions(),this._requestId=null,this.setReadyState(this.DONE),t?E._interceptor&&E._interceptor.loadingFailed(e,t):E._interceptor&&E._interceptor.loadingFinished(e,this._response.length))}},{key:"_clearSubscriptions",value:function(){(this._subscriptions||[]).forEach(function(e){e&&e.remove()}),this._subscriptions=[]}},{key:"getAllResponseHeaders",value:function(){if(!this.responseHeaders)return null;var e=this.responseHeaders||{};return Object.keys(e).map(function(t){return t+': '+e[t]}).join('\r\n')}},{key:"getResponseHeader",value:function(e){var t=this._lowerCaseResponseHeaders[e.toLowerCase()];return void 0!==t?t:null}},{key:"setRequestHeader",value:function(e,t){if(this.readyState!==this.OPENED)throw new Error('Request has not been opened');this._headers[e.toLowerCase()]=String(t)}},{key:"setTrackingName",value:function(e){return this._trackingName=e,this}},{key:"setPerformanceLogger",value:function(e){return this._performanceLogger=e,this}},{key:"open",value:function(e,t,s){if(this.readyState!==this.UNSENT)throw new Error('Cannot open, already sending');if(void 0!==s&&!s)throw new Error('Synchronous http requests are not supported');if(!t)throw new Error('Cannot load an empty url');this._method=e.toUpperCase(),this._url=t,this._aborted=!1,this.setReadyState(this.OPENED)}},{key:"send",value:function(t){var s=this;if(this.readyState!==this.OPENED)throw new Error('Request has not been opened');if(this._sent)throw new Error('Request has already been sent');this._sent=!0;var n=this._incrementalEvents||!!this.onreadystatechange||!!this.onprogress;this._subscriptions.push(r(d[13]).addListener('didSendNetworkData',function(t){return s.__didUploadProgress.apply(s,(0,e.default)(t))})),this._subscriptions.push(r(d[13]).addListener('didReceiveNetworkResponse',function(t){return s.__didReceiveResponse.apply(s,(0,e.default)(t))})),this._subscriptions.push(r(d[13]).addListener('didReceiveNetworkData',function(t){return s.__didReceiveData.apply(s,(0,e.default)(t))})),this._subscriptions.push(r(d[13]).addListener('didReceiveNetworkIncrementalData',function(t){return s.__didReceiveIncrementalData.apply(s,(0,e.default)(t))})),this._subscriptions.push(r(d[13]).addListener('didReceiveNetworkDataProgress',function(t){return s.__didReceiveDataProgress.apply(s,(0,e.default)(t))})),this._subscriptions.push(r(d[13]).addListener('didCompleteNetworkResponse',function(t){return s.__didCompleteResponse.apply(s,(0,e.default)(t))}));var o='text';'arraybuffer'===this._responseType&&(o='base64'),'blob'===this._responseType&&(o='blob');var h;h='unknown'!==s._trackingName?s._trackingName:s._url,s._perfKey='network_XMLHttpRequest_'+String(h),s._performanceLogger.startTimespan(s._perfKey),r(d[11])(s._method,'XMLHttpRequest method needs to be defined (%s).',h),r(d[11])(s._url,'XMLHttpRequest URL needs to be defined (%s).',h),r(d[13]).sendRequest(s._method,s._trackingName,s._url,s._headers,t,o,n,s.timeout,s.__didCreateRequest.bind(s),s.withCredentials)}},{key:"abort",value:function(){this._aborted=!0,this._requestId&&r(d[13]).abortRequest(this._requestId),this.readyState===this.UNSENT||this.readyState===this.OPENED&&!this._sent||this.readyState===this.DONE||(this._reset(),this.setReadyState(this.DONE)),this._reset()}},{key:"setResponseHeaders",value:function(e){this.responseHeaders=e||null;var t=e||{};this._lowerCaseResponseHeaders=Object.keys(t).reduce(function(e,s){return e[s.toLowerCase()]=t[s],e},{})}},{key:"setReadyState",value:function(e){this.readyState=e,this.dispatchEvent({type:'readystatechange'}),e===this.DONE&&(this._aborted?this.dispatchEvent({type:'abort'}):this._hasError?this._timedOut?this.dispatchEvent({type:'timeout'}):this.dispatchEvent({type:'error'}):this.dispatchEvent({type:'load'}),this.dispatchEvent({type:'loadend'}))}},{key:"addEventListener",value:function(e,s){'readystatechange'!==e&&'progress'!==e||(this._incrementalEvents=!0),(0,t.default)((0,u.default)(E.prototype),"addEventListener",this).call(this,e,s)}}],[{key:"setInterceptor",value:function(e){E._interceptor=e}}]),E})(r(d[9]).apply(void 0,(0,e.default)(b)));N.UNSENT=l,N.OPENED=_,N.HEADERS_RECEIVED=f,N.LOADING=y,N.DONE=v,N._interceptor=null,m.exports=N},83,[3,35,84,8,7,10,12,15,86,90,91,18,93,94]); +__d(function(g,r,i,a,m,e,d){function t(){return"undefined"!=typeof Reflect&&Reflect.get?(m.exports=t=Reflect.get,m.exports.__esModule=!0,m.exports.default=m.exports):(m.exports=t=function(t,o,p){var s=r(d[0])(t,o);if(s){var l=Object.getOwnPropertyDescriptor(s,o);return l.get?l.get.call(arguments.length<3?t:p):l.value}},m.exports.__esModule=!0,m.exports.default=m.exports),t.apply(this,arguments)}m.exports=t,m.exports.__esModule=!0,m.exports.default=m.exports},84,[85]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t,o){for(;!Object.prototype.hasOwnProperty.call(t,o)&&null!==(t=r(d[0])(t)););return t},m.exports.__esModule=!0,m.exports.default=m.exports},85,[15]); +__d(function(g,_r,i,a,m,e,d){var t=_r(d[0])(_r(d[1])),l=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4])),n=_r(d[0])(_r(d[5]));var u=(function(){function u(){(0,l.default)(this,u)}return(0,r.default)(u,null,[{key:"createFromParts",value:function(t,l){(0,n.default)(o.default,'NativeBlobModule is available.');var r='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(t){var l=16*Math.random()|0;return('x'==t?l:3&l|8).toString(16)}),f=t.map(function(t){if(t instanceof ArrayBuffer||g.ArrayBufferView&&t instanceof g.ArrayBufferView)throw new Error("Creating blobs from 'ArrayBuffer' and 'ArrayBufferView' are not supported");return t instanceof _r(d[6])?{data:t.data,type:'blob'}:{data:String(t),type:'string'}}),c=f.reduce(function(t,l){return'string'===l.type?t+g.unescape(encodeURI(l.data)).length:t+l.data.size},0);return o.default.createFromParts(f,r),u.createFromOptions({blobId:r,offset:0,size:c,type:l?l.type:'',lastModified:l?l.lastModified:Date.now()})}},{key:"createFromOptions",value:function(l){return _r(d[7]).register(l.blobId),(0,t.default)(Object.create(_r(d[6]).prototype),{data:null==l.__collector?(0,t.default)({},l,{__collector:(r=l.blobId,null==g.__blobCollectorProvider?null:g.__blobCollectorProvider(r))}):l});var r}},{key:"release",value:function(t){(0,n.default)(o.default,'NativeBlobModule is available.'),_r(d[7]).unregister(t),_r(d[7]).has(t)||o.default.release(t)}},{key:"addNetworkingHandler",value:function(){(0,n.default)(o.default,'NativeBlobModule is available.'),o.default.addNetworkingHandler()}},{key:"addWebSocketHandler",value:function(t){(0,n.default)(o.default,'NativeBlobModule is available.'),o.default.addWebSocketHandler(t)}},{key:"removeWebSocketHandler",value:function(t){(0,n.default)(o.default,'NativeBlobModule is available.'),o.default.removeWebSocketHandler(t)}},{key:"sendOverSocket",value:function(t,l){(0,n.default)(o.default,'NativeBlobModule is available.'),o.default.sendOverSocket(t.data,l)}}]),u})();u.isAvailable=!!o.default,m.exports=u},86,[3,29,7,8,87,18,88,89]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var l={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in n)if("default"!==f&&Object.prototype.hasOwnProperty.call(n,f)){var s=c?Object.getOwnPropertyDescriptor(n,f):null;s&&(s.get||s.set)?Object.defineProperty(l,f,s):l[f]=n[f]}l.default=n,u&&u.set(n,l);return l})(r(d[0])).get('BlobModule'),o=null,u=null;null!=n&&(u={getConstants:function(){return null==o&&(o=n.getConstants()),o},addNetworkingHandler:function(){n.addNetworkingHandler()},addWebSocketHandler:function(t){n.addWebSocketHandler(t)},removeWebSocketHandler:function(t){n.removeWebSocketHandler(t)},sendOverSocket:function(t,o){n.sendOverSocket(t,o)},createFromParts:function(t,o){n.createFromParts(t,o)},release:function(t){n.release(t)}});var l=u;e.default=l},87,[21]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=(function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],s=arguments.length>1?arguments[1]:void 0;r(d[0])(this,t);var o=r(d[1]);this.data=o.createFromParts(n,s).data}return r(d[2])(t,[{key:"data",get:function(){if(!this._data)throw new Error('Blob has been closed and is no longer available');return this._data},set:function(t){this._data=t}},{key:"slice",value:function(t,n){var s=r(d[1]),o=this.data,u=o.offset,l=o.size;return'number'==typeof t&&(t>l&&(t=l),u+=t,l-=t,'number'==typeof n&&(n<0&&(n=this.size+n),l=n-t)),s.createFromOptions({blobId:this.data.blobId,offset:u,size:l})}},{key:"close",value:function(){r(d[1]).release(this.data.blobId),this.data=null}},{key:"size",get:function(){return this.data.size}},{key:"type",get:function(){return this.data.type||''}}]),t})();m.exports=t},88,[7,86,8]); +__d(function(g,r,i,a,m,e,d){var n={};m.exports={register:function(t){n[t]?n[t]++:n[t]=1},unregister:function(t){n[t]&&(n[t]--,n[t]<=0&&delete n[t])},has:function(t){return n[t]&&n[t]>0}}},89,[]); +__d(function(g,r,_i,a,m,e,d){'use strict';Object.defineProperty(e,'__esModule',{value:!0});var t=new WeakMap,n=new WeakMap;function o(n){var o=t.get(n);return console.assert(null!=o,"'this' is expected an Event object, but got",n),o}function i(t){null==t.passiveListener?t.event.cancelable&&(t.canceled=!0,"function"==typeof t.event.preventDefault&&t.event.preventDefault()):"undefined"!=typeof console&&"function"==typeof console.error&&console.error("Unable to preventDefault inside passive event listener invocation.",t.passiveListener)}function l(n,o){t.set(this,{eventTarget:n,event:o,eventPhase:2,currentTarget:n,canceled:!1,stopped:!1,immediateStopped:!1,passiveListener:null,timeStamp:o.timeStamp||Date.now()}),Object.defineProperty(this,"isTrusted",{value:!1,enumerable:!0});for(var i=Object.keys(o),l=0;l0){for(var t=new Array(arguments.length),n=0;n1&&void 0!==arguments[1]?arguments[1]:l(),n=arguments.length>2?arguments[2]:void 0;this._closed||null==this._points[t]&&(this._points[t]=s,n&&(this._pointExtras[t]=n))}},{key:"removeExtra",value:function(t){var s=this._extras[t];return delete this._extras[t],s}},{key:"setExtra",value:function(t,s){this._closed||this._extras.hasOwnProperty(t)||(this._extras[t]=s)}},{key:"startTimespan",value:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l(),n=arguments.length>2?arguments[2]:void 0;this._closed||this._timespans[t]||(this._timespans[t]={startTime:s,startExtras:n},u[t]=r(d[4]).beginAsyncEvent(t))}},{key:"stopTimespan",value:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l(),n=arguments.length>2?arguments[2]:void 0;if(!this._closed){var o=this._timespans[t];o&&null!=o.startTime&&null==o.endTime&&(o.endExtras=n,o.endTime=s,o.totalTime=o.endTime-(o.startTime||0),null!=u[t]&&(r(d[4]).endAsyncEvent(t,u[t]),delete u[t]))}}}]),t})()},92,[3,29,7,8,32]); +__d(function(g,r,_i,a,m,e,d){'use strict';e.byteLength=function(t){var n=i(t),o=n[0],h=n[1];return 3*(o+h)/4-h},e.toByteArray=function(t){var h,u,c=i(t),A=c[0],C=c[1],y=new o(f(t,A,C)),s=0,v=C>0?A-4:A;for(u=0;u>16&255,y[s++]=h>>8&255,y[s++]=255&h;2===C&&(h=n[t.charCodeAt(u)]<<2|n[t.charCodeAt(u+1)]>>4,y[s++]=255&h);1===C&&(h=n[t.charCodeAt(u)]<<10|n[t.charCodeAt(u+1)]<<4|n[t.charCodeAt(u+2)]>>2,y[s++]=h>>8&255,y[s++]=255&h);return y},e.fromByteArray=function(n){for(var o,h=n.length,u=h%3,c=[],i=0,f=h-u;if?f:i+16383));1===u?(o=n[h-1],c.push(t[o>>2]+t[o<<4&63]+'==')):2===u&&(o=(n[h-2]<<8)+n[h-1],c.push(t[o>>10]+t[o>>4&63]+t[o<<2&63]+'='));return c.join('')};for(var t=[],n=[],o='undefined'!=typeof Uint8Array?Uint8Array:Array,h='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',u=0,c=h.length;u0)throw new Error('Invalid string. Length must be a multiple of 4');var o=t.indexOf('=');return-1===o&&(o=n),[o,o===n?0:4-o%4]}function f(t,n,o){return 3*(n+o)/4-o}function A(n,o,h){for(var u,c,i=[],f=o;f>18&63]+t[c>>12&63]+t[c>>6&63]+t[63&c]);return i.join('')}n['-'.charCodeAt(0)]=62,n['_'.charCodeAt(0)]=63},93,[]); +__d(function(g,r,i,a,m,_e,d){var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),n=r(d[0])(r(d[4])),f=r(d[0])(r(d[5])),o=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),c=r(d[0])(r(d[8])),s=r(d[0])(r(d[9])),v=r(d[0])(r(d[10]));function h(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}function p(t){var e=[];for(var u in t)e.push([u,t[u]]);return e}var y=1;var R=(function(l){(0,n.default)(D,l);var R,k,q=(R=D,k=h(),function(){var t,e=(0,o.default)(R);if(k){var u=(0,o.default)(this).constructor;t=Reflect.construct(e,arguments,u)}else t=e.apply(this,arguments);return(0,f.default)(this,t)});function D(){return(0,e.default)(this,D),q.call(this,'ios'!==v.default.OS?null:c.default)}return(0,u.default)(D,[{key:"sendRequest",value:function(e,u,n,f,o,l,v,h,R,k){var q=(0,s.default)(o);q&&q.formData&&(q.formData=q.formData.map(function(e){return(0,t.default)({},e,{headers:p(e.headers)})}));var D=y++;c.default.sendRequest(e,n,D,p(f),(0,t.default)({},q,{trackingName:u}),l,v,h,k),R(D)}},{key:"abortRequest",value:function(t){c.default.abortRequest(t)}},{key:"clearCookies",value:function(t){c.default.clearCookies(t)}}]),D})(l.default);m.exports=new R},94,[3,29,7,8,10,12,15,95,96,97,19]); +__d(function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),s=(function(){function s(n){(0,t.default)(this,s),'ios'===l.default.OS&&(0,o.default)(null!=n,'`new NativeEventEmitter()` requires a non-null argument.');var u=!!n&&'function'==typeof n.addListener,v=!!n&&'function'==typeof n.removeListeners;n&&u&&v?this._nativeModule=n:null!=n&&(u||console.warn('`new NativeEventEmitter()` was called with a non-null argument without the required `addListener` method.'),v||console.warn('`new NativeEventEmitter()` was called with a non-null argument without the required `removeListeners` method.'))}return(0,n.default)(s,[{key:"addListener",value:function(t,n,l){var o,s=this;null==(o=this._nativeModule)||o.addListener(t);var v=u.default.addListener(t,n,l);return{remove:function(){var t;null!=v&&(null==(t=s._nativeModule)||t.removeListeners(1),v.remove(),v=null)}}}},{key:"removeListener",value:function(t,n){var l;null==(l=this._nativeModule)||l.removeListeners(1),u.default.removeListener(t,n)}},{key:"emit",value:function(t){for(var n=arguments.length,l=new Array(n>1?n-1:0),o=1;o-1};function s(t){if('string'!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(t)||''===t)throw new TypeError('Invalid character in header field name: "'+t+'"');return t.toLowerCase()}function h(t){return'string'!=typeof t&&(t=String(t)),t}function f(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return o.iterable&&(e[Symbol.iterator]=function(){return e}),e}function u(t){this.map={},t instanceof u?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 c(t){if(t.bodyUsed)return Promise.reject(new TypeError('Already read'));t.bodyUsed=!0}function y(t){return new Promise(function(e,o){t.onload=function(){e(t.result)},t.onerror=function(){o(t.error)}})}function l(t){var e=new FileReader,o=y(e);return e.readAsArrayBuffer(t),o}function p(t){for(var e=new Uint8Array(t),o=new Array(e.length),n=0;n-1?n:o),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,('GET'===this.method||'HEAD'===this.method)&&i)throw new TypeError('Body not allowed for GET or HEAD requests');if(this._initBody(i),!('GET'!==this.method&&'HEAD'!==this.method||'no-store'!==e.cache&&'no-cache'!==e.cache)){var s=/([?&])_=[^&]*/;if(s.test(this.url))this.url=this.url.replace(s,'$1_='+(new Date).getTime());else{this.url+=(/\?/.test(this.url)?'&':'?')+'_='+(new Date).getTime()}}}function E(t){var e=new FormData;return t.trim().split('&').forEach(function(t){if(t){var o=t.split('='),n=o.shift().replace(/\+/g,' '),i=o.join('=').replace(/\+/g,' ');e.append(decodeURIComponent(n),decodeURIComponent(i))}}),e}function T(t,e){if(!(this instanceof T))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');e||(e={}),this.type='default',this.status=void 0===e.status?200:e.status,this.ok=this.status>=200&&this.status<300,this.statusText=void 0===e.statusText?'':''+e.statusText,this.headers=new u(e.headers),this.url=e.url||'',this._initBody(t)}_.prototype.clone=function(){return new _(this,{body:this._bodyInit})},w.call(_.prototype),w.call(T.prototype),T.prototype.clone=function(){return new T(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new u(this.headers),url:this.url})},T.error=function(){var t=new T(null,{status:0,statusText:''});return t.type='error',t};var A=[301,302,303,307,308];T.redirect=function(t,e){if(-1===A.indexOf(e))throw new RangeError('Invalid status code');return new T(null,{status:e,headers:{location:t}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(t,e){this.message=t,this.name=e;var o=Error(t);this.stack=o.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function B(n,i){return new Promise(function(s,f){var c=new _(n,i);if(c.signal&&c.signal.aborted)return f(new t.DOMException('Aborted','AbortError'));var y=new XMLHttpRequest;function l(){y.abort()}y.onload=function(){var t,e,o={status:y.status,statusText:y.statusText,headers:(t=y.getAllResponseHeaders()||'',e=new u,t.replace(/\r?\n[\t ]+/g,' ').split('\r').map(function(t){return 0===t.indexOf('\n')?t.substr(1,t.length):t}).forEach(function(t){var o=t.split(':'),n=o.shift().trim();if(n){var i=o.join(':').trim();e.append(n,i)}}),e)};o.url='responseURL'in y?y.responseURL:o.headers.get('X-Request-URL');var n='response'in y?y.response:y.responseText;setTimeout(function(){s(new T(n,o))},0)},y.onerror=function(){setTimeout(function(){f(new TypeError('Network request failed'))},0)},y.ontimeout=function(){setTimeout(function(){f(new TypeError('Network request failed'))},0)},y.onabort=function(){setTimeout(function(){f(new t.DOMException('Aborted','AbortError'))},0)},y.open(c.method,(function(t){try{return''===t&&e.location.href?e.location.href:t}catch(e){return t}})(c.url),!0),'include'===c.credentials?y.withCredentials=!0:'omit'===c.credentials&&(y.withCredentials=!1),'responseType'in y&&(o.blob?y.responseType='blob':o.arrayBuffer&&c.headers.get('Content-Type')&&-1!==c.headers.get('Content-Type').indexOf('application/octet-stream')&&(y.responseType='arraybuffer')),!i||'object'!=typeof i.headers||i.headers instanceof u?c.headers.forEach(function(t,e){y.setRequestHeader(e,t)}):Object.getOwnPropertyNames(i.headers).forEach(function(t){y.setRequestHeader(t,h(i.headers[t]))}),c.signal&&(c.signal.addEventListener('abort',l),y.onreadystatechange=function(){4===y.readyState&&c.signal.removeEventListener('abort',l)}),y.send(void 0===c._bodyInit?null:c._bodyInit)})}B.polyfill=!0,e.fetch||(e.fetch=B,e.Headers=u,e.Request=_,e.Response=T),t.Headers=u,t.Request=_,t.Response=T,t.fetch=B,Object.defineProperty(t,'__esModule',{value:!0})},'object'==typeof _e&&void 0!==m?e(_e):'function'==typeof define&&define.amd?define(['exports'],e):e(t.WHATWGFetch={})},101,[]); +__d(function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),u=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),f=r(d[0])(r(d[9])),h=r(d[0])(r(d[10])),y=r(d[0])(r(d[11])),b=r(d[0])(r(d[12])),p=r(d[0])(r(d[13])),v=r(d[0])(r(d[14])),_=r(d[0])(r(d[15])),E=r(d[0])(r(d[16])),k=["headers"];function S(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var I=0,N=1,O=2,w=3,C=0,L=(function(_){(0,s.default)(R,_);var L,T,A=(L=R,T=S(),function(){var e,t=(0,u.default)(L);if(T){var n=(0,u.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,o.default)(this,e)});function R(n,s,o){var u;(0,t.default)(this,R),(u=A.call(this)).CONNECTING=I,u.OPEN=N,u.CLOSING=O,u.CLOSED=w,u.readyState=I,u.url=n,'string'==typeof s&&(s=[s]);var c=o||{},l=c.headers,h=void 0===l?{}:l,p=(0,e.default)(c,k);return p&&'string'==typeof p.origin&&(console.warn('Specifying `origin` as a WebSocket connection option is deprecated. Include it under `headers` instead.'),h.origin=p.origin,delete p.origin),Object.keys(p).length>0&&console.warn('Unrecognized WebSocket connection option(s) `'+Object.keys(p).join('`, `')+"`. Did you mean to put these under `headers`?"),Array.isArray(s)||(s=null),u._eventEmitter=new f.default('ios'!==y.default.OS?null:b.default),u._socketId=C++,u._registerEvents(),b.default.connect(n,s,{headers:h},u._socketId),u}return(0,n.default)(R,[{key:"binaryType",get:function(){return this._binaryType},set:function(e){if('blob'!==e&&'arraybuffer'!==e)throw new Error("binaryType must be either 'blob' or 'arraybuffer'");'blob'!==this._binaryType&&'blob'!==e||((0,E.default)(l.default.isAvailable,'Native module BlobModule is required for blob support'),'blob'===e?l.default.addWebSocketHandler(this._socketId):l.default.removeWebSocketHandler(this._socketId)),this._binaryType=e}},{key:"close",value:function(e,t){this.readyState!==this.CLOSING&&this.readyState!==this.CLOSED&&(this.readyState=this.CLOSING,this._close(e,t))}},{key:"send",value:function(e){if(this.readyState===this.CONNECTING)throw new Error('INVALID_STATE_ERR');if(e instanceof c.default)return(0,E.default)(l.default.isAvailable,'Native module BlobModule is required for blob support'),void l.default.sendOverSocket(e,this._socketId);if('string'!=typeof e){if(!(e instanceof ArrayBuffer||ArrayBuffer.isView(e)))throw new Error('Unsupported data type');b.default.sendBinary((0,h.default)(e),this._socketId)}else b.default.send(e,this._socketId)}},{key:"ping",value:function(){if(this.readyState===this.CONNECTING)throw new Error('INVALID_STATE_ERR');b.default.ping(this._socketId)}},{key:"_close",value:function(e,t){var n='number'==typeof e?e:1e3,s='string'==typeof t?t:'';b.default.close(n,s,this._socketId),l.default.isAvailable&&'blob'===this._binaryType&&l.default.removeWebSocketHandler(this._socketId)}},{key:"_unregisterEvents",value:function(){this._subscriptions.forEach(function(e){return e.remove()}),this._subscriptions=[]}},{key:"_registerEvents",value:function(){var e=this;this._subscriptions=[this._eventEmitter.addListener('websocketMessage',function(t){if(t.id===e._socketId){var n=t.data;switch(t.type){case'binary':n=v.default.toByteArray(t.data).buffer;break;case'blob':n=l.default.createFromOptions(t.data)}e.dispatchEvent(new p.default('message',{data:n}))}}),this._eventEmitter.addListener('websocketOpen',function(t){t.id===e._socketId&&(e.readyState=e.OPEN,e.protocol=t.protocol,e.dispatchEvent(new p.default('open')))}),this._eventEmitter.addListener('websocketClosed',function(t){t.id===e._socketId&&(e.readyState=e.CLOSED,e.dispatchEvent(new p.default('close',{code:t.code,reason:t.reason})),e._unregisterEvents(),e.close())}),this._eventEmitter.addListener('websocketFailed',function(t){t.id===e._socketId&&(e.readyState=e.CLOSED,e.dispatchEvent(new p.default('error',{message:t.message})),e.dispatchEvent(new p.default('close',{message:t.message})),e._unregisterEvents(),e.close())})]}}]),R})(_.default.apply(void 0,['close','error','message','open']));L.CONNECTING=I,L.OPEN=N,L.CLOSING=O,L.CLOSED=w,m.exports=L},102,[3,103,7,8,10,12,15,88,86,95,99,19,105,106,93,90,18]); +__d(function(g,r,_i,a,m,e,d){m.exports=function(t,o){if(null==t)return{};var n,l,p=r(d[0])(t,o);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(p[n]=t[n])}return p},m.exports.__esModule=!0,m.exports.default=m.exports},103,[104]); +__d(function(g,r,_i,a,m,e,d){m.exports=function(t,n){if(null==t)return{};var o,u,f={},s=Object.keys(t);for(u=0;u=0||(f[o]=t[o]);return f},m.exports.__esModule=!0,m.exports.default=m.exports},104,[]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).getEnforcing('WebSocketModule');e.default=n},105,[21]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])(function t(s,n){r(d[1])(this,t),this.type=s.toString(),r(d[2])(this,n)});m.exports=t},106,[8,7,29]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(o,e);var n,u,c=(n=o,u=t(),function(){var t,e=r(d[0])(n);if(u){var c=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,c)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function o(t,e,n){var u;return r(d[3])(this,o),r(d[4])(null!=t&&null!=e,'Failed to construct `File`: Must pass both `parts` and `name` arguments.'),(u=c.call(this,t,n)).data.name=e,u}return r(d[5])(o,[{key:"name",get:function(){return r(d[4])(null!=this.data.name,'Files must have a name set.'),this.data.name}},{key:"lastModified",get:function(){return this.data.lastModified||0}}]),o})(r(d[6]));m.exports=e},107,[15,12,10,7,18,8,88]); +__d(function(g,r,i,a,m,_e,d){var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),s=r(d[0])(r(d[5])),u=r(d[0])(r(d[6]));function l(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var c=0,f=1,h=2,y=(function(y){(0,n.default)(b,y);var _,p,v=(_=b,p=l(),function(){var t,e=(0,s.default)(_);if(p){var n=(0,s.default)(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return(0,o.default)(this,t)});function b(){var e;return(0,t.default)(this,b),(e=v.call(this)).EMPTY=c,e.LOADING=f,e.DONE=h,e._aborted=!1,e._subscriptions=[],e._reset(),e}return(0,e.default)(b,[{key:"_reset",value:function(){this._readyState=c,this._error=null,this._result=null}},{key:"_clearSubscriptions",value:function(){this._subscriptions.forEach(function(t){return t.remove()}),this._subscriptions=[]}},{key:"_setReadyState",value:function(t){this._readyState=t,this.dispatchEvent({type:'readystatechange'}),t===h&&(this._aborted?this.dispatchEvent({type:'abort'}):this._error?this.dispatchEvent({type:'error'}):this.dispatchEvent({type:'load'}),this.dispatchEvent({type:'loadend'}))}},{key:"readAsArrayBuffer",value:function(){throw new Error('FileReader.readAsArrayBuffer is not implemented')}},{key:"readAsDataURL",value:function(t){var e=this;if(this._aborted=!1,null==t)throw new TypeError("Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'");u.default.readAsDataURL(t.data).then(function(t){e._aborted||(e._result=t,e._setReadyState(h))},function(t){e._aborted||(e._error=t,e._setReadyState(h))})}},{key:"readAsText",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'UTF-8';if(this._aborted=!1,null==t)throw new TypeError("Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'");u.default.readAsText(t.data,n).then(function(t){e._aborted||(e._result=t,e._setReadyState(h))},function(t){e._aborted||(e._error=t,e._setReadyState(h))})}},{key:"abort",value:function(){this._aborted=!0,this._readyState!==c&&this._readyState!==h&&(this._reset(),this._setReadyState(h)),this._reset()}},{key:"readyState",get:function(){return this._readyState}},{key:"error",get:function(){return this._error}},{key:"result",get:function(){return this._result}}]),b})(r(d[7]).apply(void 0,['abort','error','load','loadstart','loadend','progress']));y.EMPTY=c,y.LOADING=f,y.DONE=h,m.exports=y},108,[3,7,8,10,12,15,109,90]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).getEnforcing('FileReaderModule');e.default=n},109,[21]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.URLSearchParams=e.URL=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),s=null;if(o.default&&'string'==typeof o.default.getConstants().BLOB_URI_SCHEME){var u=o.default.getConstants();s=u.BLOB_URI_SCHEME+':','string'==typeof u.BLOB_URI_HOST&&(s+="//"+u.BLOB_URI_HOST+"/")}var h=(function(o){function s(n){var o=this;(0,t.default)(this,s),this._searchParams=[],'object'==typeof n&&Object.keys(n).forEach(function(t){return o.append(t,n[t])})}return(0,n.default)(s,[{key:"append",value:function(t,n){this._searchParams.push([t,n])}},{key:"delete",value:function(t){throw new Error('URLSearchParams.delete is not implemented')}},{key:"get",value:function(t){throw new Error('URLSearchParams.get is not implemented')}},{key:"getAll",value:function(t){throw new Error('URLSearchParams.getAll is not implemented')}},{key:"has",value:function(t){throw new Error('URLSearchParams.has is not implemented')}},{key:"set",value:function(t,n){throw new Error('URLSearchParams.set is not implemented')}},{key:"sort",value:function(){throw new Error('URLSearchParams.sort is not implemented')}},{key:o,value:function(){return this._searchParams[Symbol.iterator]()}},{key:"toString",value:function(){if(0===this._searchParams.length)return'';var t=this._searchParams.length-1;return this._searchParams.reduce(function(n,o,s){return n+o.join('=')+(s===t?'':'&')},'')}}]),s})(Symbol.iterator);function f(t){return/^(?:(?:(?:https?|ftp):)?\/\/)(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)*(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/.test(t)}e.URLSearchParams=h;var l=(function(){function o(n,s){(0,t.default)(this,o),this._searchParamsInstance=null;var u=null;if(!s||f(n))this._url=n,this._url.endsWith('/')||(this._url+='/');else{if('string'==typeof s){if(!f(u=s))throw new TypeError("Invalid base URL: "+u)}else'object'==typeof s&&(u=s.toString());u.endsWith('/')&&(u=u.slice(0,u.length-1)),n.startsWith('/')||(n="/"+n),u.endsWith(n)&&(n=''),this._url=""+u+n}}return(0,n.default)(o,[{key:"hash",get:function(){throw new Error('URL.hash is not implemented')}},{key:"host",get:function(){throw new Error('URL.host is not implemented')}},{key:"hostname",get:function(){throw new Error('URL.hostname is not implemented')}},{key:"href",get:function(){return this.toString()}},{key:"origin",get:function(){throw new Error('URL.origin is not implemented')}},{key:"password",get:function(){throw new Error('URL.password is not implemented')}},{key:"pathname",get:function(){throw new Error('URL.pathname not implemented')}},{key:"port",get:function(){throw new Error('URL.port is not implemented')}},{key:"protocol",get:function(){throw new Error('URL.protocol is not implemented')}},{key:"search",get:function(){throw new Error('URL.search is not implemented')}},{key:"searchParams",get:function(){return null==this._searchParamsInstance&&(this._searchParamsInstance=new h),this._searchParamsInstance}},{key:"toJSON",value:function(){return this.toString()}},{key:"toString",value:function(){if(null===this._searchParamsInstance)return this._url;var t=this._url.indexOf('?')>-1?'&':'?';return this._url+t+this._searchParamsInstance.toString()}},{key:"username",get:function(){throw new Error('URL.username is not implemented')}}],[{key:"createObjectURL",value:function(t){if(null===s)throw new Error('Cannot create URL for blob!');return""+s+t.data.blobId+"?offset="+t.data.offset+"&size="+t.size}},{key:"revokeObjectURL",value:function(t){}}]),o})();e.URL=l},110,[3,7,8,87]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}Object.defineProperty(_e,'__esModule',{value:!0});var e=(function(e){r(d[2])(c,e);var n,l,u=(n=c,l=t(),function(){var t,e=r(d[0])(n);if(l){var o=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,o)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function c(){throw r(d[3])(this,c),u.call(this),new TypeError("AbortSignal cannot be constructed directly")}return r(d[4])(c,[{key:"aborted",get:function(){var t=o.get(this);if("boolean"!=typeof t)throw new TypeError("Expected 'this' to be an 'AbortSignal' object, but got "+(null===this?"null":typeof this));return t}}]),c})(r(d[5]).EventTarget);r(d[5]).defineEventAttribute(e.prototype,"abort");var o=new WeakMap;Object.defineProperties(e.prototype,{aborted:{enumerable:!0}}),"function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag&&Object.defineProperty(e.prototype,Symbol.toStringTag,{configurable:!0,value:"AbortSignal"});var n=(function(){function t(){var n;r(d[3])(this,t),l.set(this,(n=Object.create(e.prototype),r(d[5]).EventTarget.call(n),o.set(n,!1),n))}return r(d[4])(t,[{key:"signal",get:function(){return u(this)}},{key:"abort",value:function(){var t;t=u(this),!1===o.get(t)&&(o.set(t,!0),t.dispatchEvent({type:"abort"}))}}]),t})(),l=new WeakMap;function u(t){var e=l.get(t);if(null==e)throw new TypeError("Expected 'this' to be an 'AbortController' object, but got "+(null===t?"null":typeof t));return e}Object.defineProperties(n.prototype,{signal:{enumerable:!0},abort:{enumerable:!0}}),"function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag&&Object.defineProperty(n.prototype,Symbol.toStringTag,{configurable:!0,value:"AbortController"}),_e.AbortController=n,_e.AbortSignal=e,_e.default=n,m.exports=n,m.exports.AbortController=m.exports.default=n,m.exports.AbortSignal=e},111,[15,12,10,7,8,90]); +__d(function(g,r,i,a,m,e,d){'use strict';g.alert||(g.alert=function(t){r(d[0]).alert('Alert',''+t)})},112,[113]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),l=(function(){function l(){(0,t.default)(this,l)}return(0,n.default)(l,null,[{key:"alert",value:function(t,n,s,u){if('ios'===o.default.OS)l.prompt(t,n,s,'default');else if('android'===o.default.OS){var c=r(d[5]).default;if(!c)return;var f=c.getConstants(),v={title:t||'',message:n||'',cancelable:!1};u&&u.cancelable&&(v.cancelable=u.cancelable);var p=s?s.slice(0,3):[{text:"OK"}],b=p.pop(),y=p.pop(),h=p.pop();h&&(v.buttonNeutral=h.text||''),y&&(v.buttonNegative=y.text||''),b&&(v.buttonPositive=b.text||"OK");c.showAlert(v,function(t){return console.warn(t)},function(t,n){t===f.buttonClicked?n===f.buttonNeutral?h.onPress&&h.onPress():n===f.buttonNegative?y.onPress&&y.onPress():n===f.buttonPositive&&b.onPress&&b.onPress():t===f.dismissed&&u&&u.onDismiss&&u.onDismiss()})}}},{key:"prompt",value:function(t,n,l){var u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:'plain-text',c=arguments.length>4?arguments[4]:void 0,f=arguments.length>5?arguments[5]:void 0;if('ios'===o.default.OS){var v,p,b=[],y=[];'function'==typeof l?b=[l]:Array.isArray(l)&&l.forEach(function(t,n){if(b[n]=t.onPress,'cancel'===t.style?v=String(n):'destructive'===t.style&&(p=String(n)),t.text||n<(l||[]).length-1){var o={};o[n]=t.text||'',y.push(o)}}),s.default.alertWithArgs({title:t||'',message:n||void 0,buttons:y,type:u||void 0,defaultValue:c,cancelButtonKey:v,destructiveButtonKey:p,keyboardType:f},function(t,n){var o=b[t];o&&o(n)})}}}]),l})();m.exports=l},113,[3,7,8,19,114,115]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));function n(){}m.exports={alertWithArgs:function(f,o){t.default&&t.default.showAlert(f,n,o||n)}}},114,[3,115]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('DialogManagerAndroid');e.default=n},115,[21]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=g.navigator;void 0===t&&(g.navigator=t={}),r(d[0]).polyfillObjectProperty(t,'product',function(){return'ReactNative'})},116,[67]); +__d(function(g,r,i,a,m,e,d){'use strict';var n;if(g.RN$Bridgeless&&g.RN$registerCallableModule)n=g.RN$registerCallableModule;else{var t=r(d[0]);n=function(n,u){return t.registerLazyCallableModule(n,u)}}n('Systrace',function(){return r(d[1])}),n('JSTimers',function(){return r(d[2])}),n('HeapCapture',function(){return r(d[3])}),n('SamplingProfiler',function(){return r(d[4])}),n('RCTLog',function(){return r(d[5])}),n('RCTDeviceEventEmitter',function(){return r(d[6]).default}),n('RCTNativeAppEventEmitter',function(){return r(d[7])}),n('GlobalPerformanceLogger',function(){return r(d[8])}),n('JSDevSupportModule',function(){return r(d[9])}),n('HMRClient',function(){return r(d[10])})},117,[30,32,78,118,120,122,4,123,91,124,126]); +__d(function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t={captureHeap:function(t){var p=null;try{g.nativeCaptureHeap(t),console.log('HeapCapture.captureHeap succeeded: '+t)}catch(e){console.log('HeapCapture.captureHeap error: '+e.toString()),p=e.toString()}e.default&&e.default.captureComplete(t,p)}};m.exports=t},118,[3,119]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var u=new WeakMap,o=new WeakMap;return(t=function(t){return t?o:u})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,u){if(!u&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var o=t(u);if(o&&o.has(n))return o.get(n);var f={},p=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var l=p?Object.getOwnPropertyDescriptor(n,c):null;l&&(l.get||l.set)?Object.defineProperty(f,c,l):f[c]=n[c]}f.default=n,o&&o.set(n,f);return f})(r(d[0])).get('JSCHeapCapture');e.default=n},119,[21]); +__d(function(g,r,i,a,m,_e,d){'use strict';var o={poke:function(o){var e=null,l=null;try{null===(l=g.pokeSamplingProfiler())?console.log('The JSC Sampling Profiler has started'):console.log('The JSC Sampling Profiler has stopped')}catch(o){console.log('Error occurred when restarting Sampling Profiler: '+o.toString()),e=o.toString()}var n=r(d[0]).default;n&&n.operationComplete(o,l,e)}};m.exports=o},120,[121]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in n)if("default"!==p&&Object.prototype.hasOwnProperty.call(n,p)){var c=l?Object.getOwnPropertyDescriptor(n,p):null;c&&(c.get||c.set)?Object.defineProperty(u,p,c):u[p]=n[p]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).get('JSCSamplingProfiler');e.default=n},121,[21]); +__d(function(g,r,i,a,m,e,d){'use strict';var o={log:'log',info:'info',warn:'warn',error:'error',fatal:'error'},n=null,l={logIfNoNativeHook:function(o){for(var t=arguments.length,f=new Array(t>1?t-1:0),c=1;c1?f-1:0),v=1;v1?t-1:0),f=1;f>>8)>>>0,t|=0)}}},141,[142,144]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));m.exports=function(n){if('object'==typeof n&&null!=n&&null!=(0,r(d[2]).normalizeColorObject)(n))return n;if('string'==typeof n||'number'==typeof n)return(0,t.default)(n)}},142,[3,143,144]); +__d(function(_g,_r,i,a,m,e,d){'use strict';function r(r,l,n){return n<0&&(n+=1),n>1&&(n-=1),n<.16666666666666666?r+6*(l-r)*n:n<.5?l:n<.6666666666666666?r+(l-r)*(.6666666666666666-n)*6:r}function l(l,n,t){var o=t<.5?t*(1+n):t+n-t*n,u=2*t-o,g=r(u,o,l+.3333333333333333),s=r(u,o,l),h=r(u,o,l-.3333333333333333);return Math.round(255*g)<<24|Math.round(255*s)<<16|Math.round(255*h)<<8}var n,t='[-+]?\\d*\\.?\\d+',o="[-+]?\\d*\\.?\\d+%";function u(){for(var r=arguments.length,l=new Array(r),n=0;n255?255:l}function s(r){return(parseFloat(r)%360+360)%360/360}function h(r){var l=parseFloat(r);return l<0?0:l>1?255:Math.round(255*l)}function c(r){var l=parseFloat(r);return l<0?0:l>100?1:l/100}var p={transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199};m.exports=function(r){var b,y=(void 0===n&&(n={rgb:new RegExp('rgb'+u(t,t,t)),rgba:new RegExp('rgba'+u(t,t,t,t)),hsl:new RegExp('hsl'+u(t,o,o)),hsla:new RegExp('hsla'+u(t,o,o,t)),hex3:/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex4:/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#([0-9a-fA-F]{6})$/,hex8:/^#([0-9a-fA-F]{8})$/}),n);return'number'==typeof r?r>>>0===r&&r>=0&&r<=4294967295?r:null:'string'!=typeof r?null:(b=y.hex6.exec(r))?parseInt(b[1]+'ff',16)>>>0:p.hasOwnProperty(r)?p[r]:(b=y.rgb.exec(r))?(g(b[1])<<24|g(b[2])<<16|g(b[3])<<8|255)>>>0:(b=y.rgba.exec(r))?(g(b[1])<<24|g(b[2])<<16|g(b[3])<<8|h(b[4]))>>>0:(b=y.hex3.exec(r))?parseInt(b[1]+b[1]+b[2]+b[2]+b[3]+b[3]+'ff',16)>>>0:(b=y.hex8.exec(r))?parseInt(b[1],16)>>>0:(b=y.hex4.exec(r))?parseInt(b[1]+b[1]+b[2]+b[2]+b[3]+b[3]+b[4]+b[4],16)>>>0:(b=y.hsl.exec(r))?(255|l(s(b[1]),c(b[2]),c(b[3])))>>>0:(b=y.hsla.exec(r))?(l(s(b[1]),c(b[2]),c(b[3]))|h(b[4]))>>>0:null}},143,[]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.processColorObject=e.normalizeColorObject=e.PlatformColor=void 0;e.PlatformColor=function(){for(var o=arguments.length,n=new Array(o),t=0;t.49999*l?[0,2*Math.atan2(u,m)*C,90]:M<-.49999*l?[0,-2*Math.atan2(u,m)*C,-90]:[t.roundTo3Places(Math.atan2(2*u*m-2*s*c,1-2*v-2*h)*C),t.roundTo3Places(Math.atan2(2*s*m-2*u*c,1-2*f-2*h)*C),t.roundTo3Places(Math.asin(2*u*s+2*c*m)*C)]},roundTo3Places:function(t){var n=t.toString().split('e');return.001*Math.round(n[0]+'e'+(n[1]?+n[1]-3:3))},decomposeMatrix:function(n){r(d[1])(16===n.length,'Matrix decomposition needs a list of 3d matrix values, received %s',n);var a=[],o=[],i=[],u=[],s=[];if(n[15]){for(var c=[],m=[],v=0;v<4;v++){c.push([]);for(var f=0;f<4;f++){var h=n[4*v+f]/n[15];c[v].push(h),m.push(3===f?0:h)}}if(m[15]=1,t.determinant(m)){if(0!==c[0][3]||0!==c[1][3]||0!==c[2][3]){var M=[c[0][3],c[1][3],c[2][3],c[3][3]],l=t.inverse(m),C=t.transpose(l);a=t.multiplyVectorByMatrix(M,C)}else a[0]=a[1]=a[2]=0,a[3]=1;for(var p=0;p<3;p++)s[p]=c[3][p];for(var x=[],T=0;T<3;T++)x[T]=[c[T][0],c[T][1],c[T][2]];i[0]=t.v3Length(x[0]),x[0]=t.v3Normalize(x[0],i[0]),u[0]=t.v3Dot(x[0],x[1]),x[1]=t.v3Combine(x[1],x[0],1,-u[0]),i[1]=t.v3Length(x[1]),x[1]=t.v3Normalize(x[1],i[1]),u[0]/=i[1],u[1]=t.v3Dot(x[0],x[2]),x[2]=t.v3Combine(x[2],x[0],1,-u[1]),u[2]=t.v3Dot(x[1],x[2]),x[2]=t.v3Combine(x[2],x[1],1,-u[2]),i[2]=t.v3Length(x[2]),x[2]=t.v3Normalize(x[2],i[2]),u[1]/=i[2],u[2]/=i[2];var y,S=t.v3Cross(x[1],x[2]);if(t.v3Dot(x[0],S)<0)for(var P=0;P<3;P++)i[P]*=-1,x[P][0]*=-1,x[P][1]*=-1,x[P][2]*=-1;return o[0]=.5*Math.sqrt(Math.max(1+x[0][0]-x[1][1]-x[2][2],0)),o[1]=.5*Math.sqrt(Math.max(1-x[0][0]+x[1][1]-x[2][2],0)),o[2]=.5*Math.sqrt(Math.max(1-x[0][0]-x[1][1]+x[2][2],0)),o[3]=.5*Math.sqrt(Math.max(1+x[0][0]+x[1][1]+x[2][2],0)),x[2][1]>x[1][2]&&(o[0]=-o[0]),x[0][2]>x[2][0]&&(o[1]=-o[1]),x[1][0]>x[0][1]&&(o[2]=-o[2]),{rotationDegrees:y=o[0]<.001&&o[0]>=0&&o[1]<.001&&o[1]>=0?[0,0,t.roundTo3Places(180*Math.atan2(x[0][1],x[0][0])/Math.PI)]:t.quaternionToDegreesXYZ(o,c,x),perspective:a,quaternion:o,scale:i,skew:u,translation:s,rotate:y[2],rotateX:y[0],rotateY:y[1],scaleX:i[0],scaleY:i[1],translateX:s[0],translateY:s[1]}}}}};_m.exports=t},149,[23,18]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.get=p,e.getWithFallback_DEPRECATED=function(n,o){if(null==t){if(v(n))return p(n,o)}else if(null!=t(n))return p(n,o);var u=function(t){return null};return u.displayName="Fallback("+n+")",u},e.setRuntimeConfigProvider=function(n){(0,f.default)(null==t,'NativeComponentRegistry.setRuntimeConfigProvider() called more than once.'),t=n},e.unstable_hasComponent=function(t){var n=s.get(t);if(null==n){if(!g.__nativeComponentRegistry__hasComponent)throw"unstable_hasComponent('"+t+"'): Global function is not registered";n=g.__nativeComponentRegistry__hasComponent(t),s.set(t,n)}return n},e.unstable_hasStaticViewConfig=function(n){var o;return!(null!=(o=null==t?void 0:t(n))?o:{native:!0}).native};var t,n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),f=r(d[0])(r(d[5]));!(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=c(n);if(o&&o.has(t))return o.get(t);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var s=l?Object.getOwnPropertyDescriptor(t,f):null;s&&(s.get||s.set)?Object.defineProperty(u,f,s):u[f]=t[f]}u.default=t,o&&o.set(t,u)})(r(d[6]));function c(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(c=function(t){return t?o:n})(t)}var s=new Map;function p(n,f){return o.default.register(n,function(){var o,c=null!=(o=null==t?void 0:t(n))?o:{native:!0,verify:!1},s=c.native,p=c.verify,v=s?(0,u.default)(n):(0,r(d[7]).createViewConfig)(f());return p&&(s?(0,l.default)(v,(0,r(d[7]).createViewConfig)(f())):(0,l.default)((0,u.default)(n),v)),v}),n}function v(o){return(0,f.default)(null==t,'Unexpected invocation!'),null!=n.default.getViewManagerConfig(o)}},150,[3,43,134,151,164,18,129,165]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=!1;function t(n){var t=r(d[0]).getConstants();t.ViewManagerNames||t.LazyViewManagersEnabled?n=s(n,r(d[0]).getDefaultEventTypes()):(n.bubblingEventTypes=s(n.bubblingEventTypes,t.genericBubblingEventTypes),n.directEventTypes=s(n.directEventTypes,t.genericDirectEventTypes))}function s(n,t){if(!t)return n;if(!n)return t;for(var o in t)if(t.hasOwnProperty(o)){var u=t[o];if(n.hasOwnProperty(o)){var c=n[o];'object'==typeof u&&'object'==typeof c&&(u=s(c,u))}n[o]=u}return n}function o(n){switch(n){case'CATransform3D':return r(d[4]);case'CGPoint':return r(d[5]);case'CGSize':return r(d[6]);case'UIEdgeInsets':return r(d[7]);case'Point':return r(d[5])}return null}function u(n){switch(n){case'CGColor':case'UIColor':return r(d[8]);case'CGColorArray':case'UIColorArray':return r(d[9]);case'CGImage':case'UIImage':case'RCTImageSource':return r(d[10]);case'Color':return r(d[8]);case'ColorArray':return r(d[9])}return null}m.exports=function(s){var c=r(d[0]).getViewManagerConfig(s);r(d[1])(null!=c&&null!=c.NativeProps,'requireNativeComponent: "%s" was not found in the UIManager.',s);for(var l=c.baseModuleName,v=c.bubblingEventTypes,b=c.directEventTypes,p=c.NativeProps;l;){var f=r(d[0]).getViewManagerConfig(l);f?(v=r(d[2])({},f.bubblingEventTypes,v),b=r(d[2])({},f.directEventTypes,b),p=r(d[2])({},f.NativeProps,p),l=f.baseModuleName):l=null}var y={};for(var C in p){var E=p[C],T=o(E),w=u(E);y[C]=null==T&&null==w||{diff:T,process:w}}return y.style=r(d[3]),r(d[2])(c,{uiViewClassName:s,validAttributes:y,bubblingEventTypes:v,directEventTypes:b}),n||(t(c),n=!0),c}},151,[43,18,29,152,147,153,146,145,141,154,155]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),l={process:t.default},s={alignContent:!0,alignItems:!0,alignSelf:!0,aspectRatio:!0,borderBottomWidth:!0,borderEndWidth:!0,borderLeftWidth:!0,borderRightWidth:!0,borderStartWidth:!0,borderTopWidth:!0,borderWidth:!0,bottom:!0,direction:!0,display:!0,end:!0,flex:!0,flexBasis:!0,flexDirection:!0,flexGrow:!0,flexShrink:!0,flexWrap:!0,height:!0,justifyContent:!0,left:!0,margin:!0,marginBottom:!0,marginEnd:!0,marginHorizontal:!0,marginLeft:!0,marginRight:!0,marginStart:!0,marginTop:!0,marginVertical:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,overflow:!0,padding:!0,paddingBottom:!0,paddingEnd:!0,paddingHorizontal:!0,paddingLeft:!0,paddingRight:!0,paddingStart:!0,paddingTop:!0,paddingVertical:!0,position:!0,right:!0,start:!0,top:!0,width:!0,zIndex:!0,elevation:!0,shadowColor:l,shadowOffset:{diff:n.default},shadowOpacity:!0,shadowRadius:!0,decomposedMatrix:!0,rotation:!0,scaleX:!0,scaleY:!0,transform:{process:o.default},transformMatrix:!0,translateX:!0,translateY:!0,backfaceVisibility:!0,backgroundColor:l,borderBottomColor:l,borderBottomEndRadius:!0,borderBottomLeftRadius:!0,borderBottomRightRadius:!0,borderBottomStartRadius:!0,borderColor:l,borderEndColor:l,borderLeftColor:l,borderRadius:!0,borderRightColor:l,borderStartColor:l,borderStyle:!0,borderTopColor:l,borderTopEndRadius:!0,borderTopLeftRadius:!0,borderTopRightRadius:!0,borderTopStartRadius:!0,opacity:!0,color:l,fontFamily:!0,fontSize:!0,fontStyle:!0,fontVariant:!0,fontWeight:!0,includeFontPadding:!0,letterSpacing:!0,lineHeight:!0,textAlign:!0,textAlignVertical:!0,textDecorationColor:l,textDecorationLine:!0,textDecorationStyle:!0,textShadowColor:l,textShadowOffset:!0,textShadowRadius:!0,textTransform:!0,writingDirection:!0,overlayColor:l,resizeMode:!0,tintColor:l};m.exports=s},152,[3,141,148,146]); +__d(function(g,r,i,a,m,e,d){'use strict';var t={x:void 0,y:void 0};m.exports=function(n,o){return(n=n||t)!==(o=o||t)&&(n.x!==o.x||n.y!==o.y)}},153,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=r(d[0])(r(d[1])),l=0;function u(u){var o=(0,n.default)(u);return null==o?(console.error('Invalid value in color array:',u),l):o}m.exports=function(n){return null==n?null:n.map(u)}},154,[3,141]); +__d(function(g,r,i,a,m,e,d){'use strict';var t,n,s,u;function o(){if(u)return u;var t=g.nativeExtensions&&g.nativeExtensions.SourceCode;return t||(t=r(d[0]).default),u=t.getConstants().scriptURL}function f(){if(void 0===n){var t=o(),s=t&&t.match(/^https?:\/\/.*?\//);n=s?s[0]:null}return n}function c(t){if(t){if(t.startsWith('assets://'))return null;(t=t.substring(0,t.lastIndexOf('/')+1)).includes('://')||(t='file://'+t)}return t}m.exports=function(n){if('object'==typeof n)return n;var u=r(d[1]).getAssetByID(n);if(!u)return null;var l=new(r(d[2]))(f(),(void 0===s&&(s=c(o())),s),u);return t?t(l):l.defaultAsset()},m.exports.pickScale=r(d[3]).pickScale,m.exports.setCustomSourceTransformer=function(n){t=n}},155,[156,157,158,159]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).getEnforcing('SourceCode'),o=null,u={getConstants:function(){return null==o&&(o=n.getConstants()),o}};e.default=u},156,[21]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=[];m.exports={registerAsset:function(s){return t.push(s)},getAssetByID:function(s){return t[s-1]}}},157,[]); +__d(function(g,r,i,a,m,e,d){'use strict';function t(t){var s=r(d[0]).pickScale(t.scales,r(d[1]).get()),n=1===s?'':'@'+s+'x';return r(d[2]).getBasePath(t)+'/'+t.name+n+'.'+t.type}var s=(function(){function s(t,n,u){r(d[3])(this,s),this.serverUrl=t,this.jsbundleUrl=n,this.asset=u}return r(d[4])(s,[{key:"isLoadedFromServer",value:function(){return!!this.serverUrl}},{key:"isLoadedFromFileSystem",value:function(){return!(!this.jsbundleUrl||!this.jsbundleUrl.startsWith('file://'))}},{key:"defaultAsset",value:function(){return this.isLoadedFromServer()?this.assetServerURL():this.isLoadedFromFileSystem()?this.drawableFolderInBundle():this.resourceIdentifierWithoutScale()}},{key:"assetServerURL",value:function(){return r(d[5])(!!this.serverUrl,'need server to load from'),this.fromSource(this.serverUrl+t(this.asset)+"?platform=android&hash="+this.asset.hash)}},{key:"scaledAssetPath",value:function(){return this.fromSource(t(this.asset))}},{key:"scaledAssetURLNearBundle",value:function(){var s=this.jsbundleUrl||'file://';return this.fromSource(s+t(this.asset).replace(/\.\.\//g,'_'))}},{key:"resourceIdentifierWithoutScale",value:function(){return r(d[5])(!0,'resource identifiers work on Android'),this.fromSource(r(d[2]).getAndroidResourceIdentifier(this.asset))}},{key:"drawableFolderInBundle",value:function(){var t,s,n=this.jsbundleUrl||'file://';return this.fromSource(n+(t=this.asset,s=r(d[0]).pickScale(t.scales,r(d[1]).get()),r(d[2]).getAndroidResourceFolderName(t,s)+'/'+r(d[2]).getAndroidResourceIdentifier(t)+'.'+t.type))}},{key:"fromSource",value:function(t){return{__packager_asset:!0,width:this.asset.width,height:this.asset.height,uri:t,scale:r(d[0]).pickScale(this.asset.scales,r(d[1]).get())}}}]),s})();s.pickScale=r(d[0]).pickScale,m.exports=s},158,[159,160,163,7,8,18]); +__d(function(g,r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.getUrlCacheBreaker=function(){if(null==n)return'';return n},e.pickScale=function(n,u){null==u&&(u=t.default.get());for(var l=0;l=u)return n[l];return n[n.length-1]||1},e.setUrlCacheBreaker=function(t){n=t};var n,t=r(d[0])(r(d[1]))},159,[3,160]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=(function(){function t(){r(d[0])(this,t)}return r(d[1])(t,null,[{key:"get",value:function(){return r(d[2]).get('window').scale}},{key:"getFontScale",value:function(){return r(d[2]).get('window').fontScale||t.get()}},{key:"getPixelSizeForLayoutSize",value:function(n){return Math.round(n*t.get())}},{key:"roundToNearestPixel",value:function(n){var u=t.get();return Math.round(n*u)/u}},{key:"startDetecting",value:function(){}}]),t})();m.exports=t},160,[7,8,161]); +__d(function(g,r,i,a,m,e,d){var n,t=r(d[0])(r(d[1])),s=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),c=r(d[0])(r(d[5])),u=r(d[0])(r(d[6])),f=new o.default,v=!1,h=(function(){function o(){(0,t.default)(this,o)}return(0,s.default)(o,null,[{key:"get",value:function(t){return(0,u.default)(n[t],'No dimension set for key '+t),n[t]}},{key:"set",value:function(t){var s=t.screen,o=t.window,l=t.windowPhysicalPixels;l&&(o={width:l.width/l.scale,height:l.height/l.scale,scale:l.scale,fontScale:l.fontScale});var c=t.screenPhysicalPixels;c?s={width:c.width/c.scale,height:c.height/c.scale,scale:c.scale,fontScale:c.fontScale}:null==s&&(s=o),n={window:o,screen:s},v?f.emit('change',n):v=!0}},{key:"addEventListener",value:function(n,t){return(0,u.default)('change'===n,'Trying to subscribe to unknown event: "%s"',n),f.addListener(n,t)}},{key:"removeEventListener",value:function(n,t){(0,u.default)('change'===n,'Trying to remove listener for unknown event: "%s"',n),f.removeListener(n,t)}}]),o})(),w=g.nativeExtensions&&g.nativeExtensions.DeviceInfo&&g.nativeExtensions.DeviceInfo.Dimensions;w||(l.default.addListener('didUpdateDimensions',function(n){h.set(n)}),w=c.default.getConstants().Dimensions),h.set(w),m.exports=h},161,[3,7,8,5,4,162,18]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).getEnforcing('DeviceInfo'),o=null,u={getConstants:function(){return null==o&&(o=n.getConstants()),o}};e.default=u},162,[21]); +__d(function(g,r,i,a,m,e,d){'use strict';var t={.75:'ldpi',1:'mdpi',1.5:'hdpi',2:'xhdpi',3:'xxhdpi',4:'xxxhdpi'};function n(n){if(n.toString()in t)return t[n.toString()];throw new Error('no such scale '+n.toString())}var o=new Set(['gif','jpeg','jpg','png','svg','webp','xml']);function s(t){var n=t.httpServerLocation;return n.startsWith('/')?n.substr(1):n}m.exports={getAndroidResourceFolderName:function(s,u){if(!o.has(s.type))return'raw';var c=n(u);if(!c)throw new Error("Don't know which android drawable suffix to use for scale: "+u+'\nAsset: '+JSON.stringify(s,null,'\t')+'\nPossible scales are:'+JSON.stringify(t,null,'\t'));return'drawable-'+c},getAndroidResourceIdentifier:function(t){return(s(t)+'/'+t.name).toLowerCase().replace(/\//g,'_').replace(/([^a-z0-9_])/g,'').replace(/^assets_/,'')},getBasePath:s}},163,[]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,n){for(var o=0,u=['validAttributes','bubblingEventTypes','directEventTypes'];o0){var l,v=null!=(l=n.uiViewClassName)?l:t.uiViewClassName;console.error("'"+v+"' has a view config that does not match native. '"+s+"' is missing: "+c.join(', '))}}},e.getConfigWithoutViewProps=function(n,f){if(!n[f])return{};return Object.keys(n[f]).filter(function(n){return!t.default[f][n]}).reduce(function(t,o){return t[o]=n[f][o],t},{})},e.lefthandObjectDiff=f,e.stringifyViewConfig=function(t){return JSON.stringify(t,function(t,n){return'function'==typeof n?"\u0192 "+n.name:n},2)};var t=r(d[0])(r(d[1])),n=['transform','hitSlop'];function f(t,o){var u={};function s(t,n,o){if(typeof t==typeof n||null==t)if('object'!=typeof t)t===n||(u[o]=n);else{var s=f(t,n);Object.keys(s).length>1&&(u[o]=s)}else u[o]=n}for(var c in t)n.includes(c)||(o?t.hasOwnProperty(c)&&s(t[c],o[c],c):u[c]={});return u}},164,[3,139]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.createViewConfig=function(t){return{uiViewClassName:t.uiViewClassName,Commands:{},bubblingEventTypes:u(n.default.bubblingEventTypes,t.bubblingEventTypes),directEventTypes:u(n.default.directEventTypes,t.directEventTypes),validAttributes:u(n.default.validAttributes,t.validAttributes)}};var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2]));function u(n,u){var l;return null==n||null==u?null!=(l=null!=n?n:u)?l:{}:(0,t.default)({},n,u)}},165,[3,29,139]); +__d(function(g,r,i,a,m,e,d){'use strict';var n;m.exports=function t(o,u){var f=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,s=arguments.length>3?arguments[3]:void 0,c='number'==typeof f?s:f,l='number'==typeof f?f:-1;if(0===l)return!0;if(o===u)return!1;if('function'==typeof o&&'function'==typeof u){var v=null==c?void 0:c.unsafelyIgnoreFunctions;return null==v&&(!n||!n.onDifferentFunctionsIgnored||c&&'unsafelyIgnoreFunctions'in c||n.onDifferentFunctionsIgnored(o.name,u.name),v=!0),!v}if('object'!=typeof o||null===o)return o!==u;if('object'!=typeof u||null===u)return!0;if(o.constructor!==u.constructor)return!0;if(Array.isArray(o)){var y=o.length;if(u.length!==y)return!0;for(var p=0;p=w},r=function(){},_e.unstable_forceFrameRate=function(e){0>e||125>>1,a=e[r];if(!(void 0!==a&&0x(l,t))void 0!==s&&0>x(s,l)?(e[r]=s,e[u]=t,r=u):(e[r]=l,e[o]=t,r=o);else{if(!(void 0!==s&&0>x(s,t)))break e;e[r]=s,e[u]=t,r=u}}}return n}return null}function x(e,n){var t=e.sortIndex-n.sortIndex;return 0!==t?t:e.id-n.id}var P=[],F=[],I=1,M=null,C=3,j=!1,A=!1,L=!1;function q(e){for(var n=T(F);null!==n;){if(null===n.callback)g(F);else{if(!(n.startTime<=e))break;g(F),n.sortIndex=n.expirationTime,k(P,n)}n=T(F)}}function R(t){if(L=!1,q(t),!A)if(null!==T(P))A=!0,e(Y);else{var r=T(F);null!==r&&n(R,r.startTime-t)}}function Y(e,r){A=!1,L&&(L=!1,t()),j=!0;var a=C;try{for(q(r),M=T(P);null!==M&&(!(M.expirationTime>r)||e&&!_e.unstable_shouldYield());){var o=M.callback;if("function"==typeof o){M.callback=null,C=M.priorityLevel;var l=o(M.expirationTime<=r);r=_e.unstable_now(),"function"==typeof l?M.callback=l:M===T(P)&&g(P),q(r)}else g(P);M=T(P)}if(null!==M)var u=!0;else{var s=T(F);null!==s&&n(R,s.startTime-r),u=!1}return u}finally{M=null,C=a,j=!1}}var E=r;_e.unstable_IdlePriority=5,_e.unstable_ImmediatePriority=1,_e.unstable_LowPriority=4,_e.unstable_NormalPriority=3,_e.unstable_Profiling=null,_e.unstable_UserBlockingPriority=2,_e.unstable_cancelCallback=function(e){e.callback=null},_e.unstable_continueExecution=function(){A||j||(A=!0,e(Y))},_e.unstable_getCurrentPriorityLevel=function(){return C},_e.unstable_getFirstCallbackNode=function(){return T(P)},_e.unstable_next=function(e){switch(C){case 1:case 2:case 3:var n=3;break;default:n=C}var t=C;C=n;try{return e()}finally{C=t}},_e.unstable_pauseExecution=function(){},_e.unstable_requestPaint=E,_e.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var t=C;C=e;try{return n()}finally{C=t}},_e.unstable_scheduleCallback=function(r,a,o){var l=_e.unstable_now();switch("object"==typeof o&&null!==o?o="number"==typeof(o=o.delay)&&0l?(r.sortIndex=o,k(F,r),null===T(P)&&r===T(F)&&(L?t():L=!0,n(R,o-l))):(r.sortIndex=u,k(P,r),A||j||(A=!0,e(Y))),r},_e.unstable_wrapCallback=function(e){var n=C;return function(){var t=C;C=n;try{return e.apply(this,arguments)}finally{C=t}}}},171,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=c(n);if(o&&o.has(t))return o.get(t);var l={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var s=u?Object.getOwnPropertyDescriptor(t,f):null;s&&(s.get||s.set)?Object.defineProperty(l,f,s):l[f]=t[f]}l.default=t,o&&o.set(t,l);return l})(r(d[3])),l=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),f=r(d[0])(r(d[6])),s=["animating","color","hidesWhenStopped","onLayout","size","style"];function c(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(c=function(t){return t?o:n})(t)}var p='android'===l.default.OS?r(d[7]):r(d[8]).default,y=o.forwardRef(function(c,y){var v,O,w=c.animating,b=void 0===w||w,S=c.color,j=void 0===S?'ios'===l.default.OS?"#999999":null:S,z=c.hidesWhenStopped,W=void 0===z||z,k=c.onLayout,L=c.size,P=void 0===L?'small':L,M=c.style,_=(0,n.default)(c,s);switch(P){case'small':v=h.sizeSmall,O='small';break;case'large':v=h.sizeLarge,O='large';break;default:v={height:P,width:P}}var E=(0,t.default)({animating:b,color:j,hidesWhenStopped:W},_,{ref:y,style:v,size:O});return o.createElement(f.default,{onLayout:k,style:u.default.compose(h.container,M)},'android'===l.default.OS?o.createElement(p,(0,t.default)({},E,{styleAttr:'Normal',indeterminate:!0})):o.createElement(p,E))});y.displayName='ActivityIndicator';var h=u.default.create({container:{alignItems:'center',justifyContent:'center'},sizeSmall:{width:20,height:20},sizeLarge:{width:36,height:36}});m.exports=y},172,[3,29,103,129,19,173,174,177,182]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0]).roundToNearestPixel(.4);0===t&&(t=1/r(d[0]).get());var o={position:'absolute',left:0,right:0,top:0,bottom:0};m.exports={hairlineWidth:t,absoluteFill:o,absoluteFillObject:o,compose:function(t,o){return null!=t&&null!=o?[t,o]:null!=t?t:o},flatten:r(d[1]),setStyleAttributePreprocessor:function(t,o){var l;if(!0===r(d[2])[t])l={process:o};else{if('object'!=typeof r(d[2])[t])return void console.error(t+" is not a valid style attribute");l=r(d[3])({},r(d[2])[t],{process:o})}r(d[2])[t]=l},create:function(t){return t}}},173,[160,168,152,29]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),f=r(d[0])(r(d[3])),u=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var f=o(n);if(f&&f.has(t))return f.get(t);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var p=l?Object.getOwnPropertyDescriptor(t,c):null;p&&(p.get||p.set)?Object.defineProperty(u,c,p):u[c]=t[c]}u.default=t,f&&f.set(t,u);return u})(r(d[4]));function o(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,f=new WeakMap;return(o=function(t){return t?f:n})(t)}var l=u.forwardRef(function(o,l){return u.createElement(f.default.Provider,{value:!1},u.createElement(n.default,(0,t.default)({},o,{ref:l})))});l.displayName='View',m.exports=l},174,[3,29,175,176,129]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Commands=void 0;var t=l(r(d[0])),n=r(d[1])(r(d[2])),o=r(d[1])(r(d[3])),u=r(d[1])(r(d[4]));l(r(d[5]));function f(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(f=function(t){return t?o:n})(t)}function l(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=f(n);if(o&&o.has(t))return o.get(t);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in t)if("default"!==p&&Object.prototype.hasOwnProperty.call(t,p)){var s=l?Object.getOwnPropertyDescriptor(t,p):null;s&&(s.get||s.set)?Object.defineProperty(u,p,s):u[p]=t[p]}return u.default=t,o&&o.set(t,u),u}var p=t.get('RCTView',function(){return'android'===n.default.OS?u.default:{uiViewClassName:'RCTView'}}),s=(0,o.default)({supportedCommands:['hotspotUpdate','setPressed']});e.Commands=s;var c=p;e.default=c},175,[150,3,19,137,140,129]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0]).createContext(!1);m.exports=t},176,[129]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),f=r(d[0])(r(d[3])),l=["styleAttr","indeterminate","animating"],o=r(d[4]),u=o.forwardRef(function(u,v){var s=u.styleAttr,c=void 0===s?'Normal':s,y=u.indeterminate,A=void 0===y||y,_=u.animating,p=void 0===_||_,w=(0,n.default)(u,l);return o.createElement(f.default,(0,t.default)({styleAttr:c,indeterminate:A,animating:p},w,{ref:v}))});m.exports=u},177,[3,29,103,178,129]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=(0,r(d[0])(r(d[1])).default)('AndroidProgressBar',{interfaceOnly:!0});e.default=t},178,[3,179]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2]));var t=function(t,p){var l=p&&null!=p.paperComponentName?p.paperComponentName:t;if(null!=p&&null!=p.paperComponentNameDeprecated)if(o.default.getViewManagerConfig(t))l=t;else{var u;if(null==p.paperComponentNameDeprecated||!o.default.getViewManagerConfig(p.paperComponentNameDeprecated))throw new Error("Failed to find native component for either "+t+" or "+(null!=(u=p.paperComponentNameDeprecated)?u:'(unknown)'));l=p.paperComponentNameDeprecated}return(0,n.default)(l)};e.default=t},179,[3,180,43]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=function(n){return r(d[0])(n,function(){return r(d[1])(n)})}},180,[181,151]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0]).ReactNativeViewConfigRegistry.register;m.exports=function(n,s){return t(n,s)}},181,[132]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=(0,r(d[0])(r(d[1])).default)('ActivityIndicatorView',{paperComponentName:'RCTActivityIndicatorView'});e.default=t},182,[3,179]); +__d(function(g,r,i,a,m,_e,d){'use strict';var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),n=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),l=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=x(e);if(o&&o.has(t))return o.get(t);var s={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var l=n?Object.getOwnPropertyDescriptor(t,c):null;l&&(l.get||l.set)?Object.defineProperty(s,c,l):s[c]=t[c]}s.default=t,o&&o.set(t,s);return s})(r(d[7])),u=r(d[0])(r(d[8])),f=r(d[0])(r(d[9])),p=r(d[0])(r(d[10])),b=r(d[0])(r(d[11])),y=r(d[0])(r(d[12])),h=r(d[0])(r(d[13])),v=r(d[0])(r(d[14]));function x(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,o=new WeakMap;return(x=function(t){return t?o:e})(t)}function F(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var D=(function(f){(0,s.default)(w,f);var x,D,S=(x=w,D=F(),function(){var t,e=(0,c.default)(x);if(D){var o=(0,c.default)(this).constructor;t=Reflect.construct(e,arguments,o)}else t=e.apply(this,arguments);return(0,n.default)(this,t)});function w(){return(0,e.default)(this,w),S.apply(this,arguments)}return(0,o.default)(w,[{key:"render",value:function(){var e,o,s=this.props,n=s.accessibilityLabel,c=s.color,f=s.onPress,x=s.touchSoundDisabled,F=s.title,D=s.hasTVPreferredFocus,S=s.nextFocusDown,w=s.nextFocusForward,P=s.nextFocusLeft,R=s.nextFocusRight,A=s.nextFocusUp,k=s.testID,j=s.accessible,C=s.accessibilityActions,L=s.onAccessibilityAction,M=[O.button],W=[O.text];c&&('ios'===u.default.OS?W.push({color:c}):M.push({backgroundColor:c}));var _=null!=this.props.disabled?this.props.disabled:null==(e=this.props.accessibilityState)?void 0:e.disabled,B=_!==(null==(o=this.props.accessibilityState)?void 0:o.disabled)?(0,t.default)({},this.props.accessibilityState,{disabled:_}):this.props.accessibilityState;_&&(M.push(O.buttonDisabled),W.push(O.textDisabled)),(0,v.default)('string'==typeof F,'The title prop of a Button must be a string');var E='android'===u.default.OS?F.toUpperCase():F,T='android'===u.default.OS?b.default:y.default;return l.createElement(T,{accessible:j,accessibilityActions:C,onAccessibilityAction:L,accessibilityLabel:n,accessibilityRole:"button",accessibilityState:B,hasTVPreferredFocus:D,nextFocusDown:S,nextFocusForward:w,nextFocusLeft:P,nextFocusRight:R,nextFocusUp:A,testID:k,disabled:_,onPress:f,touchSoundDisabled:x},l.createElement(h.default,{style:M},l.createElement(p.default,{style:W,disabled:_},E)))}}]),w})(l.Component),O=f.default.create({button:u.default.select({ios:{},android:{elevation:4,backgroundColor:'#2196F3',borderRadius:2}}),text:(0,t.default)({textAlign:'center',margin:8},u.default.select({ios:{color:'#007AFF',fontSize:18},android:{color:'white',fontWeight:'500'}})),buttonDisabled:u.default.select({ios:{},android:{elevation:0,backgroundColor:'#dfdfdf'}}),textDisabled:u.default.select({ios:{color:'#cdcdcd'},android:{color:'#a1a1a1'}})});m.exports=D},183,[3,29,7,8,10,12,15,129,19,173,184,209,210,174,18]); +__d(function(g,r,i,a,m,e,d){var n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),t=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),l=(v(r(d[5])),r(d[0])(r(d[6]))),u=(r(d[0])(r(d[7])),r(d[0])(r(d[8]))),p=r(d[0])(r(d[9])),f=v(r(d[10])),c=(r(d[0])(r(d[11])),["accessible","allowFontScaling","ellipsizeMode","onLongPress","onPress","onPressIn","onPressOut","onResponderGrant","onResponderMove","onResponderRelease","onResponderTerminate","onResponderTerminationRequest","onStartShouldSetResponder","pressRetentionOffset","suppressHighlighting"]);function R(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,t=new WeakMap;return(R=function(n){return n?t:o})(n)}function v(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var t=R(o);if(t&&t.has(n))return t.get(n);var s={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in n)if("default"!==u&&Object.prototype.hasOwnProperty.call(n,u)){var p=l?Object.getOwnPropertyDescriptor(n,u):null;p&&(p.get||p.set)?Object.defineProperty(s,u,p):s[u]=n[u]}return s.default=n,t&&t.set(n,s),s}var P=f.forwardRef(function(s,R){var v=s.accessible,P=s.allowFontScaling,b=s.ellipsizeMode,O=s.onLongPress,T=s.onPress,h=s.onPressIn,y=s.onPressOut,M=s.onResponderGrant,w=s.onResponderMove,E=s.onResponderRelease,C=s.onResponderTerminate,L=s.onResponderTerminationRequest,j=s.onStartShouldSetResponder,x=s.pressRetentionOffset,D=s.suppressHighlighting,_=(0,t.default)(s,c),q=(0,f.useState)(!1),G=(0,o.default)(q,2),H=G[0],k=G[1],z=(null!=T||null!=O||null!=j)&&!0!==_.disabled,F=S(z),I=(0,f.useMemo)(function(){return F?{disabled:!z,pressRectOffset:x,onLongPress:O,onPress:T,onPressIn:function(n){k(!D),null==h||h(n)},onPressOut:function(n){k(!1),null==y||y(n)},onResponderTerminationRequest_DEPRECATED:L,onStartShouldSetResponder_DEPRECATED:j}:null},[F,z,x,O,T,h,y,L,j,D]),N=(0,l.default)(I),W=(0,f.useMemo)(function(){return null==N?null:{onResponderGrant:function(n){N.onResponderGrant(n),null!=M&&M(n)},onResponderMove:function(n){N.onResponderMove(n),null!=w&&w(n)},onResponderRelease:function(n){N.onResponderRelease(n),null!=E&&E(n)},onResponderTerminate:function(n){N.onResponderTerminate(n),null!=C&&C(n)},onResponderTerminationRequest:N.onResponderTerminationRequest,onStartShouldSetResponder:N.onStartShouldSetResponder}},[N,M,w,E,C]),A=null==_.selectionColor?null:(0,u.default)(_.selectionColor),V=_.style,B=_.numberOfLines;return null==B||B>=0||(console.error("'numberOfLines' in must be a non-negative number, received: "+B+". The value will be set to 0."),B=0),(0,f.useContext)(p.default)?f.createElement(r(d[12]).NativeVirtualText,(0,n.default)({},_,W,{isHighlighted:H,numberOfLines:B,selectionColor:A,style:V,ref:R})):f.createElement(p.default.Provider,{value:!0},f.createElement(r(d[12]).NativeText,(0,n.default)({},_,W,{accessible:!1!==v,allowFontScaling:!1!==P,ellipsizeMode:null!=b?b:'tail',isHighlighted:H,numberOfLines:B,selectionColor:A,style:V,ref:R})))});function S(n){var t=(0,f.useState)(n),s=(0,o.default)(t,2),l=s[0],u=s[1];return!l&&n&&u(n),l}P.displayName='Text',P.propTypes=s.default,m.exports=P},184,[3,29,23,103,185,199,200,173,141,176,129,18,207]); +__d(function(g,r,i,a,m,e,d){'use strict';var o=r(d[0])(r(d[1]));m.exports={ellipsizeMode:r(d[2]).oneOf(['head','middle','tail','clip']),numberOfLines:r(d[2]).number,textBreakStrategy:r(d[2]).oneOf(['simple','highQuality','balanced']),onLayout:r(d[2]).func,onPress:r(d[2]).func,onLongPress:r(d[2]).func,pressRetentionOffset:r(d[3]),selectable:r(d[2]).bool,selectionColor:r(d[4]),suppressHighlighting:r(d[2]).bool,style:o,testID:r(d[2]).string,nativeID:r(d[2]).string,allowFontScaling:r(d[2]).bool,maxFontSizeMultiplier:r(d[2]).number,accessible:r(d[2]).bool,adjustsFontSizeToFit:r(d[2]).bool,minimumFontScale:r(d[2]).number,disabled:r(d[2]).bool,dataDetectorType:r(d[2]).oneOf(['phoneNumber','link','email','none','all'])}},185,[186,188,191,198,195]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=function(n){var t=r(d[0])(n);return function(n,o,c,u){var f=n;n[o]&&((f={})[o]=r(d[1])(n[o]));for(var v=arguments.length,p=new Array(v>4?v-4:0),s=4;s5?v-5:0),j=5;j4?s-4:0),p=4;p3?f-3:0),p=3;p0?t._pressDelayTimeout=setTimeout(function(){t._receiveSignal('DELAY',E)},n):t._receiveSignal('DELAY',E);var R=I(t._config.delayLongPress,10,500-n);t._longPressDelayTimeout=setTimeout(function(){t._handleLongPress(E)},R+n)},onResponderMove:function(E){var n=t._config.onPressMove;null!=n&&n(E);var R=t._responderRegion;if(null!=R){var _=A(E);if(null==_)return t._cancelLongPressDelayTimeout(),void t._receiveSignal('LEAVE_PRESS_RECT',E);if(null!=t._touchActivatePosition){var o=t._touchActivatePosition.pageX-_.pageX,l=t._touchActivatePosition.pageY-_.pageY;Math.hypot(o,l)>10&&t._cancelLongPressDelayTimeout()}t._isTouchWithinResponderRegion(_,R)?t._receiveSignal('ENTER_PRESS_RECT',E):(t._cancelLongPressDelayTimeout(),t._receiveSignal('LEAVE_PRESS_RECT',E))}},onResponderRelease:function(E){t._receiveSignal('RESPONDER_RELEASE',E)},onResponderTerminate:function(E){t._receiveSignal('RESPONDER_TERMINATED',E)},onResponderTerminationRequest:function(){var E=t._config.cancelable;if(null==E){var n=t._config.onResponderTerminationRequest_DEPRECATED;return null==n||n()}return E},onClick:function(E){var n=t._config,R=n.onPress,_=n.disabled;null!=R&&!0!==_&&R(E)}},_='ios'===l.default.OS||'android'===l.default.OS?null:{onMouseEnter:function(E){if((0,r(d[10]).isHoverEnabled)()){t._isHovered=!0,t._cancelHoverOutDelayTimeout();var n=t._config.onHoverIn;if(null!=n){var R=I(t._config.delayHoverIn);R>0?(E.persist(),t._hoverInDelayTimeout=setTimeout(function(){n(E)},R)):n(E)}}},onMouseLeave:function(E){if(t._isHovered){t._isHovered=!1,t._cancelHoverInDelayTimeout();var n=t._config.onHoverOut;if(null!=n){var R=I(t._config.delayHoverOut);R>0?(E.persist(),t._hoverInDelayTimeout=setTimeout(function(){n(E)},R)):n(E)}}}};return(0,E.default)({},n,R,_)}},{key:"_receiveSignal",value:function(E,t){var n,_=this._touchState,l=null==(n=S[_])?void 0:n[E];null==this._responderID&&'RESPONDER_RELEASE'===E||((0,R.default)(null!=l&&'ERROR'!==l,'Pressability: Invalid signal `%s` for state `%s` on responder: %s',E,_,'number'==typeof this._responderID?this._responderID:'<>'),_!==l&&(null!=t.nativeEvent.timestamp&&o.default.emitEvent(function(){return{signal:E,touchDelayMs:Date.now()-t.nativeEvent.timestamp}}),this._performTransitionSideEffects(_,l,E,t),this._touchState=l))}},{key:"_performTransitionSideEffects",value:function(E,t,n,R){c(n)&&(this._touchActivatePosition=null,this._cancelLongPressDelayTimeout());var o='NOT_RESPONDER'===E&&'RESPONDER_INACTIVE_PRESS_IN'===t,u=!P(E)&&P(t);if((o||u)&&this._measureResponderRegion(),O(E)&&'LONG_PRESS_DETECTED'===n){var s=this._config.onLongPress;null!=s&&s(R)}var S=T(E),D=T(t);if(!S&&D?this._activate(R):S&&!D&&this._deactivate(R),O(E)&&'RESPONDER_RELEASE'===n){D||S||(this._activate(R),this._deactivate(R));var N=this._config,h=N.onLongPress,f=N.onPress,v=N.android_disableSound;if(null!=f)null!=h&&'RESPONDER_ACTIVE_LONG_PRESS_IN'===E&&this._shouldLongPressCancelPress()||('android'===l.default.OS&&!0!==v&&_.default.playTouchSound(),f(R))}this._cancelPressDelayTimeout()}},{key:"_activate",value:function(E){var t=this._config.onPressIn,n=A(E),R=n.pageX,_=n.pageY;this._touchActivatePosition={pageX:R,pageY:_},this._touchActivateTime=Date.now(),null!=t&&t(E)}},{key:"_deactivate",value:function(E){var t=this._config.onPressOut;if(null!=t){var n,R=I(this._config.minPressDuration,0,130),_=Date.now()-(null!=(n=this._touchActivateTime)?n:0),o=Math.max(R-_,I(this._config.delayPressOut));o>0?(E.persist(),this._pressOutDelayTimeout=setTimeout(function(){t(E)},o)):t(E)}this._touchActivateTime=null}},{key:"_measureResponderRegion",value:function(){null!=this._responderID&&('number'==typeof this._responderID?u.default.measure(this._responderID,this._measureCallback):this._responderID.measure(this._measureCallback))}},{key:"_isTouchWithinResponderRegion",value:function(E,t){var n,R,_,o,l=(0,r(d[11]).normalizeRect)(this._config.hitSlop),u=(0,r(d[11]).normalizeRect)(this._config.pressRectOffset),s=t.bottom,S=t.left,T=t.right,P=t.top;return null!=l&&(null!=l.bottom&&(s+=l.bottom),null!=l.left&&(S-=l.left),null!=l.right&&(T+=l.right),null!=l.top&&(P-=l.top)),s+=null!=(n=null==u?void 0:u.bottom)?n:D,S-=null!=(R=null==u?void 0:u.left)?R:N,T+=null!=(_=null==u?void 0:u.right)?_:h,P-=null!=(o=null==u?void 0:u.top)?o:f,E.pageX>S&&E.pageXP&&E.pageY1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return Math.max(t,null!=E?E:n)}e.default=v;var A=function(E){var t=E.nativeEvent,n=t.changedTouches,R=t.touches;return null!=R&&R.length>0?R[0]:null!=n&&n.length>0?n[0]:E.nativeEvent}},201,[3,29,7,8,18,202,204,19,43,129,205,206]); +__d(function(g,r,i,a,m,e,d){var u=r(d[0])(r(d[1])),o={playTouchSound:function(){u.default&&u.default.playTouchSound()}};m.exports=o},202,[3,203]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('SoundManager');e.default=n},203,[21]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),s=new((function(){function s(){(0,t.default)(this,s),this._listeners=[]}return(0,n.default)(s,[{key:"addListener",value:function(t){this._listeners.push(t)}},{key:"removeListener",value:function(t){var n=this._listeners.indexOf(t);n>-1&&this._listeners.splice(n,1)}},{key:"emitEvent",value:function(t){if(0!==this._listeners.length){var n=t();this._listeners.forEach(function(t){return t(n)})}}}]),s})());e.default=s},204,[3,7,8]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.isHoverEnabled=function(){return n};var n=!1;if('web'===r(d[0])(r(d[1])).default.OS&&Boolean('undefined'!=typeof window&&window.document&&window.document.createElement)){var t=0,o=function(){t=Date.now(),n&&(n=!1)};document.addEventListener('touchstart',o,!0),document.addEventListener('touchmove',o,!0),document.addEventListener('mousemove',function(){n||Date.now()-t<1e3||(n=!0)},!0)}},205,[3,19]); +__d(function(g,r,i,a,m,e,d){function t(t){return{bottom:t,left:t,right:t,top:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.createSquare=t,e.normalizeRect=function(n){return'number'==typeof n?t(n):n}},206,[]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.NativeVirtualText=e.NativeText=void 0;var t=r(d[0])(r(d[1])),l=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=(0,o.default)('RCTText',function(){return{validAttributes:(0,t.default)({},l.default.UIView,{isHighlighted:!0,numberOfLines:!0,ellipsizeMode:!0,allowFontScaling:!0,maxFontSizeMultiplier:!0,disabled:!0,selectable:!0,selectionColor:!0,adjustsFontSizeToFit:!0,minimumFontScale:!0,textBreakStrategy:!0,onTextLayout:!0,onInlineViewLayout:!0,dataDetectorType:!0,android_hyphenationFrequency:!0}),directEventTypes:{topTextLayout:{registrationName:'onTextLayout'},topInlineViewLayout:{registrationName:'onInlineViewLayout'}},uiViewClassName:'RCTText'}});e.NativeText=u;var s=g.RN$Bridgeless||n.default.hasViewManagerConfig('RCTVirtualText')?(0,o.default)('RCTVirtualText',function(){return{validAttributes:(0,t.default)({},l.default.UIView,{isHighlighted:!0,maxFontSizeMultiplier:!0}),uiViewClassName:'RCTVirtualText'}}):u;e.NativeVirtualText=s},207,[3,29,208,43,181]); +__d(function(g,r,i,a,m,e,d){'use strict';var s=r(d[0])(r(d[1])),t={pointerEvents:!0,accessible:!0,accessibilityActions:!0,accessibilityLabel:!0,accessibilityLiveRegion:!0,accessibilityRole:!0,accessibilityState:!0,accessibilityValue:!0,accessibilityHint:!0,importantForAccessibility:!0,nativeID:!0,testID:!0,renderToHardwareTextureAndroid:!0,shouldRasterizeIOS:!0,onLayout:!0,onAccessibilityAction:!0,onAccessibilityTap:!0,onMagicTap:!0,onAccessibilityEscape:!0,collapsable:!0,needsOffscreenAlphaCompositing:!0,style:r(d[0])(r(d[2])).default},c={UIView:t,RCTView:(0,s.default)({},t,{removeClippedSubviews:!0})};m.exports=c},208,[3,29,152]); +__d(function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),s=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),n=r(d[0])(r(d[5])),l=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),p=r(d[0])(r(d[8])),u=r(d[0])(r(d[9])),f=r(d[0])(r(d[10])),h=(r(d[0])(r(d[11])),r(d[0])(r(d[12]))),b=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var s=P(t);if(s&&s.has(e))return s.get(e);var o={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if("default"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var c=n?Object.getOwnPropertyDescriptor(e,l):null;c&&(c.get||c.set)?Object.defineProperty(o,l,c):o[l]=e[l]}o.default=e,s&&s.set(e,o);return o})(r(d[13])),y=r(d[0])(r(d[14])),v=["onBlur","onFocus"];function P(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,s=new WeakMap;return(P=function(e){return e?s:t})(e)}function F(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var O=(function(h){(0,n.default)(R,h);var y,P,O=(y=R,P=F(),function(){var e,t=(0,c.default)(y);if(P){var s=(0,c.default)(this).constructor;e=Reflect.construct(t,arguments,s)}else e=t.apply(this,arguments);return(0,l.default)(this,e)});function R(){var e;(0,s.default)(this,R);for(var t=arguments.length,o=new Array(t),n=0;n=23};var S='android'===f.default.OS?function(e,t){return t&&O.canUseNativeForeground()?{nativeForegroundAndroid:e}:{nativeBackgroundAndroid:e}}:function(e,t){return null};O.displayName='TouchableNativeFeedback',m.exports=O},209,[3,29,103,7,8,10,12,15,201,49,19,174,141,129,18,175]); +__d(function(g,r,i,a,m,_e,d){var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),s=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),n=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),p=r(d[0])(r(d[8])),u=r(d[0])(r(d[9])),f=r(d[0])(r(d[10])),y=r(d[0])(r(d[11])),h=r(d[0])(r(d[12])),b=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var s=P(e);if(s&&s.has(t))return s.get(t);var o={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var l=n?Object.getOwnPropertyDescriptor(t,c):null;l&&(l.get||l.set)?Object.defineProperty(o,c,l):o[c]=t[c]}o.default=t,s&&s.set(t,o);return o})(r(d[13])),v=["onBlur","onFocus"];function P(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,s=new WeakMap;return(P=function(t){return t?s:e})(t)}function O(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var F=(function(P){(0,n.default)(w,P);var F,_,R=(F=w,_=O(),function(){var t,e=(0,l.default)(F);if(_){var s=(0,l.default)(this).constructor;t=Reflect.construct(e,arguments,s)}else t=e.apply(this,arguments);return(0,c.default)(this,t)});function w(){var t;(0,s.default)(this,w);for(var e=arguments.length,o=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{}).iterations;return t},event:r(d[5]).event,createAnimatedComponent:r(d[6]),attachNativeEvent:r(d[7]).attachNativeEvent,forkEvent:r(d[5]).forkEvent,unforkEvent:r(d[5]).unforkEvent,Event:r(d[7]).AnimatedEvent}},212,[29,213,222,217,219,223,239,238]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}function e(t){var e=new Set;!(function t(n){'function'==typeof n.update?e.add(n):n.__getChildren().forEach(t)})(t),e.forEach(function(t){return t.update()})}var n=(function(n){r(d[3])(_,n);var s,u,o=(s=_,u=t(),function(){var t,e=r(d[0])(s);if(u){var n=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function _(t){var e;if(r(d[4])(this,_),e=o.call(this),'number'!=typeof t)throw new Error('AnimatedValue: Attempting to set value to undefined');return e._startingValue=e._value=t,e._offset=0,e._animation=null,e}return r(d[5])(_,[{key:"__detach",value:function(){var t=this;this.__isNative&&r(d[2]).API.getValue(this.__getNativeTag(),function(e){t._value=e}),this.stopAnimation(),r(d[6])(r(d[0])(_.prototype),"__detach",this).call(this)}},{key:"__getValue",value:function(){return this._value+this._offset}},{key:"setValue",value:function(t){var e,n,s=this;this._animation&&(this._animation.stop(),this._animation=null),this._updateValue(t,!this.__isNative),this.__isNative&&(e=this.__getNativeTag().toString(),n=function(){r(d[2]).API.setAnimatedNodeValue(s.__getNativeTag(),t)},r(d[2]).API.setWaitingForIdentifier(e),n(),r(d[2]).API.unsetWaitingForIdentifier(e))}},{key:"setOffset",value:function(t){this._offset=t,this.__isNative&&r(d[2]).API.setAnimatedNodeOffset(this.__getNativeTag(),t)}},{key:"flattenOffset",value:function(){this._value+=this._offset,this._offset=0,this.__isNative&&r(d[2]).API.flattenAnimatedNodeOffset(this.__getNativeTag())}},{key:"extractOffset",value:function(){this._offset+=this._value,this._value=0,this.__isNative&&r(d[2]).API.extractAnimatedNodeOffset(this.__getNativeTag())}},{key:"stopAnimation",value:function(t){this.stopTracking(),this._animation&&this._animation.stop(),this._animation=null,t&&t(this.__getValue())}},{key:"resetAnimation",value:function(t){this.stopAnimation(t),this._value=this._startingValue,this.__isNative&&r(d[2]).API.setAnimatedNodeValue(this.__getNativeTag(),this._startingValue)}},{key:"_onAnimatedValueUpdateReceived",value:function(t){this._updateValue(t,!1)}},{key:"interpolate",value:function(t){return new(r(d[7]))(this,t)}},{key:"animate",value:function(t,e){var n=this,s=null;t.__isInteraction&&(s=r(d[8]).createInteractionHandle());var u=this._animation;this._animation&&this._animation.stop(),this._animation=t,t.start(this._value,function(t){n._updateValue(t,!0)},function(t){n._animation=null,null!==s&&r(d[8]).clearInteractionHandle(s),e&&e(t)},u,this)}},{key:"stopTracking",value:function(){this._tracking&&this._tracking.__detach(),this._tracking=null}},{key:"track",value:function(t){this.stopTracking(),this._tracking=t}},{key:"_updateValue",value:function(t,n){if(void 0===t)throw new Error('AnimatedValue: Attempting to set value to undefined');this._value=t,n&&e(this),r(d[6])(r(d[0])(_.prototype),"__callListeners",this).call(this,this.__getValue())}},{key:"__getNativeConfig",value:function(){return{type:'value',value:this._value,offset:this._offset}}}]),_})(r(d[9]));m.exports=n},213,[15,12,214,10,7,8,84,217,220,218]); +__d(function(g,r,i,a,m,e,d){var t,n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),s=r(d[0])(r(d[5])),f='ios'===l.default.OS&&g.RN$Bridgeless?o.default:n.default,c=1,v=1,p=new Set,N=!1,b=[],A={getValue:function(t,n){(0,s.default)(f,'Native animated module is not available'),A.queueOperation(function(){f.getValue(t,n)})},setWaitingForIdentifier:function(t){p.add(t),N=!0},unsetWaitingForIdentifier:function(t){p.delete(t),0===p.size&&(N=!1,A.disableQueue())},disableQueue:function(){(0,s.default)(f,'Native animated module is not available'),'android'===l.default.OS&&f.startOperationBatch();for(var t=0,n=b.length;tn){if('identity'===u)return c;'clamp'===u&&(c=n)}return a===r?a:e===n?t<=e?a:r:(e===-1/0?c=-c:n===1/0?c-=e:c=(c-e)/(n-e),c=i(c),a===-1/0?c=-c:r===1/0?c+=a:c=c*(r-a)+a,c)}function r(t){var e=_r(d[3])(t);return null===e||'number'!=typeof e?t:"rgba("+((4278190080&(e=e||0))>>>24)+", "+((16711680&e)>>>16)+", "+((65280&e)>>>8)+", "+(255&e)/255+")"}var i=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g;function o(t){var e=t.outputRange;_r(d[2])(e.length>=2,'Bad output range'),u(e=e.map(r));var a=e[0].match(i).map(function(){return[]});e.forEach(function(t){t.match(i).forEach(function(t,e){a[e].push(+t)})});var o,c=e[0].match(i).map(function(e,r){return n(_r(d[4])({},t,{outputRange:a[r]}))}),l='string'==typeof(o=e[0])&&o.startsWith('rgb');return function(t){var n=0;return e[0].replace(i,function(){var e=+c[n++](t);return l&&(e=n<4?Math.round(e):Math.round(1e3*e)/1e3),String(e)})}}function u(t){for(var e=t[0].replace(i,''),n=1;n=t);++n);return n-1}function l(t){_r(d[2])(t.length>=2,'inputRange must have at least 2 elements');for(var e=1;e=t[e-1],'inputRange must be monotonically non-decreasing '+t)}function p(t,e){_r(d[2])(e.length>=2,t+' must have at least 2 elements'),_r(d[2])(2!==e.length||e[0]!==-1/0||e[1]!==1/0,t+'cannot be ]-infinity;+infinity[ '+e)}var f=(function(e){_r(d[5])(o,e);var a,r,i=(a=o,r=t(),function(){var t,e=_r(d[0])(a);if(r){var n=_r(d[0])(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return _r(d[1])(this,t)});function o(t,e){var a;return _r(d[6])(this,o),(a=i.call(this))._parent=t,a._config=e,a._interpolation=n(e),a}return _r(d[7])(o,[{key:"__makeNative",value:function(){this._parent.__makeNative(),_r(d[8])(_r(d[0])(o.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){var t=this._parent.__getValue();return _r(d[2])('number'==typeof t,'Cannot interpolate an input which is not a number.'),this._interpolation(t)}},{key:"interpolate",value:function(t){return new o(this,t)}},{key:"__attach",value:function(){this._parent.__addChild(this)}},{key:"__detach",value:function(){this._parent.__removeChild(this),_r(d[8])(_r(d[0])(o.prototype),"__detach",this).call(this)}},{key:"__transformDataType",value:function(t){return t.map(_r(d[9]).transformDataType)}},{key:"__getNativeConfig",value:function(){return{inputRange:this._config.inputRange,outputRange:this.__transformDataType(this._config.outputRange),extrapolateLeft:this._config.extrapolateLeft||this._config.extrapolate||'extend',extrapolateRight:this._config.extrapolateRight||this._config.extrapolate||'extend',type:'interpolation'}}}]),o})(_r(d[10]));f.__createInterpolation=n,m.exports=f},217,[15,12,18,142,29,10,7,8,84,214,218]); +__d(function(g,r,_i,a,m,_e,d){'use strict';function t(t,i){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=e(t))||i&&t&&"number"==typeof t.length){n&&(t=n);var o=0;return function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function e(t,e){if(t){if("string"==typeof t)return i(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(t,e):void 0}}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i0?setTimeout(h,0):setImmediate(h))}function h(){l=0;var f=o.size;c.forEach(function(n){return o.add(n)}),s.forEach(function(n){return o.delete(n)});var h=o.size;if(0!==f&&0===h?n.emit(t.Events.interactionComplete):0===f&&0!==h&&n.emit(t.Events.interactionStart),0===h)for(;u.hasTasksToProcess();)if(u.processNext(),p>0&&r(d[4]).getEventLoopRunningTime()>=p){v();break}c.clear(),s.clear()}m.exports=t},220,[3,5,18,221,30]); +__d(function(g,r,i,a,m,_e,d){'use strict';var e=(function(){function e(t){var u=t.onMoreTasks;r(d[0])(this,e),this._onMoreTasks=u,this._queueStack=[{tasks:[],popable:!1}]}return r(d[1])(e,[{key:"enqueue",value:function(e){this._getCurrentQueue().push(e)}},{key:"enqueueTasks",value:function(e){var t=this;e.forEach(function(e){return t.enqueue(e)})}},{key:"cancelTasks",value:function(e){this._queueStack=this._queueStack.map(function(t){return r(d[2])({},t,{tasks:t.tasks.filter(function(t){return-1===e.indexOf(t)})})}).filter(function(e,t){return e.tasks.length>0||0===t})}},{key:"hasTasksToProcess",value:function(){return this._getCurrentQueue().length>0}},{key:"processNext",value:function(){var e=this._getCurrentQueue();if(e.length){var t=e.shift();try{'object'==typeof t&&t.gen?this._genPromise(t):'object'==typeof t&&t.run?t.run():(r(d[3])('function'==typeof t,'Expected Function, SimpleTask, or PromiseTask, but got:\n'+JSON.stringify(t,null,2)),t())}catch(e){throw e.message='TaskQueue: Error with task '+(t.name||'')+': '+e.message,e}}}},{key:"_getCurrentQueue",value:function(){var e=this._queueStack.length-1,t=this._queueStack[e];return t.popable&&0===t.tasks.length&&this._queueStack.length>1?(this._queueStack.pop(),this._getCurrentQueue()):t.tasks}},{key:"_genPromise",value:function(e){var t=this;this._queueStack.push({tasks:[],popable:!1});var u=this._queueStack.length-1,s=this._queueStack[u];e.gen().then(function(){s.popable=!0,t.hasTasksToProcess()&&t._onMoreTasks()}).catch(function(t){throw t.message="TaskQueue: Error resolving Promise in task "+e.name+": "+t.message,t}).done()}}]),e})();m.exports=e},221,[7,8,29,18]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=1,n=(function(n){r(d[2])(o,n);var s,u,f=(s=o,u=t(),function(){var t,e=r(d[0])(s);if(u){var n=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function o(t){var e;r(d[3])(this,o),e=f.call(this);var n=t||{x:0,y:0};return'number'==typeof n.x&&'number'==typeof n.y?(e.x=new(r(d[4]))(n.x),e.y=new(r(d[4]))(n.y)):(r(d[5])(n.x instanceof r(d[4])&&n.y instanceof r(d[4]),"AnimatedValueXY must be initialized with an object of numbers or AnimatedValues."),e.x=n.x,e.y=n.y),e._listeners={},e}return r(d[6])(o,[{key:"setValue",value:function(t){this.x.setValue(t.x),this.y.setValue(t.y)}},{key:"setOffset",value:function(t){this.x.setOffset(t.x),this.y.setOffset(t.y)}},{key:"flattenOffset",value:function(){this.x.flattenOffset(),this.y.flattenOffset()}},{key:"extractOffset",value:function(){this.x.extractOffset(),this.y.extractOffset()}},{key:"__getValue",value:function(){return{x:this.x.__getValue(),y:this.y.__getValue()}}},{key:"resetAnimation",value:function(t){this.x.resetAnimation(),this.y.resetAnimation(),t&&t(this.__getValue())}},{key:"stopAnimation",value:function(t){this.x.stopAnimation(),this.y.stopAnimation(),t&&t(this.__getValue())}},{key:"addListener",value:function(t){var n=this,s=String(e++),u=function(e){e.value;t(n.__getValue())};return this._listeners[s]={x:this.x.addListener(u),y:this.y.addListener(u)},s}},{key:"removeListener",value:function(t){this.x.removeListener(this._listeners[t].x),this.y.removeListener(this._listeners[t].y),delete this._listeners[t]}},{key:"removeAllListeners",value:function(){this.x.removeAllListeners(),this.y.removeAllListeners(),this._listeners={}}},{key:"getLayout",value:function(){return{left:this.x,top:this.y}}},{key:"getTranslateTransform",value:function(){return[{translateX:this.x},{translateY:this.y}]}}]),o})(r(d[7]));m.exports=n},222,[15,12,10,7,213,18,8,218]); +__d(function(g,r,_i,_a,m,e,d){'use strict';var n=function(n,t){return n&&t.onComplete?function(){t.onComplete&&t.onComplete.apply(t,arguments),n&&n.apply(void 0,arguments)}:n||t.onComplete},t=function(n,t,i){if(n instanceof r(d[6])){var o=r(d[7])({},t),u=r(d[7])({},t);for(var s in t){var c=t[s],f=c.x,v=c.y;void 0!==f&&void 0!==v&&(o[s]=f,u[s]=v)}var p=i(n.x,o),l=i(n.y,u);return a([p,l],{stopTogether:!1})}return null},i=function i(o,a){var u=function(t,i,o){o=n(o,i);var a=t,u=i;a.stopTracking(),i.toValue instanceof r(d[8])?a.track(new(r(d[9]))(a,i.toValue,r(d[11]),u,o)):a.animate(new(r(d[11]))(u),o)};return t(o,a,i)||{start:function(n){u(o,a,n)},stop:function(){o.stopAnimation()},reset:function(){o.resetAnimation()},_startNativeLoop:function(n){var t=r(d[7])({},a,{iterations:n});u(o,t)},_isUsingNativeDriver:function(){return a.useNativeDriver||!1}}},o=function(n){var t=0;return{start:function(i){0===n.length?i&&i({finished:!0}):n[t].start(function o(a){a.finished&&++t!==n.length?n[t].start(o):i&&i(a)})},stop:function(){t1&&void 0!==arguments[1]?arguments[1]:{},i=t.iterations,o=void 0===i?-1:i,a=t.resetBeforeIteration,u=void 0===a||a,s=!1,c=0;return{start:function(t){n&&0!==o?n._isUsingNativeDriver()?n._startNativeLoop(o):(function i(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{finished:!0};s||c===o||!1===a.finished?t&&t(a):(c++,u&&n.reset(),n.start(i))})():t&&t({finished:!0})},stop:function(){s=!0,n.stop()},reset:function(){c=0,s=!1,n.reset()},_startNativeLoop:function(){throw new Error('Loops run using the native driver cannot contain Animated.loop animations')},_isUsingNativeDriver:function(){return n._isUsingNativeDriver()}}},event:function(n,t){var i=new(r(d[14]).AnimatedEvent)(n,t);return i.__isNative?i:i.__getHandler()},createAnimatedComponent:r(d[16]),attachNativeEvent:r(d[14]).attachNativeEvent,forkEvent:function(n,t){return n?n instanceof r(d[14]).AnimatedEvent?(n.__addListener(t),n):function(){'function'==typeof n&&n.apply(void 0,arguments),t.apply(void 0,arguments)}:t},unforkEvent:function(n,t){n&&n instanceof r(d[14]).AnimatedEvent&&n.__removeListener(t)},Event:r(d[14]).AnimatedEvent}},223,[224,225,226,227,228,229,222,29,219,230,231,234,237,213,238,217,239]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(u,e);var n,a,_=(n=u,a=t(),function(){var t,e=r(d[0])(n);if(a){var _=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,_)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function u(t,e){var n;return r(d[3])(this,u),(n=_.call(this))._a='number'==typeof t?new(r(d[4]))(t):t,n._b='number'==typeof e?new(r(d[4]))(e):e,n}return r(d[5])(u,[{key:"__makeNative",value:function(){this._a.__makeNative(),this._b.__makeNative(),r(d[6])(r(d[0])(u.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){return this._a.__getValue()+this._b.__getValue()}},{key:"interpolate",value:function(t){return new(r(d[7]))(this,t)}},{key:"__attach",value:function(){this._a.__addChild(this),this._b.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),this._b.__removeChild(this),r(d[6])(r(d[0])(u.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'addition',input:[this._a.__getNativeTag(),this._b.__getNativeTag()]}}}]),u})(r(d[8]));m.exports=e},224,[15,12,10,7,213,8,84,217,218]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(u,e);var n,a,_=(n=u,a=t(),function(){var t,e=r(d[0])(n);if(a){var _=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,_)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function u(t,e){var n;return r(d[3])(this,u),(n=_.call(this))._a='number'==typeof t?new(r(d[4]))(t):t,n._b='number'==typeof e?new(r(d[4]))(e):e,n}return r(d[5])(u,[{key:"__makeNative",value:function(){this._a.__makeNative(),this._b.__makeNative(),r(d[6])(r(d[0])(u.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){return this._a.__getValue()-this._b.__getValue()}},{key:"interpolate",value:function(t){return new(r(d[7]))(this,t)}},{key:"__attach",value:function(){this._a.__addChild(this),this._b.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),this._b.__removeChild(this),r(d[6])(r(d[0])(u.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'subtraction',input:[this._a.__getNativeTag(),this._b.__getNativeTag()]}}}]),u})(r(d[8]));m.exports=e},225,[15,12,10,7,213,8,84,217,218]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(_,e);var n,o,a=(n=_,o=t(),function(){var t,e=r(d[0])(n);if(o){var a=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,a)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function _(t,e){var n;return r(d[3])(this,_),(n=a.call(this))._warnedAboutDivideByZero=!1,(0===e||e instanceof r(d[4])&&0===e.__getValue())&&console.error('Detected potential division by zero in AnimatedDivision'),n._a='number'==typeof t?new(r(d[5]))(t):t,n._b='number'==typeof e?new(r(d[5]))(e):e,n}return r(d[6])(_,[{key:"__makeNative",value:function(){this._a.__makeNative(),this._b.__makeNative(),r(d[7])(r(d[0])(_.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){var t=this._a.__getValue(),e=this._b.__getValue();return 0===e?(this._warnedAboutDivideByZero||(console.error('Detected division by zero in AnimatedDivision'),this._warnedAboutDivideByZero=!0),0):(this._warnedAboutDivideByZero=!1,t/e)}},{key:"interpolate",value:function(t){return new(r(d[8]))(this,t)}},{key:"__attach",value:function(){this._a.__addChild(this),this._b.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),this._b.__removeChild(this),r(d[7])(r(d[0])(_.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'division',input:[this._a.__getNativeTag(),this._b.__getNativeTag()]}}}]),_})(r(d[9]));m.exports=e},226,[15,12,10,7,219,213,8,84,217,218]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(u,e);var n,a,_=(n=u,a=t(),function(){var t,e=r(d[0])(n);if(a){var _=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,_)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function u(t,e){var n;return r(d[3])(this,u),(n=_.call(this))._a='number'==typeof t?new(r(d[4]))(t):t,n._b='number'==typeof e?new(r(d[4]))(e):e,n}return r(d[5])(u,[{key:"__makeNative",value:function(){this._a.__makeNative(),this._b.__makeNative(),r(d[6])(r(d[0])(u.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){return this._a.__getValue()*this._b.__getValue()}},{key:"interpolate",value:function(t){return new(r(d[7]))(this,t)}},{key:"__attach",value:function(){this._a.__addChild(this),this._b.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),this._b.__removeChild(this),r(d[6])(r(d[0])(u.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'multiplication',input:[this._a.__getNativeTag(),this._b.__getNativeTag()]}}}]),u})(r(d[8]));m.exports=e},227,[15,12,10,7,213,8,84,217,218]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(o,e);var u,n,a=(u=o,n=t(),function(){var t,e=r(d[0])(u);if(n){var a=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,a)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function o(t,e){var u;return r(d[3])(this,o),(u=a.call(this))._a=t,u._modulus=e,u}return r(d[4])(o,[{key:"__makeNative",value:function(){this._a.__makeNative(),r(d[5])(r(d[0])(o.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){return(this._a.__getValue()%this._modulus+this._modulus)%this._modulus}},{key:"interpolate",value:function(t){return new(r(d[6]))(this,t)}},{key:"__attach",value:function(){this._a.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),r(d[5])(r(d[0])(o.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'modulus',input:this._a.__getNativeTag(),modulus:this._modulus}}}]),o})(r(d[7]));m.exports=e},228,[15,12,10,7,8,84,217,218]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(_,e);var a,n,u=(a=_,n=t(),function(){var t,e=r(d[0])(a);if(n){var u=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,u)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function _(t,e,a){var n;return r(d[3])(this,_),(n=u.call(this))._a=t,n._min=e,n._max=a,n._value=n._lastValue=n._a.__getValue(),n}return r(d[4])(_,[{key:"__makeNative",value:function(){this._a.__makeNative(),r(d[5])(r(d[0])(_.prototype),"__makeNative",this).call(this)}},{key:"interpolate",value:function(t){return new(r(d[6]))(this,t)}},{key:"__getValue",value:function(){var t=this._a.__getValue(),e=t-this._lastValue;return this._lastValue=t,this._value=Math.min(Math.max(this._value+e,this._min),this._max),this._value}},{key:"__attach",value:function(){this._a.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),r(d[5])(r(d[0])(_.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'diffclamp',input:this._a.__getNativeTag(),min:this._min,max:this._max}}}]),_})(r(d[7]));m.exports=e},229,[15,12,10,7,8,84,217,218]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(u,e);var n,_,o=(n=u,_=t(),function(){var t,e=r(d[0])(n);if(_){var o=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,o)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function u(t,e,n,_,s){var l;return r(d[3])(this,u),(l=o.call(this))._value=t,l._parent=e,l._animationClass=n,l._animationConfig=_,l._useNativeDriver=r(d[4]).shouldUseNativeDriver(_),l._callback=s,l.__attach(),l}return r(d[5])(u,[{key:"__makeNative",value:function(){this.__isNative=!0,this._parent.__makeNative(),r(d[6])(r(d[0])(u.prototype),"__makeNative",this).call(this),this._value.__makeNative()}},{key:"__getValue",value:function(){return this._parent.__getValue()}},{key:"__attach",value:function(){this._parent.__addChild(this),this._useNativeDriver&&this.__makeNative()}},{key:"__detach",value:function(){this._parent.__removeChild(this),r(d[6])(r(d[0])(u.prototype),"__detach",this).call(this)}},{key:"update",value:function(){this._value.animate(new this._animationClass(r(d[7])({},this._animationConfig,{toValue:this._animationConfig.toValue.__getValue()})),this._callback)}},{key:"__getNativeConfig",value:function(){var t=new this._animationClass(r(d[7])({},this._animationConfig,{toValue:void 0})).__getNativeAnimationConfig();return{type:'tracking',animationId:r(d[4]).generateNewAnimationId(),animationConfig:t,toValue:this._parent.__getNativeTag(),value:this._value.__getNativeTag()}}}]),u})(r(d[8]));m.exports=e},230,[15,12,10,7,214,8,84,29,219]); +__d(function(g,r,i,a,_m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var s=(function(s){r(d[2])(l,s);var e,n,o=(e=l,n=t(),function(){var t,s=r(d[0])(e);if(n){var o=r(d[0])(this).constructor;t=Reflect.construct(s,arguments,o)}else t=s.apply(this,arguments);return r(d[1])(this,t)});function l(t){var s,e,n,h,_,u,f,c,m,v,p,y;if(r(d[3])(this,l),(m=o.call(this))._overshootClamping=null!=(s=t.overshootClamping)&&s,m._restDisplacementThreshold=null!=(e=t.restDisplacementThreshold)?e:.001,m._restSpeedThreshold=null!=(n=t.restSpeedThreshold)?n:.001,m._initialVelocity=null!=(h=t.velocity)?h:0,m._lastVelocity=null!=(_=t.velocity)?_:0,m._toValue=t.toValue,m._delay=null!=(u=t.delay)?u:0,m._useNativeDriver=r(d[4]).shouldUseNativeDriver(t),m.__isInteraction=null!=(f=t.isInteraction)?f:!m._useNativeDriver,m.__iterations=null!=(c=t.iterations)?c:1,void 0!==t.stiffness||void 0!==t.damping||void 0!==t.mass)r(d[5])(void 0===t.bounciness&&void 0===t.speed&&void 0===t.tension&&void 0===t.friction,'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one'),m._stiffness=null!=(v=t.stiffness)?v:100,m._damping=null!=(p=t.damping)?p:10,m._mass=null!=(y=t.mass)?y:1;else if(void 0!==t.bounciness||void 0!==t.speed){var V,T;r(d[5])(void 0===t.tension&&void 0===t.friction&&void 0===t.stiffness&&void 0===t.damping&&void 0===t.mass,'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one');var b=r(d[6]).fromBouncinessAndSpeed(null!=(V=t.bounciness)?V:8,null!=(T=t.speed)?T:12);m._stiffness=b.stiffness,m._damping=b.damping,m._mass=1}else{var M,D,P=r(d[6]).fromOrigamiTensionAndFriction(null!=(M=t.tension)?M:40,null!=(D=t.friction)?D:7);m._stiffness=P.stiffness,m._damping=P.damping,m._mass=1}return r(d[5])(m._stiffness>0,'Stiffness value must be greater than 0'),r(d[5])(m._damping>0,'Damping value must be greater than 0'),r(d[5])(m._mass>0,'Mass value must be greater than 0'),m}return r(d[7])(l,[{key:"__getNativeAnimationConfig",value:function(){var t;return{type:'spring',overshootClamping:this._overshootClamping,restDisplacementThreshold:this._restDisplacementThreshold,restSpeedThreshold:this._restSpeedThreshold,stiffness:this._stiffness,damping:this._damping,mass:this._mass,initialVelocity:null!=(t=this._initialVelocity)?t:this._lastVelocity,toValue:this._toValue,iterations:this.__iterations}}},{key:"start",value:function(t,s,e,n,o){var h=this;if(this.__active=!0,this._startPosition=t,this._lastPosition=this._startPosition,this._onUpdate=s,this.__onEnd=e,this._lastTime=Date.now(),this._frameTime=0,n instanceof l){var _=n.getInternalState();this._lastPosition=_.lastPosition,this._lastVelocity=_.lastVelocity,this._initialVelocity=this._lastVelocity,this._lastTime=_.lastTime}var u=function(){h._useNativeDriver?h.__startNativeAnimation(o):h.onUpdate()};this._delay?this._timeout=setTimeout(u,this._delay):u()}},{key:"getInternalState",value:function(){return{lastPosition:this._lastPosition,lastVelocity:this._lastVelocity,lastTime:this._lastTime}}},{key:"onUpdate",value:function(){var t=Date.now();t>this._lastTime+64&&(t=this._lastTime+64);var s=(t-this._lastTime)/1e3;this._frameTime+=s;var e=this._damping,n=this._mass,o=this._stiffness,l=-this._initialVelocity,h=e/(2*Math.sqrt(o*n)),_=Math.sqrt(o/n),u=_*Math.sqrt(1-h*h),f=this._toValue-this._startPosition,c=0,m=0,v=this._frameTime;if(h<1){var p=Math.exp(-h*_*v);c=this._toValue-p*((l+h*_*f)/u*Math.sin(u*v)+f*Math.cos(u*v)),m=h*_*p*(Math.sin(u*v)*(l+h*_*f)/u+f*Math.cos(u*v))-p*(Math.cos(u*v)*(l+h*_*f)-u*f*Math.sin(u*v))}else{var y=Math.exp(-_*v);c=this._toValue-y*(f+(l+_*f)*v),m=y*(l*(v*_-1)+v*f*(_*_))}if(this._lastTime=t,this._lastPosition=c,this._lastVelocity=m,this._onUpdate(c),this.__active){var V=!1;this._overshootClamping&&0!==this._stiffness&&(V=this._startPositionthis._toValue:c18&&A<=44?p(A):h(A),s(2*M-M*M,v,.01));return{stiffness:n(x),damping:t(B)}}}},232,[]); +__d(function(g,r,i,a,m,_e,d){'use strict';var t=1,n=(function(){function n(){r(d[0])(this,n)}return r(d[1])(n,[{key:"start",value:function(t,n,e,o,_){}},{key:"stop",value:function(){this.__nativeId&&r(d[2]).API.stopAnimation(this.__nativeId)}},{key:"__getNativeAnimationConfig",value:function(){throw new Error('This animation type cannot be offloaded to native')}},{key:"__debouncedOnEnd",value:function(t){var n=this.__onEnd;this.__onEnd=null,n&&n(t)}},{key:"__startNativeAnimation",value:function(n){var e=t+":startAnimation";t+=1,r(d[2]).API.setWaitingForIdentifier(e);try{n.__makeNative(),this.__nativeId=r(d[2]).generateNewAnimationId(),r(d[2]).API.startAnimatingNode(this.__nativeId,n.__getNativeTag(),this.__getNativeAnimationConfig(),this.__debouncedOnEnd.bind(this))}catch(t){throw t}finally{r(d[2]).API.unsetWaitingForIdentifier(e)}}}]),n})();m.exports=n},233,[7,8,214]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e;function n(){if(!e){var t=r(d[2]);e=t.inOut(t.ease)}return e}var s=(function(e){r(d[3])(_,e);var s,o,u=(s=_,o=t(),function(){var t,e=r(d[0])(s);if(o){var n=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function _(t){var e,s,o,h,l,c;return r(d[4])(this,_),(c=u.call(this))._toValue=t.toValue,c._easing=null!=(e=t.easing)?e:n(),c._duration=null!=(s=t.duration)?s:500,c._delay=null!=(o=t.delay)?o:0,c.__iterations=null!=(h=t.iterations)?h:1,c._useNativeDriver=r(d[5]).shouldUseNativeDriver(t),c.__isInteraction=null!=(l=t.isInteraction)?l:!c._useNativeDriver,c}return r(d[6])(_,[{key:"__getNativeAnimationConfig",value:function(){for(var t=[],e=Math.round(this._duration/16.666666666666668),n=0;n=this._startTime+this._duration)return 0===this._duration?this._onUpdate(this._toValue):this._onUpdate(this._fromValue+this._easing(1)*(this._toValue-this._fromValue)),void this.__debouncedOnEnd({finished:!0});this._onUpdate(this._fromValue+this._easing((t-this._startTime)/this._duration)*(this._toValue-this._fromValue)),this.__active&&(this._animationFrame=requestAnimationFrame(this.onUpdate.bind(this)))}},{key:"stop",value:function(){r(d[7])(r(d[0])(_.prototype),"stop",this).call(this),this.__active=!1,clearTimeout(this._timeout),g.cancelAnimationFrame(this._animationFrame),this.__debouncedOnEnd({finished:!1})}}]),_})(r(d[8]));m.exports=s},234,[15,12,235,10,7,214,8,84,233]); +__d(function(g,r,i,a,m,e,d){'use strict';var n,u=(function(){function u(){r(d[0])(this,u)}return r(d[1])(u,null,[{key:"step0",value:function(n){return n>0?1:0}},{key:"step1",value:function(n){return n>=1?1:0}},{key:"linear",value:function(n){return n}},{key:"ease",value:function(t){return n||(n=u.bezier(.42,0,1,1)),n(t)}},{key:"quad",value:function(n){return n*n}},{key:"cubic",value:function(n){return n*n*n}},{key:"poly",value:function(n){return function(u){return Math.pow(u,n)}}},{key:"sin",value:function(n){return 1-Math.cos(n*Math.PI/2)}},{key:"circle",value:function(n){return 1-Math.sqrt(1-n*n)}},{key:"exp",value:function(n){return Math.pow(2,10*(n-1))}},{key:"elastic",value:function(){var n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:1)*Math.PI;return function(u){return 1-Math.pow(Math.cos(u*Math.PI/2),3)*Math.cos(u*n)}}},{key:"back",value:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1.70158;return function(u){return u*u*((n+1)*u-n)}}},{key:"bounce",value:function(n){if(n<.36363636363636365)return 7.5625*n*n;if(n<.7272727272727273){var u=n-.5454545454545454;return 7.5625*u*u+.75}if(n<.9090909090909091){var t=n-.8181818181818182;return 7.5625*t*t+.9375}var o=n-.9545454545454546;return 7.5625*o*o+.984375}},{key:"bezier",value:function(n,u,t,o){return r(d[2])(n,u,t,o)}},{key:"in",value:function(n){return n}},{key:"out",value:function(n){return function(u){return 1-n(1-u)}}},{key:"inOut",value:function(n){return function(u){return u<.5?n(2*u)/2:1-n(2*(1-u))/2}}}]),u})();m.exports=u},235,[7,8,236]); +__d(function(g,r,_i,a,m,e,d){'use strict';var n=4,t=.001,u=1e-7,o=10,f=.1,i='function'==typeof Float32Array;function c(n,t){return 1-3*t+3*n}function v(n,t){return 3*t-6*n}function s(n){return 3*n}function w(n,t,u){return((c(t,u)*n+v(t,u))*n+s(t))*n}function l(n,t,u){return 3*c(t,u)*n*n+2*v(t,u)*n+s(t)}function y(n,t,f,i,c){var v,s,l=0,y=t,b=f;do{(v=w(s=y+(b-y)/2,i,c)-n)>0?b=s:y=s}while(Math.abs(v)>u&&++l=0&&n<=1&&o>=0&&o<=1))throw new Error('bezier x values must be in [0, 1] range');var v=i?new Float32Array(11):new Array(11);if(n!==u||o!==c)for(var s=0;s<11;++s)v[s]=w(s*f,n,o);function h(u){for(var i=0,c=1;10!==c&&v[c]<=u;++c)i+=f;var s=i+(u-v[--c])/(v[c+1]-v[c])*f,w=l(s,n,o);return w>=t?b(u,s,n,o):0===w?s:y(u,i,i+f,n,o)}return function(t){return n===u&&o===c?t:0===t?0:1===t?1:w(h(t),u,c)}}},236,[]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(c,e);var n,s,o=(n=c,s=t(),function(){var t,e=r(d[0])(n);if(s){var o=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,o)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function c(t){var e,n,s,u;return r(d[3])(this,c),(u=o.call(this))._deceleration=null!=(e=t.deceleration)?e:.998,u._velocity=t.velocity,u._useNativeDriver=r(d[4]).shouldUseNativeDriver(t),u.__isInteraction=null!=(n=t.isInteraction)?n:!u._useNativeDriver,u.__iterations=null!=(s=t.iterations)?s:1,u}return r(d[5])(c,[{key:"__getNativeAnimationConfig",value:function(){return{type:'decay',deceleration:this._deceleration,velocity:this._velocity,iterations:this.__iterations}}},{key:"start",value:function(t,e,n,s,o){this.__active=!0,this._lastValue=t,this._fromValue=t,this._onUpdate=e,this.__onEnd=n,this._startTime=Date.now(),this._useNativeDriver?this.__startNativeAnimation(o):this._animationFrame=requestAnimationFrame(this.onUpdate.bind(this))}},{key:"onUpdate",value:function(){var t=Date.now(),e=this._fromValue+this._velocity/(1-this._deceleration)*(1-Math.exp(-(1-this._deceleration)*(t-this._startTime)));this._onUpdate(e),Math.abs(this._lastValue-e)<.1?this.__debouncedOnEnd({finished:!0}):(this._lastValue=e,this.__active&&(this._animationFrame=requestAnimationFrame(this.onUpdate.bind(this))))}},{key:"stop",value:function(){r(d[6])(r(d[0])(c.prototype),"stop",this).call(this),this.__active=!1,g.cancelAnimationFrame(this._animationFrame),this.__debouncedOnEnd({finished:!1})}}]),c})(r(d[7]));m.exports=e},237,[15,12,10,7,214,8,84,233]); +__d(function(g,r,i,a,m,e,d){'use strict';function t(t,n,s){var v=[];r(d[1])(s[0]&&s[0].nativeEvent,'Native driven events only support animated values contained inside `nativeEvent`.'),(function t(n,s){if(n instanceof r(d[0]))n.__makeNative(),v.push({nativeEventPath:s,animatedValueTag:n.__getNativeTag()});else if('object'==typeof n)for(var o in n)t(n[o],s.concat(o))})(s[0].nativeEvent,[]);var o=r(d[2]).findNodeHandle(t);return null!=o&&v.forEach(function(t){r(d[3]).API.addAnimatedEventToView(o,n,t)}),{detach:function(){null!=o&&v.forEach(function(t){r(d[3]).API.removeAnimatedEventFromView(o,n,t.animatedValueTag)})}}}var n=(function(){function n(t,s){r(d[4])(this,n),this._listeners=[],this._argMapping=t,null==s&&(console.warn('Animated.event now requires a second argument for options'),s={useNativeDriver:!1}),s.listener&&this.__addListener(s.listener),this._callListeners=this._callListeners.bind(this),this._attachedEvent=null,this.__isNative=r(d[3]).shouldUseNativeDriver(s)}return r(d[5])(n,[{key:"__addListener",value:function(t){this._listeners.push(t)}},{key:"__removeListener",value:function(t){this._listeners=this._listeners.filter(function(n){return n!==t})}},{key:"__attach",value:function(n,s){r(d[1])(this.__isNative,'Only native driven events need to be attached.'),this._attachedEvent=t(n,s,this._argMapping)}},{key:"__detach",value:function(t,n){r(d[1])(this.__isNative,'Only native driven events need to be detached.'),this._attachedEvent&&this._attachedEvent.detach()}},{key:"__getHandler",value:function(){var t=this;if(this.__isNative)return this._callListeners;return function(){for(var n=arguments.length,s=new Array(n),v=0;v1){for(var l=[],s=0;s1?Math.ceil(e.length/n):e.length}return 0},t._keyExtractor=function(e,n){var o,l=v(t.props.numColumns),s=null!=(o=t.props.keyExtractor)?o:r(d[10]).keyExtractor;return l>1?Array.isArray(e)?e.map(function(e,t){return s(e,n*l+t)}).join(':'):void r(d[11])(Array.isArray(e),"FlatList: Encountered internal consistency error, expected each item to consist of an array with 1-%s columns; instead, received a single item.",l):s(e,n)},t._renderer=function(){var e=t.props,o=e.ListItemComponent,l=e.renderItem,s=e.columnWrapperStyle,u=v(t.props.numColumns),c=o?'ListItemComponent':'renderItem',f=function(e){return o?h.createElement(o,e):l?l(e):null};return(0,n.default)({},c,function(e){if(u>1){var t=e.item,n=e.index;return r(d[11])(Array.isArray(t),'Expected array of items with numColumns > 1'),h.createElement(r(d[12]),{style:r(d[13]).compose(y.row,s)},t.map(function(t,o){var l=f({item:t,index:n*u+o,separators:e.separators});return null!=l?h.createElement(h.Fragment,{key:o},l):null}))}return f(e)})},t._checkProps(t.props),t.props.viewabilityConfigCallbackPairs?t._virtualizedListPairs=t.props.viewabilityConfigCallbackPairs.map(function(e){return{viewabilityConfig:e.viewabilityConfig,onViewableItemsChanged:t._createOnViewableItemsChanged(e.onViewableItemsChanged)}}):t.props.onViewableItemsChanged&&t._virtualizedListPairs.push({viewabilityConfig:t.props.viewabilityConfig,onViewableItemsChanged:t._createOnViewableItemsChanged(t.props.onViewableItemsChanged)}),t}return(0,l.default)(k,[{key:"scrollToEnd",value:function(e){this._listRef&&this._listRef.scrollToEnd(e)}},{key:"scrollToIndex",value:function(e){this._listRef&&this._listRef.scrollToIndex(e)}},{key:"scrollToItem",value:function(e){this._listRef&&this._listRef.scrollToItem(e)}},{key:"scrollToOffset",value:function(e){this._listRef&&this._listRef.scrollToOffset(e)}},{key:"recordInteraction",value:function(){this._listRef&&this._listRef.recordInteraction()}},{key:"flashScrollIndicators",value:function(){this._listRef&&this._listRef.flashScrollIndicators()}},{key:"getScrollResponder",value:function(){if(this._listRef)return this._listRef.getScrollResponder()}},{key:"getNativeScrollRef",value:function(){if(this._listRef)return this._listRef.getScrollRef()}},{key:"getScrollableNode",value:function(){if(this._listRef)return this._listRef.getScrollableNode()}},{key:"setNativeProps",value:function(e){this._listRef&&this._listRef.setNativeProps(e)}},{key:"componentDidUpdate",value:function(e){r(d[11])(e.numColumns===this.props.numColumns,"Changing numColumns on the fly is not supported. Change the key prop on FlatList when changing the number of columns to force a fresh render of the component."),r(d[11])(e.onViewableItemsChanged===this.props.onViewableItemsChanged,'Changing onViewableItemsChanged on the fly is not supported'),r(d[11])(!r(d[14])(e.viewabilityConfig,this.props.viewabilityConfig),'Changing viewabilityConfig on the fly is not supported'),r(d[11])(e.viewabilityConfigCallbackPairs===this.props.viewabilityConfigCallbackPairs,'Changing viewabilityConfigCallbackPairs on the fly is not supported'),this._checkProps(this.props)}},{key:"_checkProps",value:function(e){var t=e.getItem,n=e.getItemCount,o=e.horizontal,l=e.columnWrapperStyle,s=e.onViewableItemsChanged,u=e.viewabilityConfigCallbackPairs,c=v(this.props.numColumns);r(d[11])(!t&&!n,'FlatList does not support custom data formats.'),c>1?r(d[11])(!o,'numColumns does not support horizontal.'):r(d[11])(!l,'columnWrapperStyle not supported for single column lists'),r(d[11])(!(s&&u),"FlatList does not support setting both onViewableItemsChanged and viewabilityConfigCallbackPairs.")}},{key:"_pushMultiColumnViewable",value:function(e,n){var o,l=v(this.props.numColumns),s=null!=(o=this.props.keyExtractor)?o:r(d[10]).keyExtractor;n.item.forEach(function(o,u){r(d[11])(null!=n.index,'Missing index!');var c=n.index*l+u;e.push((0,t.default)({},n,{item:o,key:s(o,c),index:c}))})}},{key:"_createOnViewableItemsChanged",value:function(e){var t=this;return function(n){var o=v(t.props.numColumns);if(e)if(o>1){var l=[],s=[];n.viewableItems.forEach(function(e){return t._pushMultiColumnViewable(s,e)}),n.changed.forEach(function(e){return t._pushMultiColumnViewable(l,e)}),e({viewableItems:s,changed:l})}else e(n)}}},{key:"render",value:function(){var n,o=this.props,l=(o.numColumns,o.columnWrapperStyle,o.removeClippedSubviews),s=(0,e.default)(o,f);return h.createElement(r(d[15]),(0,t.default)({},s,{getItem:this._getItem,getItemCount:this._getItemCount,keyExtractor:this._keyExtractor,ref:this._captureRef,viewabilityConfigCallbackPairs:this._virtualizedListPairs,removeClippedSubviews:(n=l,null==n||n)},this._renderer()))}}]),k})(h.PureComponent),y=r(d[13]).create({row:{flexDirection:'row'}});m.exports=C},246,[3,103,29,247,7,8,10,12,15,129,248,18,174,173,166,249]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t,n,o){return n in t?Object.defineProperty(t,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[n]=o,t},m.exports.__esModule=!0,m.exports.default=m.exports},247,[]); +__d(function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.computeWindowedRenderLimits=function(n,s,o,u,c,h,v){var b=s(n);if(0===b)return c;var M=v.offset,y=v.velocity,x=v.visibleLength,p=Math.max(0,M),w=p+x,O=(u-1)*x,k=y>1?'after':y<-1?'before':'none',_=Math.max(0,p-.5*O),j=Math.max(0,w+.5*O);if(h(b-1).offset<_)return{first:Math.max(0,b-1-o),last:b-1};var L=f([_,p,w,j],b,h),S=(0,t.default)(L,4),C=S[0],E=S[1],J=S[2],N=S[3];C=null==C?0:C,E=null==E?Math.max(0,C):E,N=null==N?b-1:N,J=null==J?Math.min(N,E+o-1):J;var R={first:E,last:J},B=l(c,R);for(;!(E<=C&&J>=N);){var F=B>=o,P=E<=c.first||E>c.last,T=E>C&&(!F||!P),W=J>=c.last||J=E&&E>=0&&J=C&&J<=N&&E<=R.first&&J>=R.last))throw new Error('Bad window calculation '+JSON.stringify({first:E,last:J,itemCount:b,overscanFirst:C,overscanLast:N,visible:R}));return{first:E,last:J}},e.elementsThatOverlapOffsets=f,e.keyExtractor=function(t,n){if('object'==typeof t&&null!=(null==t?void 0:t.key))return t.key;if('object'==typeof t&&null!=(null==t?void 0:t.id))return t.id;return String(n)},e.newRangeCount=l;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2]));function f(t,f,l){for(var s=[],o=0,u=0;u=t[v]&&(s[v]=u,o++,v===t.length-1))return(0,n.default)(o===t.length,'bad offsets input, should be in increasing order: %s',JSON.stringify(t)),s;return s}function l(t,n){return n.last-n.first+1-Math.max(0,1+Math.min(n.last,t.last)-Math.max(n.first,t.first))}},248,[3,23,18]); +__d(function(g,r,_i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),n=r(d[0])(r(d[4])),s=r(d[0])(r(d[5])),i=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),c=r(d[0])(r(d[8])),h=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var o=u(t);if(o&&o.has(e))return o.get(e);var n={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var l=s?Object.getOwnPropertyDescriptor(e,i):null;l&&(l.get||l.set)?Object.defineProperty(n,i,l):n[i]=e[i]}n.default=e,o&&o.set(e,n);return n})(r(d[9]));function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(u=function(e){return e?o:t})(e)}function p(e,t){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(o)return(o=o.call(e)).next.bind(o);if(Array.isArray(e)||(o=f(e))||t&&e&&"number"==typeof e.length){o&&(e=o);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(e,t){if(e){if("string"==typeof e)return _(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?_(e,t):void 0}}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,n=new Array(t);o0&&t>0&&null!=i.props.initialScrollIndex&&i.props.initialScrollIndex>0&&!i._hasDoneInitialScroll&&(null==i.props.contentOffset&&i.scrollToIndex({animated:!1,index:i.props.initialScrollIndex}),i._hasDoneInitialScroll=!0),i.props.onContentSizeChange&&i.props.onContentSizeChange(e,t),i._scrollMetrics.contentLength=i._selectLength({height:t,width:e}),i._scheduleCellsToRenderUpdate(),i._maybeCallOnEndReached()},i._convertParentScrollMetrics=function(e){var t=e.offset-i._offsetFromParentVirtualizedList,o=e.visibleLength,n=t-i._scrollMetrics.offset;return{visibleLength:o,contentLength:i._scrollMetrics.contentLength,offset:t,dOffset:n}},i._onScroll=function(e){i._nestedChildLists.forEach(function(t){t.ref&&t.ref._onScroll(e)}),i.props.onScroll&&i.props.onScroll(e);var t=e.timeStamp,o=i._selectLength(e.nativeEvent.layoutMeasurement),n=i._selectLength(e.nativeEvent.contentSize),s=i._selectOffset(e.nativeEvent.contentOffset),l=s-i._scrollMetrics.offset;if(i._isNestedWithSameOrientation()){if(0===i._scrollMetrics.contentLength)return;var c=i._convertParentScrollMetrics({visibleLength:o,offset:s});o=c.visibleLength,n=c.contentLength,s=c.offset,l=c.dOffset}var h=i._scrollMetrics.timestamp?Math.max(1,t-i._scrollMetrics.timestamp):1,u=l/h;h>500&&i._scrollMetrics.dt>500&&n>5*o&&!i._hasWarned.perf&&(r(d[14])("VirtualizedList: You have a large list that is slow to update - make sure your renderItem function renders components that follow React performance best practices like PureComponent, shouldComponentUpdate, etc.",{dt:h,prevDt:i._scrollMetrics.dt,contentLength:n}),i._hasWarned.perf=!0),i._scrollMetrics={contentLength:n,dt:h,dOffset:l,offset:s,timestamp:t,velocity:u,visibleLength:o},i._updateViewableItems(i.props.data),i.props&&(i._maybeCallOnEndReached(),0!==u&&i._fillRateHelper.activate(),i._computeBlankness(),i._scheduleCellsToRenderUpdate())},i._onScrollBeginDrag=function(e){i._nestedChildLists.forEach(function(t){t.ref&&t.ref._onScrollBeginDrag(e)}),i._viewabilityTuples.forEach(function(e){e.viewabilityHelper.recordInteraction()}),i._hasInteracted=!0,i.props.onScrollBeginDrag&&i.props.onScrollBeginDrag(e)},i._onScrollEndDrag=function(e){i._nestedChildLists.forEach(function(t){t.ref&&t.ref._onScrollEndDrag(e)});var t=e.nativeEvent.velocity;t&&(i._scrollMetrics.velocity=i._selectOffset(t)),i._computeBlankness(),i.props.onScrollEndDrag&&i.props.onScrollEndDrag(e)},i._onMomentumScrollBegin=function(e){i._nestedChildLists.forEach(function(t){t.ref&&t.ref._onMomentumScrollBegin(e)}),i.props.onMomentumScrollBegin&&i.props.onMomentumScrollBegin(e)},i._onMomentumScrollEnd=function(e){i._nestedChildLists.forEach(function(t){t.ref&&t.ref._onMomentumScrollEnd(e)}),i._scrollMetrics.velocity=0,i._computeBlankness(),i.props.onMomentumScrollEnd&&i.props.onMomentumScrollEnd(e)},i._updateCellsToRender=function(){var e=i.props,t=e.data,o=e.getItemCount,n=M(e.onEndReachedThreshold),s=i._isVirtualizationDisabled();i._updateViewableItems(t),t&&i.setState(function(e){var l,c=i._scrollMetrics,h=c.contentLength,u=c.offset,f=c.visibleLength;if(s){var _=h-f-u0&&h>0&&(i.props.initialScrollIndex&&!i._scrollMetrics.offset||(l=(0,r(d[15]).computeWindowedRenderLimits)(i.props.data,i.props.getItemCount,I(i.props.maxToRenderPerBatch),R(i.props.windowSize),e,i._getFrameMetricsApprox,i._scrollMetrics)));if(l&&i._nestedChildLists.size>0)for(var y=l.first,v=l.last,C=y;C<=v;C++){var L=i._indicesToKeys.get(C),b=L&&i._cellKeysToChildListKeys.get(L);if(b){for(var S,M=!1,x=p(b);!(S=x()).done;){var w=S.value,k=i._nestedChildLists.get(w);if(k&&k.ref&&k.ref.hasMore()){M=!0;break}}if(M){l.last=C;break}}}return null!=l&&l.first===e.first&&l.last===e.last&&(l=null),l})},i._createViewToken=function(e,t){var o=i.props,n=o.data,s=(0,o.getItem)(n,e);return{index:e,item:s,key:i._keyExtractor(s,e),isViewable:t}},i._getFrameMetricsApprox=function(e){var t=i._getFrameMetrics(e);if(t&&t.index===e)return t;var o=i.props.getItemLayout;return r(d[11])(!o,'Should not have to estimate frames when a measurement metrics function is provided'),{length:i._averageCellLength,offset:i._averageCellLength*e}},i._getFrameMetrics=function(e){var t=i.props,o=t.data,n=t.getItem,s=t.getItemCount,l=t.getItemLayout;r(d[11])(s(o)>e,'Tried to get frame for out of range index '+e);var c=n(o,e),h=c&&i._frames[i._keyExtractor(c,e)];return h&&h.index===e||l&&(h=l(o,e)),h},r(d[11])(!e.onScroll||!e.onScroll.__isNative,"Components based on VirtualizedList must be wrapped with Animated.createAnimatedComponent to support native onScroll events with useNativeDriver"),r(d[11])(R(e.windowSize)>0,'VirtualizedList: The windowSize prop must be present and set to a value greater than 0.'),i._fillRateHelper=new(r(d[16]))(i._getFrameMetrics),i._updateCellsToRenderBatcher=new(r(d[17]))(i._updateCellsToRender,null!=(n=i.props.updateCellsBatchingPeriod)?n:50),i.props.viewabilityConfigCallbackPairs?i._viewabilityTuples=i.props.viewabilityConfigCallbackPairs.map(function(e){return{viewabilityHelper:new(r(d[18]))(e.viewabilityConfig),onViewableItemsChanged:e.onViewableItemsChanged}}):i.props.onViewableItemsChanged&&i._viewabilityTuples.push({viewabilityHelper:new(r(d[18]))(i.props.viewabilityConfig),onViewableItemsChanged:i.props.onViewableItemsChanged});var l={first:i.props.initialScrollIndex||0,last:Math.min(i.props.getItemCount(i.props.data),(i.props.initialScrollIndex||0)+S(i.props.initialNumToRender))-1};if(i._isNestedWithSameOrientation()){var f=i.context.getNestedChildState(i._getListKey());f&&(l=f,i.state=f,i._frames=f.frames)}return i.state=l,i}return(0,n.default)(u,[{key:"scrollToEnd",value:function(e){var t=!e||e.animated,o=this.props.getItemCount(this.props.data)-1,n=this._getFrameMetricsApprox(o),s=Math.max(0,n.offset+n.length+this._footerLength-this._scrollMetrics.visibleLength);null!=this._scrollRef&&(null!=this._scrollRef.scrollTo?this._scrollRef.scrollTo(b(this.props.horizontal)?{x:s,animated:t}:{y:s,animated:t}):console.warn("No scrollTo method provided. This may be because you have two nested VirtualizedLists with the same orientation, or because you are using a custom component that does not implement scrollTo."))}},{key:"scrollToIndex",value:function(e){var t=this.props,o=t.data,n=t.horizontal,s=t.getItemCount,i=t.getItemLayout,l=t.onScrollToIndexFailed,c=e.animated,h=e.index,u=e.viewOffset,p=e.viewPosition;if(r(d[11])(h>=0,"scrollToIndex out of range: requested index "+h+" but minimum is 0"),r(d[11])(s(o)>=1,"scrollToIndex out of range: item length "+s(o)+" but minimum is 1"),r(d[11])(hthis._highestMeasuredFrameIndex)return r(d[11])(!!l,"scrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed, otherwise there is no way to know the location of offscreen indices or handle failures."),void l({averageItemLength:this._averageCellLength,highestMeasuredFrameIndex:this._highestMeasuredFrameIndex,index:h});var f=this._getFrameMetricsApprox(h),_=Math.max(0,f.offset-(p||0)*(this._scrollMetrics.visibleLength-f.length))-(u||0);null!=this._scrollRef&&(null!=this._scrollRef.scrollTo?this._scrollRef.scrollTo(n?{x:_,animated:c}:{y:_,animated:c}):console.warn("No scrollTo method provided. This may be because you have two nested VirtualizedLists with the same orientation, or because you are using a custom component that does not implement scrollTo."))}},{key:"scrollToItem",value:function(e){for(var o=e.item,n=this.props,s=n.data,i=n.getItem,l=(0,n.getItemCount)(s),c=0;c0){C=!1,L='';var x=this._getSpacerKey(!p),w=this.props.initialScrollIndex?-1:S(this.props.initialNumToRender)-1,k=this.state,T=k.first,z=k.last;this._pushCells(y,I,v,0,w,_);var K=Math.max(w+1,T);if(!f&&T>w+1){var O=!1;if(v.size>0)for(var P=l?1:0,F=K-1;F>w;F--)if(v.has(F+P)){var V=this._getFrameMetricsApprox(w),D=this._getFrameMetricsApprox(F),N=D.offset-V.offset-(this.props.initialScrollIndex?0:V.length);y.push(h.createElement(r(d[10]),{key:"$sticky_lead",style:(0,e.default)({},x,N)})),this._pushCells(y,I,v,F,F,_);var A=this._getFrameMetricsApprox(T).offset-(D.offset+D.length);y.push(h.createElement(r(d[10]),{key:"$sticky_trail",style:(0,e.default)({},x,A)})),O=!0;break}if(!O){var B=this._getFrameMetricsApprox(w),H=this._getFrameMetricsApprox(T).offset-(B.offset+B.length);y.push(h.createElement(r(d[10]),{key:"$lead_spacer",style:(0,e.default)({},x,H)}))}}if(this._pushCells(y,I,v,K,z,_),!this._hasWarned.keys&&C&&(console.warn("VirtualizedList: missing keys for items, make sure to specify a key or id property on each item or provide a custom keyExtractor.",L),this._hasWarned.keys=!0),!f&&zu&&(this._sentEndForContentLength=0)}},{key:"_scheduleCellsToRenderUpdate",value:function(){var e=this.state,t=e.first,o=e.last,n=this._scrollMetrics,s=n.offset,i=n.visibleLength,l=n.velocity,c=this.props.getItemCount(this.props.data),h=!1,u=M(this.props.onEndReachedThreshold)*i/2;if(t>0){var p=s-this._getFrameMetricsApprox(t).offset;h=h||p<0||l<-2&&p2&&f0&&(this._scrollAnimatedValueAttachment=p.default.attachNativeEvent(this._scrollViewRef,'onScroll',[{nativeEvent:{contentOffset:{y:this._scrollAnimatedValue}}}]))}},{key:"_setStickyHeaderRef",value:function(e,o){o?this._stickyHeaderRefs.set(e,o):this._stickyHeaderRefs.delete(e)}},{key:"_onStickyHeaderLayout",value:function(e,o,t){var n=this.props.stickyHeaderIndices;if(n){var l=y.Children.toArray(this.props.children);if(t===this._getKeyForIndex(e,l)){var s=o.nativeEvent.layout.y;this._headerLayoutYs.set(t,s);var u=n[n.indexOf(e)-1];if(null!=u){var c=this._stickyHeaderRefs.get(this._getKeyForIndex(u,l));c&&c.setNextHeaderY&&c.setNextHeaderY(s)}}}}},{key:"render",value:function(){var t=this,n=!0===this.props.horizontal?P:F,l=(0,o.default)(n,2),s=l[0],u=l[1],c=[!0===this.props.horizontal&&Y.contentContainerHorizontal,this.props.contentContainerStyle],p=null==this.props.onContentSizeChange?null:{onLayout:this._handleContentOnLayout},f=this.props.stickyHeaderIndices,S=this.props.children;if(null!=f&&f.length>0){var b=y.Children.toArray(this.props.children);S=b.map(function(e,o){var n=e?f.indexOf(o):-1;if(n>-1){var l=e.key,s=f[n+1],u=t.props.StickyHeaderComponent||_.default;return y.createElement(u,{key:l,nativeID:'StickyHeader-'+l,ref:function(e){return t._setStickyHeaderRef(l,e)},nextHeaderLayoutY:t._headerLayoutYs.get(t._getKeyForIndex(s,b)),onLayout:function(e){return t._onStickyHeaderLayout(o,e,l)},scrollAnimatedValue:t._scrollAnimatedValue,inverted:t.props.invertStickyHeaders,hiddenOnScroll:t.props.stickyHeaderHiddenOnScroll,scrollViewHeight:t.state.layoutHeight},e)}return e})}S=y.createElement(D.default.Provider,{value:!0===this.props.horizontal?D.HORIZONTAL:D.VERTICAL},S);var R=Array.isArray(f)&&f.length>0,T=y.createElement(u,(0,e.default)({},p,{ref:this._setInnerViewRef,style:c,removeClippedSubviews:('android'!==h.default.OS||!R)&&this.props.removeClippedSubviews,collapsable:!1}),S),w=void 0!==this.props.alwaysBounceHorizontal?this.props.alwaysBounceHorizontal:this.props.horizontal,V=void 0!==this.props.alwaysBounceVertical?this.props.alwaysBounceVertical:!this.props.horizontal,k=!0===this.props.horizontal?Y.baseHorizontal:Y.baseVertical,E=(0,e.default)({},this.props,{alwaysBounceHorizontal:w,alwaysBounceVertical:V,style:v.default.compose(k,this.props.style),onContentSizeChange:null,onLayout:this._handleLayout,onMomentumScrollBegin:this._handleMomentumScrollBegin,onMomentumScrollEnd:this._handleMomentumScrollEnd,onResponderGrant:this._handleResponderGrant,onResponderReject:this._handleResponderReject,onResponderRelease:this._handleResponderRelease,onResponderTerminationRequest:this._handleResponderTerminationRequest,onScrollBeginDrag:this._handleScrollBeginDrag,onScrollEndDrag:this._handleScrollEndDrag,onScrollShouldSetResponder:this._handleScrollShouldSetResponder,onStartShouldSetResponder:this._handleStartShouldSetResponder,onStartShouldSetResponderCapture:this._handleStartShouldSetResponderCapture,onTouchEnd:this._handleTouchEnd,onTouchMove:this._handleTouchMove,onTouchStart:this._handleTouchStart,onTouchCancel:this._handleTouchCancel,onScroll:this._handleScroll,scrollEventThrottle:R?1:this.props.scrollEventThrottle,sendMomentumEvents:!(!this.props.onMomentumScrollBegin&&!this.props.onMomentumScrollEnd),snapToStart:!1!==this.props.snapToStart,snapToEnd:!1!==this.props.snapToEnd,pagingEnabled:h.default.select({ios:!0===this.props.pagingEnabled&&null==this.props.snapToInterval&&null==this.props.snapToOffsets,android:!0===this.props.pagingEnabled||null!=this.props.snapToInterval||null!=this.props.snapToOffsets})}),K=this.props.decelerationRate;null!=K&&(E.decelerationRate=(0,O.default)(K));var A=this.props.refreshControl;if(A){if('ios'===h.default.OS)return y.createElement(s,(0,e.default)({},E,{ref:this._setNativeRef}),A,T);if('android'===h.default.OS){var N=(0,I.default)((0,H.default)(E.style)),M=N.outer,W=N.inner;return y.cloneElement(A,{style:v.default.compose(k,M)},y.createElement(s,(0,e.default)({},E,{style:v.default.compose(k,W),ref:this._setNativeRef}),T))}}return y.createElement(s,(0,e.default)({},E,{ref:this._setNativeRef}),T)}}]),x})(y.Component);G.Context=D.default;var Y=v.default.create({baseVertical:{flexGrow:1,flexShrink:1,flexDirection:'column',overflow:'scroll'},baseHorizontal:{flexGrow:1,flexShrink:1,flexDirection:'row',overflow:'scroll'},contentContainerHorizontal:{flexDirection:'row'}});function U(o,t){return y.createElement(G,(0,e.default)({},o,{scrollViewRef:t}))}U.displayName='ScrollView';var Z=y.forwardRef(U);Z.Context=D.default,Z.displayName='ScrollView',m.exports=Z},250,[3,29,23,7,8,14,10,12,15,223,161,19,129,49,251,173,174,43,252,256,135,254,168,18,258,259,241,260,261,262,263,264,265]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),f=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var u=s(n);if(u&&u.has(t))return u.get(t);var l={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var c=o?Object.getOwnPropertyDescriptor(t,f):null;c&&(c.get||c.set)?Object.defineProperty(l,f,c):l[f]=t[f]}l.default=t,u&&u.set(t,l);return l})(r(d[6]));function s(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,u=new WeakMap;return(s=function(t){return t?u:n})(t)}var c=o.default.View,p=f.forwardRef(function(l,s){var p=l.inverted,h=l.scrollViewHeight,y=l.hiddenOnScroll,R=l.scrollAnimatedValue,O=l.nextHeaderLayoutY,L=f.useState(!1),b=(0,t.default)(L,2),w=b[0],S=b[1],j=f.useState(0),E=(0,t.default)(j,2),P=E[0],_=E[1],x=f.useState(0),M=(0,t.default)(x,2),k=M[0],C=M[1],D=f.useState(null),H=(0,t.default)(D,2),I=H[0],V=H[1],Y=f.useState(O),T=(0,t.default)(Y,2),W=T[0],A=T[1],N=f.useState(!1),z=(0,t.default)(N,2),F=z[0],q=z[1],B=f.useRef(),G=(0,n.default)({getForwardedRef:function(){return s},setLocalRef:function(t){var n,u;(B.current=t,t)&&(t.setNextHeaderY=function(t){A(t)},q(!(null==(n=t._internalInstanceHandle)||null==(u=n.stateNode)||!u.canonical)))}}),J=(0,f.useMemo)(function(){return!0===y?o.default.diffClamp(R.interpolate({extrapolateLeft:'clamp',inputRange:[P,P+1],outputRange:[0,1]}).interpolate({inputRange:[0,1],outputRange:[0,-1]}),-k,0):null},[R,k,P,y]),K=f.useState(function(){var t=R.interpolate({inputRange:[-1,0],outputRange:[0,0]});return null!=J?o.default.add(t,J):t}),Q=(0,t.default)(K,2),U=Q[0],X=Q[1],Z=(0,f.useRef)(!0),$=(0,f.useRef)(null);(0,f.useEffect)(function(){0!==I&&null!=I&&(Z.current=!1)},[I]);var ee=(0,f.useCallback)(function(t){var n=t.value,l='android'===u.default.OS?15:64;0!==n||Z.current?(null!=$.current&&clearTimeout($.current),$.current=setTimeout(function(){n!==I&&V(n)},l)):Z.current=!0},[I]);(0,f.useEffect)(function(){var t=[-1,0],n=[0,0];if(w)if(!0===p){if(null!=h){var u=P+k-h;if(u>0){t.push(u),n.push(0),t.push(u+1),n.push(1);var l=(W||0)-k-h;l>u&&(t.push(l,l+1),n.push(l-u,l-u))}}}else{t.push(P),n.push(0);var f=(W||0)-k;f>=P?(t.push(f,f+1),n.push(f-P,f-P)):(t.push(P+1),n.push(1))}var s,c=R.interpolate({inputRange:t,outputRange:n});return null!=J&&(c=o.default.add(c,J)),F&&(s=c.addListener(ee)),X(c),function(){s&&c.removeListener(s),null!=$.current&&clearTimeout($.current)}},[W,w,k,P,h,R,p,J,ee,F]);var te=f.Children.only(l.children),ne=F&&null!=I?{style:{transform:[{translateY:I}]}}:null;return f.createElement(c,{collapsable:!1,nativeID:l.nativeID,onLayout:function(t){_(t.nativeEvent.layout.y),C(t.nativeEvent.layout.height),S(!0),l.onLayout(t);var n=f.Children.only(l.children);n.props.onLayout&&n.props.onLayout(t)},ref:G,style:[te.props.style,v.header,{transform:[{translateY:U}]}],passthroughAnimatedPropExplicitValues:ne},f.cloneElement(te,{style:v.fill,onLayout:void 0}))}),v=l.default.create({header:{zIndex:10,position:'relative'},fill:{flex:1}}),h=p;e.default=h},251,[3,23,241,19,173,211,129]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),s=r(d[0])(r(d[6])),f=r(d[0])(r(d[7])),v=(function(){function v(){(0,t.default)(this,v),this._emitter=new u.default('ios'!==s.default.OS?null:f.default)}return(0,n.default)(v,[{key:"addListener",value:function(t,n,u){return this._emitter.addListener(t,n)}},{key:"removeListener",value:function(t,n){this._emitter.removeListener(t,n)}},{key:"removeAllListeners",value:function(t){this._emitter.removeAllListeners(t)}},{key:"dismiss",value:function(){(0,o.default)()}},{key:"scheduleLayoutAnimation",value:function(t){var n=t.duration,u=t.easing;null!=n&&0!==n&&l.default.configureNext({duration:n,update:{duration:n,type:null!=u&&l.default.Types[u]||'keyboard'}})}}]),v})();m.exports=new v},252,[3,7,8,95,253,254,19,255]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=r(d[0])(r(d[1]));function t(t,u,o){var l,s;if(!n.default.isTesting){var c,p,y=!1,f=function(){y||(y=!0,clearTimeout(b),null==u||u())},b=setTimeout(f,(null!=(l=t.duration)?l:0)+17),I=null==(s=g)?void 0:s.nativeFabricUIManager;if(null!=I&&I.configureNextLayoutAnimation)null==(c=g)||null==(p=c.nativeFabricUIManager)||p.configureNextLayoutAnimation(t,f,null!=o?o:function(){});else null!=r(d[2])&&r(d[2]).configureNextLayoutAnimation&&r(d[2]).configureNextLayoutAnimation(t,null!=f?f:function(){},null!=o?o:function(){})}}function u(n,t,u){return{duration:n,create:{type:t,property:u},update:{type:t},delete:{type:t,property:u}}}var o={easeInEaseOut:u(300,'easeInEaseOut','opacity'),linear:u(500,'linear','opacity'),spring:{duration:700,create:{type:'linear',property:'opacity'},update:{type:'spring',springDamping:.4},delete:{type:'linear',property:'opacity'}}},l={configureNext:t,create:u,Types:Object.freeze({spring:'spring',linear:'linear',easeInEaseOut:'easeInEaseOut',easeIn:'easeIn',easeOut:'easeOut',keyboard:'keyboard'}),Properties:Object.freeze({opacity:'opacity',scaleX:'scaleX',scaleY:'scaleY',scaleXY:'scaleXY'}),checkConfig:function(){console.error('LayoutAnimation.checkConfig(...) has been disabled.')},Presets:o,easeInEaseOut:t.bind(null,o.easeInEaseOut),linear:t.bind(null,o.linear),spring:t.bind(null,o.spring)};m.exports=l},253,[3,19,43]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=function(){r(d[0]).blurTextInput(r(d[0]).currentlyFocusedInput())}},254,[135]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('KeyboardObserver');e.default=n},255,[21]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),o={setGlobalOptions:function(o){if(void 0!==o.debug&&r(d[2])(t.default,'Trying to debug FrameRateLogger without the native module!'),t.default){var l={debug:!!o.debug,reportStackTraces:!!o.reportStackTraces};t.default.setGlobalOptions(l)}},setContext:function(o){t.default&&t.default.setContext(o)},beginScroll:function(){t.default&&t.default.beginScroll()},endScroll:function(){t.default&&t.default.endScroll()}};m.exports=o},256,[3,257,18]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('FrameRateLogger');e.default=n},257,[21]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));m.exports=function(n){return'normal'===n?t.default.select({ios:.998,android:.985}):'fast'===n?t.default.select({ios:.99,android:.9}):n}},258,[3,19]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(s){var c=null,t=null;if(null!=s){c={},t={};for(var n=0,l=Object.keys(s);nMath.random(),this._resetData()}return r(d[0])(_,[{key:"activate",value:function(){this._enabled&&null==this._samplesStartTime&&(this._samplesStartTime=g.performance.now())}},{key:"deactivateAndFlush",value:function(){if(this._enabled){var t=this._samplesStartTime;if(null!=t)if(this._info.sample_count0&&(c=Math.min(h,Math.max(0,y.offset-_)));for(var p=0,b=n.last,v=this._getFrameMetrics(b);b>=n.first&&(!v||!v.inLayout);)v=this._getFrameMetrics(b),b--;if(v&&b0?(this._anyBlankStartTime=f,this._info.any_blank_speed_sum+=u,this._info.any_blank_count++,this._info.pixels_blank+=M,T>.5&&(this._mostlyBlankStartTime=f,this._info.mostly_blank_count++)):(u<.01||Math.abs(l)<1)&&this.deactivateAndFlush(),T}},{key:"enabled",value:function(){return this._enabled}},{key:"_resetData",value:function(){this._anyBlankStartTime=null,this._info=new t,this._mostlyBlankStartTime=null,this._samplesStartTime=null}}],[{key:"addListener",value:function(t){return null===l&&console.warn('Call `FillRateHelper.setSampleRate` before `addListener`.'),n.push(t),{remove:function(){n=n.filter(function(n){return t!==n})}}}},{key:"setSampleRate",value:function(t){l=t}},{key:"setMinSampleCount",value:function(t){s=t}}]),_})();m.exports=_},270,[8,7,29]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=(function(){function t(n,l){r(d[0])(this,t),this._delay=l,this._callback=n}return r(d[1])(t,[{key:"dispose",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{abort:!1};this._taskHandle&&(this._taskHandle.cancel(),t.abort||this._callback(),this._taskHandle=null)}},{key:"schedule",value:function(){var t=this;if(!this._taskHandle){var n=setTimeout(function(){t._taskHandle=r(d[2]).runAfterInteractions(function(){t._taskHandle=null,t._callback()})},this._delay);this._taskHandle={cancel:function(){return clearTimeout(n)}}}}}]),t})();m.exports=t},271,[7,8,220]); +__d(function(g,r,_i,a,m,e,d){'use strict';function t(t,i){var o="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(o)return(o=o.call(t)).next.bind(o);if(Array.isArray(t)||(o=n(t))||i&&t&&"number"==typeof t.length){o&&(t=o);var s=0;return function(){return s>=t.length?{done:!0}:{done:!1,value:t[s++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function n(t,n){if(t){if("string"==typeof t)return i(t,n);var o=Object.prototype.toString.call(t).slice(8,-1);return"Object"===o&&t.constructor&&(o=t.constructor.name),"Map"===o||"Set"===o?Array.from(t):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?i(t,n):void 0}}function i(t,n){(null==n||n>t.length)&&(n=t.length);for(var i=0,o=new Array(n);i0&&void 0!==arguments[0]?arguments[0]:{viewAreaCoveragePercentThreshold:0};r(d[0])(this,n),this._hasInteracted=!1,this._timers=new Set,this._viewableIndices=[],this._viewableItems=new Map,this._config=t}return r(d[1])(n,[{key:"dispose",value:function(){this._timers.forEach(clearTimeout)}},{key:"computeViewableItems",value:function(t,n,i,o,l){var u=this._config,c=u.itemVisiblePercentThreshold,h=u.viewAreaCoveragePercentThreshold,f=null!=h,v=f?h:c;r(d[2])(null!=v&&null!=c!=(null!=h),'Must set exactly one of itemVisiblePercentThreshold or viewAreaCoveragePercentThreshold');var b=[];if(0===t)return b;var y=-1,w=l||{first:0,last:t-1},_=w.first,p=w.last;if(p>=t)return console.warn('Invalid render range computing viewability '+JSON.stringify({renderRange:l,itemCount:t})),[];for(var I=_;I<=p;I++){var A=o(I);if(A){var S=A.offset-n,T=S+A.length;if(S0)y=I,s(f,v,S,T,i,A.length)&&b.push(I);else if(y>=0)break}}return b}},{key:"onUpdate",value:function(t,n,i,o,s,l,u){var c=this;if((!this._config.waitForInteraction||this._hasInteracted)&&0!==t&&o(0)){var h=[];if(t&&(h=this.computeViewableItems(t,n,i,o,u)),this._viewableIndices.length!==h.length||!this._viewableIndices.every(function(t,n){return t===h[n]}))if(this._viewableIndices=h,this._config.minimumViewTime){var f=setTimeout(function(){c._timers.delete(f),c._onUpdateSync(h,l,s)},this._config.minimumViewTime);this._timers.add(f)}else this._onUpdateSync(h,l,s)}}},{key:"resetViewableIndices",value:function(){this._viewableIndices=[]}},{key:"recordInteraction",value:function(){this._hasInteracted=!0}},{key:"_onUpdateSync",value:function(n,i,o){var s=this;n=n.filter(function(t){return s._viewableIndices.includes(t)});for(var l,u=this._viewableItems,c=new Map(n.map(function(t){var n=o(t,!0);return[n.key,n]})),h=[],f=t(c);!(l=f()).done;){var v=l.value,b=r(d[3])(v,2),y=b[0],w=b[1];u.has(y)||h.push(w)}for(var _,p=t(u);!(_=p()).done;){var I=_.value,A=r(d[3])(I,2),S=A[0],T=A[1];c.has(S)||h.push(r(d[4])({},T,{isViewable:!1}))}h.length>0&&(this._viewableItems=c,i({viewableItems:Array.from(c.values()),changed:h,viewabilityConfig:this._config}))}}]),n})();function s(t,n,i,o,s,c){if(u(i,o,s))return!0;var h=l(i,o,s);return 100*(t?h/s:h/c)>=n}function l(t,n,i){var o=Math.min(n,i)-Math.max(t,0);return Math.max(0,o)}function u(t,n,i){return t>=0&&n<=i&&n>t}m.exports=o},272,[7,8,18,23,29]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.VirtualizedListCellContextProvider=function(l){var u=l.cellKey,s=l.children,c=(0,n.useContext)(o);return n.createElement(o.Provider,{value:null==c?null:(0,t.default)({},c,{cellKey:u})},s)},e.VirtualizedListContext=void 0,e.VirtualizedListContextProvider=function(t){var l=t.children,u=t.value,s=(0,n.useMemo)(function(){return{cellKey:null,getScrollMetrics:u.getScrollMetrics,horizontal:u.horizontal,getOutermostParentListRef:u.getOutermostParentListRef,getNestedChildState:u.getNestedChildState,registerAsNestedChild:u.registerAsNestedChild,unregisterAsNestedChild:u.unregisterAsNestedChild,debugInfo:{cellKey:u.debugInfo.cellKey,horizontal:u.debugInfo.horizontal,listKey:u.debugInfo.listKey,parent:u.debugInfo.parent}}},[u.getScrollMetrics,u.horizontal,u.getOutermostParentListRef,u.getNestedChildState,u.registerAsNestedChild,u.unregisterAsNestedChild,u.debugInfo.cellKey,u.debugInfo.horizontal,u.debugInfo.listKey,u.debugInfo.parent]);return n.createElement(o.Provider,{value:s},l)},e.VirtualizedListContextResetter=function(t){var l=t.children;return n.createElement(o.Provider,{value:null},l)};var t=r(d[0])(r(d[1])),n=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=l(n);if(o&&o.has(t))return o.get(t);var u={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var f=s?Object.getOwnPropertyDescriptor(t,c):null;f&&(f.get||f.set)?Object.defineProperty(u,c,f):u[c]=t[c]}u.default=t,o&&o.set(t,u);return u})(r(d[2]));function l(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(l=function(t){return t?o:n})(t)}var o=n.createContext(null);e.VirtualizedListContext=o},273,[3,29,129]); +__d(function(g,r,i,a,m,e,d){!(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},p=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var l=p?Object.getOwnPropertyDescriptor(n,c):null;l&&(l.get||l.set)?Object.defineProperty(u,c,l):u[c]=n[c]}u.default=n,f&&f.set(n,u)})(r(d[0]));function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}m.exports=r(d[1])(r(d[2]),{collapsable:!1})},274,[129,239,275]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),l=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=b(n);if(o&&o.has(t))return o.get(t);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var f=l?Object.getOwnPropertyDescriptor(t,c):null;f&&(f.get||f.set)?Object.defineProperty(u,c,f):u[c]=t[c]}u.default=t,o&&o.set(t,u);return u})(r(d[5])),c=r(d[0])(r(d[6])),f=r(d[0])(r(d[7])),s=r(d[0])(r(d[8])),h=r(d[0])(r(d[9])),p=r(d[0])(r(d[10])),y=r(d[0])(r(d[11])),w=r(d[0])(r(d[12])),v=r(d[0])(r(d[13]));function b(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(b=function(t){return t?o:n})(t)}var S=1;function I(t,n){var o=S++;return n&&n(o),w.default.prefetchImage(t,o)}var E=function(n,o){var c,s,w,b,S=(0,y.default)(n.source),I=(0,y.default)(n.defaultSource),E=(0,y.default)(n.loadingIndicatorSource);S&&(''===S.uri&&console.warn('source.uri should not be an empty string'));if(n.src&&console.warn('The component requires a `source` property rather than `src`.'),n.children)throw new Error('The component cannot contain children. If you want to render content on top of the image, consider using the component or absolute positioning.');if(n.defaultSource&&n.loadingIndicatorSource)throw new Error('The component cannot have defaultSource and loadingIndicatorSource at the same time. Please use either defaultSource or loadingIndicatorSource.');if(!S||S.uri||Array.isArray(S)||(S=null),null!=(null==(c=S)?void 0:c.uri)){var P=S,_=P.width,j=P.height;w=(0,p.default)([{width:_,height:j},O.base,n.style]),b=[{uri:S.uri}]}else w=(0,p.default)([O.base,n.style]),b=S;var z=n.onLoadStart,C=n.onLoad,W=n.onLoadEnd,M=n.onError,T=(0,t.default)({},n,{style:w,shouldNotifyLoadEvents:!!(z||C||W||M),src:b,headers:null==(s=S)?void 0:s.headers,defaultSrc:I?I.uri:null,loadingIndicatorSrc:E?E.uri:null,ref:o});return l.createElement(h.default.Consumer,null,function(n){var o=null!==n?(0,t.default)({},T,{internal_analyticTag:n}):T;return l.createElement(f.default.Consumer,null,function(t){return t?l.createElement(v.default,o):l.createElement(u.default,o)})})};E=l.forwardRef(E),null!=s.default.unstable_createImageComponent&&(E=s.default.unstable_createImageComponent(E)),E.displayName='Image',E.getSize=function(t,n,o){return w.default.getSize(t).then(function(t){n(t.width,t.height)}).catch(o||function(){console.warn('Failed to get size for image: '+t)})},E.getSizeWithHeaders=function(t,n,o,u){return w.default.getSizeWithHeaders(t,n).then(function(t){o(t.width,t.height)}).catch(u||function(){console.warn('Failed to get size for image: '+t)})},E.prefetch=I,E.prefetchWithMetadata=function(t,n,o,u){I(t,u)},E.abortPrefetch=function(t){w.default.abortRequest(t)},E.queryCache=function(t){return n.default.async(function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,n.default.awrap(w.default.queryCache(t));case 2:return o.abrupt("return",o.sent);case 3:case"end":return o.stop()}},null,null,null,Promise)},E.resolveAssetSource=y.default,E.propTypes=o.default;var O=c.default.create({base:{overflow:'hidden'}});m.exports=E},275,[3,29,75,276,280,129,173,176,281,283,168,155,284,282]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=r(d[0])({},r(d[1]),{style:r(d[2])(r(d[3])),source:r(d[4]).oneOfType([r(d[4]).shape({uri:r(d[4]).string,headers:r(d[4]).objectOf(r(d[4]).string)}),r(d[4]).number,r(d[4]).arrayOf(r(d[4]).shape({uri:r(d[4]).string,width:r(d[4]).number,height:r(d[4]).number,headers:r(d[4]).objectOf(r(d[4]).string)}))]),blurRadius:r(d[4]).number,defaultSource:r(d[4]).number,loadingIndicatorSource:r(d[4]).oneOfType([r(d[4]).shape({uri:r(d[4]).string}),r(d[4]).number]),progressiveRenderingEnabled:r(d[4]).bool,fadeDuration:r(d[4]).number,internal_analyticTag:r(d[4]).string,onLoadStart:r(d[4]).func,onError:r(d[4]).func,onLoad:r(d[4]).func,onLoadEnd:r(d[4]).func,testID:r(d[4]).string,resizeMethod:r(d[4]).oneOf(['auto','resize','scale']),resizeMode:r(d[4]).oneOf(['cover','contain','stretch','repeat','center'])});m.exports=n},276,[29,277,186,279,191]); +__d(function(g,r,i,a,m,e,d){'use strict';var o=r(d[0])(r(d[1]));m.exports={accessible:r(d[2]).bool,accessibilityLabel:r(d[2]).node,accessibilityHint:r(d[2]).string,accessibilityActions:r(d[2]).arrayOf(r(d[2]).string),accessibilityIgnoresInvertColors:r(d[2]).bool,accessibilityRole:r(d[2]).oneOf(r(d[3]).DeprecatedAccessibilityRoles),accessibilityState:r(d[2]).object,accessibilityValue:r(d[2]).object,accessibilityLiveRegion:r(d[2]).oneOf(['none','polite','assertive']),importantForAccessibility:r(d[2]).oneOf(['auto','yes','no','no-hide-descendants']),accessibilityViewIsModal:r(d[2]).bool,accessibilityElementsHidden:r(d[2]).bool,onAccessibilityAction:r(d[2]).func,onAccessibilityTap:r(d[2]).func,onMagicTap:r(d[2]).func,testID:r(d[2]).string,nativeID:r(d[2]).string,onResponderGrant:r(d[2]).func,onResponderMove:r(d[2]).func,onResponderReject:r(d[2]).func,onResponderRelease:r(d[2]).func,onResponderTerminate:r(d[2]).func,onResponderTerminationRequest:r(d[2]).func,onStartShouldSetResponder:r(d[2]).func,onStartShouldSetResponderCapture:r(d[2]).func,onMoveShouldSetResponder:r(d[2]).func,onMoveShouldSetResponderCapture:r(d[2]).func,hitSlop:r(d[4]),onLayout:r(d[2]).func,pointerEvents:r(d[2]).oneOf(['box-none','none','box-only','auto']),style:o,removeClippedSubviews:r(d[2]).bool,renderToHardwareTextureAndroid:r(d[2]).bool,shouldRasterizeIOS:r(d[2]).bool,collapsable:r(d[2]).bool,needsOffscreenAlphaCompositing:r(d[2]).bool}},277,[186,189,191,278,198]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports={DeprecatedAccessibilityRoles:['none','button','togglebutton','link','search','image','keyboardkey','text','adjustable','imagebutton','header','summary','alert','checkbox','combobox','menu','menubar','menuitem','progressbar','radio','radiogroup','scrollbar','spinbutton','switch','tab','tablist','timer','list','toolbar']}},278,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var o=r(d[0])({},r(d[1]),r(d[2]),r(d[3]),{resizeMode:r(d[4]).oneOf(['center','contain','cover','repeat','stretch']),backfaceVisibility:r(d[4]).oneOf(['visible','hidden']),backgroundColor:r(d[5]),borderColor:r(d[5]),borderWidth:r(d[4]).number,borderRadius:r(d[4]).number,overflow:r(d[4]).oneOf(['visible','hidden']),tintColor:r(d[5]),opacity:r(d[4]).number,overlayColor:r(d[4]).string,borderTopLeftRadius:r(d[4]).number,borderTopRightRadius:r(d[4]).number,borderBottomLeftRadius:r(d[4]).number,borderBottomRightRadius:r(d[4]).number});m.exports=o},279,[29,190,194,196,191,195]); +__d(function(g,r,i,a,m,e,d){function t(o){if("function"!=typeof WeakMap)return null;var n=new WeakMap,s=new WeakMap;return(t=function(t){return t?s:n})(o)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o=(function(o,n){if(!n&&o&&o.__esModule)return o;if(null===o||"object"!=typeof o&&"function"!=typeof o)return{default:o};var s=t(n);if(s&&s.has(o))return s.get(o);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in o)if("default"!==f&&Object.prototype.hasOwnProperty.call(o,f)){var c=l?Object.getOwnPropertyDescriptor(o,f):null;c&&(c.get||c.set)?Object.defineProperty(u,f,c):u[f]=o[f]}u.default=o,s&&s.set(o,u);return u})(r(d[0])).get('RCTImageView',function(){return{uiViewClassName:'RCTImageView',bubblingEventTypes:{},directEventTypes:{topLoadStart:{registrationName:'onLoadStart'},topProgress:{registrationName:'onProgress'},topError:{registrationName:'onError'},topPartialLoad:{registrationName:'onPartialLoad'},topLoad:{registrationName:'onLoad'},topLoadEnd:{registrationName:'onLoadEnd'}},validAttributes:{blurRadius:!0,capInsets:{diff:r(d[1])},defaultSource:{process:r(d[2])},defaultSrc:!0,fadeDuration:!0,headers:!0,internal_analyticTag:!0,loadingIndicatorSrc:!0,onError:!0,onLoad:!0,onLoadEnd:!0,onLoadStart:!0,onPartialLoad:!0,onProgress:!0,overlayColor:{process:r(d[3])},progressiveRenderingEnabled:!0,resizeMethod:!0,resizeMode:!0,shouldNotifyLoadEvents:!0,source:!0,src:!0,tintColor:{process:r(d[3])}}}});e.default=o},280,[150,145,155,141]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f)})(r(d[0])),r(d[1])(r(d[2])),r(d[1])(r(d[3]));function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}e.default={unstable_createImageComponent:null}},281,[129,3,280,282]); +__d(function(g,r,i,a,m,e,d){'use strict';function t(o){if("function"!=typeof WeakMap)return null;var n=new WeakMap,s=new WeakMap;return(t=function(t){return t?s:n})(o)}var o=(function(o,n){if(!n&&o&&o.__esModule)return o;if(null===o||"object"!=typeof o&&"function"!=typeof o)return{default:o};var s=t(n);if(s&&s.has(o))return s.get(o);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in o)if("default"!==c&&Object.prototype.hasOwnProperty.call(o,c)){var p=l?Object.getOwnPropertyDescriptor(o,c):null;p&&(p.get||p.set)?Object.defineProperty(u,c,p):u[c]=o[c]}u.default=o,s&&s.set(o,u);return u})(r(d[0])).get('RCTTextInlineImage',function(){return{uiViewClassName:'RCTImageView',bubblingEventTypes:{},directEventTypes:{topLoadStart:{registrationName:'onLoadStart'},topProgress:{registrationName:'onProgress'},topError:{registrationName:'onError'},topPartialLoad:{registrationName:'onPartialLoad'},topLoad:{registrationName:'onLoad'},topLoadEnd:{registrationName:'onLoadEnd'}},validAttributes:{blurRadius:!0,capInsets:{diff:r(d[1])},defaultSource:{process:r(d[2])},defaultSrc:!0,fadeDuration:!0,headers:!0,internal_analyticTag:!0,loadingIndicatorSrc:!0,onError:!0,onLoad:!0,onLoadEnd:!0,onLoadStart:!0,onPartialLoad:!0,onProgress:!0,overlayColor:{process:r(d[3])},progressiveRenderingEnabled:!0,resizeMethod:!0,resizeMode:!0,shouldNotifyLoadEvents:!0,source:!0,src:!0,tintColor:{process:r(d[3])}}}});m.exports=o},282,[150,145,155,141]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).createContext(null);e.default=n},283,[129]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=n[l]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).getEnforcing('ImageLoader');e.default=n},284,[21]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var f=o(n);if(f&&f.has(t))return f.get(t);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var p=l?Object.getOwnPropertyDescriptor(t,c):null;p&&(p.get||p.set)?Object.defineProperty(u,c,p):u[c]=t[c]}u.default=t,f&&f.set(t,u);return u})(r(d[2]));function o(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,f=new WeakMap;return(o=function(t){return t?f:n})(t)}var f=n.forwardRef(function(o,f){return n.createElement(r(d[3]),(0,t.default)({scrollEventThrottle:1e-4},o,{ref:f}))});m.exports=r(d[4])(f,{collapsable:!1})},285,[3,29,129,250,239]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var f=o(n);if(f&&f.has(t))return f.get(t);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in t)if("default"!==l&&Object.prototype.hasOwnProperty.call(t,l)){var p=c?Object.getOwnPropertyDescriptor(t,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=t[l]}u.default=t,f&&f.set(t,u);return u})(r(d[2])),f=r(d[0])(r(d[3]));function o(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,f=new WeakMap;return(o=function(t){return t?f:n})(t)}var u=n.forwardRef(function(o,u){return n.createElement(f.default,(0,t.default)({scrollEventThrottle:1e-4},o,{ref:u}))});m.exports=r(d[4])(u)},286,[3,29,129,287,239]); +__d(function(g,r,i,a,m,_e,d){'use strict';Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),f=r(d[0])(r(d[5])),u=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),s=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=y(t);if(n&&n.has(e))return n.get(e);var o={},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var c=f?Object.getOwnPropertyDescriptor(e,u):null;c&&(c.get||c.set)?Object.defineProperty(o,u,c):o[u]=e[u]}o.default=e,n&&n.set(e,o);return o})(r(d[9])),p=r(d[0])(r(d[10])),v=["stickySectionHeadersEnabled"];function y(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(y=function(e){return e?n:t})(e)}function h(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var R=(function(y){(0,f.default)(w,y);var R,_,L=(R=w,_=h(),function(){var e,t=(0,c.default)(R);if(_){var n=(0,c.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,u.default)(this,e)});function w(){var e;(0,n.default)(this,w);for(var t=arguments.length,o=new Array(t),f=0;f=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function I(e,t){if(e){if("string"==typeof e)return _(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_(e,t):void 0}}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n0&&this.props.stickySectionHeadersEnabled)o+=this._listRef._getFrameMetricsApprox(t-e.itemIndex).length;var l=(0,n.default)({},e,{viewOffset:o,index:t});this._listRef.scrollToIndex(l)}}},{key:"getListRef",value:function(){return this._listRef}},{key:"render",value:function(){for(var e,i=this,o=this.props,l=(o.ItemSeparatorComponent,o.SectionSeparatorComponent,o.renderItem,o.renderSectionFooter,o.renderSectionHeader,o.sections,o.stickySectionHeadersEnabled,(0,t.default)(o,v)),u=this.props.ListHeaderComponent?1:0,c=this.props.stickySectionHeadersEnabled?[]:void 0,s=0,p=S(this.props.sections);!(e=p()).done;){var y=e.value;null!=c&&c.push(s+u),s+=2,s+=this.props.getItemCount(y.data)}var I=this._renderItem(s);return h.createElement(f.VirtualizedList,(0,n.default)({},l,{keyExtractor:this._keyExtractor,stickyHeaderIndices:c,renderItem:I,data:this.props.sections,getItem:function(e,t){return i._getItem(i.props,e,t)},getItemCount:function(){return s},onViewableItemsChanged:this.props.onViewableItemsChanged?this._onViewableItemsChanged:void 0,ref:this._captureRef}))}},{key:"_getItem",value:function(e,t,n){if(!t)return null;for(var i=n-1,o=0;o=o(p)+1)t-=o(p)+1;else return-1===t?{section:s,key:f+':header',index:null,header:!0,trailingSection:u[c+1]}:t===o(p)?{section:s,key:f+':footer',index:null,header:!1,trailingSection:u[c+1]}:{section:s,key:f+':'+(s.keyExtractor||l||r(d[13]).keyExtractor)(i(p,t),t),index:t,leadingItem:i(p,t-1),leadingSection:u[c-1],trailingItem:i(p,t+1),trailingSection:u[c+1]}}}},{key:"_getSeparatorComponent",value:function(e,t,n){if(!(t=t||this._subExtractor(e)))return null;var i=t.section.ItemSeparatorComponent||this.props.ItemSeparatorComponent,o=this.props.SectionSeparatorComponent,l=e===n-1,u=t.index===this.props.getItemCount(t.section.data)-1;return o&&u?o:!i||u||l?null:i}}]),x})(h.PureComponent);function k(t){var i=t.LeadingSeparatorComponent,o=t.SeparatorComponent,l=t.cellKey,u=t.prevCellKey,c=t.setSelfHighlightCallback,s=t.updateHighlightFor,p=t.setSelfUpdatePropsCallback,v=t.updatePropsFor,y=t.item,S=t.index,I=t.section,_=t.inverted,b=h.useState(!1),x=(0,e.default)(b,2),k=x[0],C=x[1],E=h.useState(!1),w=(0,e.default)(E,2),H=w[0],P=w[1],F=h.useState({leadingItem:t.leadingItem,leadingSection:t.leadingSection,section:t.section,trailingItem:t.item,trailingSection:t.trailingSection}),R=(0,e.default)(F,2),M=R[0],O=R[1],V=h.useState({leadingItem:t.item,leadingSection:t.leadingSection,section:t.section,trailingItem:t.trailingItem,trailingSection:t.trailingSection}),j=(0,e.default)(V,2),A=j[0],U=j[1];h.useEffect(function(){return c(l,P),p(l,U),function(){p(l,null),c(l,null)}},[l,c,U,p]);var L={highlight:function(){C(!0),P(!0),null!=u&&s(u,!0)},unhighlight:function(){C(!1),P(!1),null!=u&&s(u,!1)},updateProps:function(e,t){'leading'===e?null!=i?O((0,n.default)({},M,t)):null!=u&&v(u,(0,n.default)({},M,t)):'trailing'===e&&null!=o&&U((0,n.default)({},A,t))}},B=t.renderItem({item:y,index:S,section:I,separators:L}),K=null!=i&&h.createElement(i,(0,n.default)({highlighted:k},M)),T=null!=o&&h.createElement(o,(0,n.default)({highlighted:H},A));return K||T?h.createElement(f.View,null,!1===_?K:T,B,!1===_?T:K):B}m.exports=x},288,[3,23,103,29,7,8,14,10,12,15,18,1,129,248]); +__d(function(g,r,i,a,m,e,d){!(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},p=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var l=p?Object.getOwnPropertyDescriptor(n,c):null;l&&(l.get||l.set)?Object.defineProperty(u,c,l):u[c]=n[c]}u.default=n,f&&f.set(n,u)})(r(d[0]));function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}m.exports=r(d[1])(r(d[2]),{collapsable:!1})},289,[129,239,184]); +__d(function(g,r,i,a,m,e,d){!(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},p=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var l=p?Object.getOwnPropertyDescriptor(n,c):null;l&&(l.get||l.set)?Object.defineProperty(u,c,l):u[c]=n[c]}u.default=n,f&&f.set(n,u)})(r(d[0]));function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}m.exports=r(d[1])(r(d[2]),{collapsable:!0})},290,[129,239,174]); +__d(function(g,r,i,a,m,e,d){'use strict';var n={};m.exports=function(o,t){n[o]||(console.warn(t),n[o]=!0)}},291,[]); +__d(function(g,r,i,a,m,_e,d){'use strict';var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),c=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=p(t);if(n&&n.has(e))return n.get(e);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in e)if("default"!==c&&Object.prototype.hasOwnProperty.call(e,c)){var f=u?Object.getOwnPropertyDescriptor(e,c):null;f&&(f.get||f.set)?Object.defineProperty(o,c,f):o[c]=e[c]}o.default=e,n&&n.set(e,o);return o})(r(d[6])),f=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),s=r(d[0])(r(d[9]));function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(p=function(e){return e?n:t})(e)}function y(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var h=(function(f){(0,n.default)(b,f);var p,h,O=(p=b,h=y(),function(){var e,t=(0,u.default)(p);if(h){var n=(0,u.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,o.default)(this,e)});function b(){return(0,e.default)(this,b),O.apply(this,arguments)}return(0,t.default)(b,[{key:"render",value:function(){return c.createElement(s.default,{style:[v.dummyDatePickerIOS,this.props.style]},c.createElement(l.default,{style:v.datePickerText},"DatePickerIOS is not supported on this platform!"))}}]),b})(c.Component),v=f.default.create({dummyDatePickerIOS:{height:100,width:300,backgroundColor:'#ffbcbc',borderWidth:1,borderColor:'red',alignItems:'center',justifyContent:'center',margin:10},datePickerText:{color:'#333333',margin:20}});m.exports=h},292,[3,7,8,10,12,15,129,173,184,174]); +__d(function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),s=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),f=r(d[0])(r(d[8])),c=k(r(d[9])),p=r(d[0])(r(d[10])),w=r(d[0])(r(d[11])),h=r(d[0])(r(d[12])),v=r(d[0])(r(d[13])),y=r(d[0])(r(d[14])),D=k(r(d[15])),b=["onDrawerStateChanged","renderNavigationView","onDrawerOpen","onDrawerClose"];function C(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(C=function(e){return e?n:t})(e)}function k(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=C(t);if(n&&n.has(e))return n.get(e);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var l=u?Object.getOwnPropertyDescriptor(e,s):null;l&&(l.get||l.set)?Object.defineProperty(o,s,l):o[s]=e[s]}return o.default=e,n&&n.set(e,o),o}function _(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var S=['Idle','Dragging','Settling'],R=(function(w){(0,u.default)(O,w);var C,k,R=(C=O,k=_(),function(){var e,t=(0,l.default)(C);if(k){var n=(0,l.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,s.default)(this,e)});function O(){var e;(0,n.default)(this,O);for(var t=arguments.length,o=new Array(t),u=0;u=21&&null!=this.props.statusBarBackgroundColor,l=c.createElement(h.default,{style:[B.drawerSubview,{width:this.props.drawerWidth,backgroundColor:this.props.drawerBackgroundColor}],collapsable:!1},o(),s&&c.createElement(h.default,{style:B.drawerStatusBar})),w=c.createElement(h.default,{style:B.mainSubview,collapsable:!1},s&&c.createElement(p.default,{translucent:!0,backgroundColor:this.props.statusBarBackgroundColor}),s&&c.createElement(h.default,{style:[B.statusBar,{backgroundColor:this.props.statusBarBackgroundColor}]}),this.props.children);return c.createElement(D.default,(0,e.default)({},u,{ref:this._nativeRef,drawerWidth:this.props.drawerWidth,drawerPosition:this.props.drawerPosition,drawerLockMode:this.props.drawerLockMode,style:[B.base,this.props.style],onDrawerSlide:this._onDrawerSlide,onDrawerOpen:this._onDrawerOpen,onDrawerClose:this._onDrawerClose,onDrawerStateChanged:this._onDrawerStateChanged}),w,l)}},{key:"openDrawer",value:function(){D.Commands.openDrawer((0,y.default)(this._nativeRef.current))}},{key:"closeDrawer",value:function(){D.Commands.closeDrawer((0,y.default)(this._nativeRef.current))}},{key:"blur",value:function(){(0,y.default)(this._nativeRef.current).blur()}},{key:"focus",value:function(){(0,y.default)(this._nativeRef.current).focus()}},{key:"measure",value:function(e){(0,y.default)(this._nativeRef.current).measure(e)}},{key:"measureInWindow",value:function(e){(0,y.default)(this._nativeRef.current).measureInWindow(e)}},{key:"measureLayout",value:function(e,t,n){(0,y.default)(this._nativeRef.current).measureLayout(e,t,n)}},{key:"setNativeProps",value:function(e){(0,y.default)(this._nativeRef.current).setNativeProps(e)}}],[{key:"positions",get:function(){return console.warn('Setting DrawerLayoutAndroid drawerPosition using `DrawerLayoutAndroid.positions` is deprecated. Instead pass the string value "left" or "right"'),{Left:'left',Right:'right'}}}]),O})(c.Component);R.defaultProps={drawerBackgroundColor:'white'};var B=w.default.create({base:{flex:1,elevation:16},mainSubview:{position:'absolute',top:0,left:0,right:0,bottom:0},drawerSubview:{position:'absolute',top:0,bottom:0},statusBar:{height:p.default.currentHeight},drawerStatusBar:{position:'absolute',top:0,left:0,right:0,height:p.default.currentHeight,backgroundColor:'rgba(0, 0, 0, 0.251)'}});m.exports=R},293,[3,29,103,7,8,10,12,15,19,129,294,173,174,254,297,298]); +__d(function(g,r,i,a,m,_e,d){var t,e=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),s=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=S(e);if(n&&n.has(t))return n.get(t);var l={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in t)if("default"!==u&&Object.prototype.hasOwnProperty.call(t,u)){var c=o?Object.getOwnPropertyDescriptor(t,u):null;c&&(c.get||c.set)?Object.defineProperty(l,u,c):l[u]=t[u]}l.default=t,n&&n.set(t,l);return l})(r(d[7])),f=r(d[0])(r(d[8])),p=r(d[0])(r(d[9])),y=r(d[0])(r(d[10])),v=r(d[0])(r(d[11])),k=r(d[0])(r(d[12]));function S(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(S=function(t){return t?n:e})(t)}function b(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}function _(t){var e,n,l=null!=(e=t.animated)&&e,o=null!=(n=t.showHideTransition)?n:'fade';return{backgroundColor:null!=t.backgroundColor?{value:t.backgroundColor,animated:l}:null,barStyle:null!=t.barStyle?{value:t.barStyle,animated:l}:null,translucent:t.translucent,hidden:null!=t.hidden?{value:t.hidden,animated:l,transition:o}:null,networkActivityIndicatorVisible:t.networkActivityIndicatorVisible}}var h=(function(t){(0,l.default)(h,t);var c,s,S=(c=h,s=b(),function(){var t,e=(0,u.default)(c);if(s){var n=(0,u.default)(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return(0,o.default)(this,t)});function h(){var t;(0,e.default)(this,h);for(var n=arguments.length,l=new Array(n),o=0;o is only supported on iOS.'),0===c.Children.count(this.props.children)?null:c.createElement(s.default,{style:[this.props.style,v.container],nativeID:this.props.nativeID,backgroundColor:this.props.backgroundColor},this.props.children)}}]),b})(c.Component),v=l.default.create({container:{position:'absolute'}});m.exports=h},300,[3,7,8,10,12,15,129,19,173,301]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=(0,r(d[0])(r(d[1])).default)('InputAccessory',{interfaceOnly:!0,paperComponentName:'RCTInputAccessoryView',excludedPlatforms:['android']});e.default=t},301,[3,179]); +__d(function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),f=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),s=r(d[0])(r(d[8])),c=r(d[0])(r(d[9])),y=r(d[0])(r(d[10])),h=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=_(t);if(n&&n.has(e))return n.get(e);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in e)if("default"!==f&&Object.prototype.hasOwnProperty.call(e,f)){var l=u?Object.getOwnPropertyDescriptor(e,f):null;l&&(l.get||l.set)?Object.defineProperty(o,f,l):o[f]=e[f]}o.default=e,n&&n.set(e,o);return o})(r(d[11])),p=r(d[0])(r(d[12])),v=r(d[0])(r(d[13])),b=["behavior","children","contentContainerStyle","enabled","keyboardVerticalOffset","style"];function _(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(_=function(e){return e?n:t})(e)}function k(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var O=(function(_){(0,u.default)(E,_);var O,w,L=(O=E,w=k(),function(){var e,t=(0,l.default)(O);if(w){var n=(0,l.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,f.default)(this,e)});function E(e){var t;return(0,n.default)(this,E),(t=L.call(this,e))._frame=null,t._keyboardEvent=null,t._subscriptions=[],t._initialFrameHeight=0,t._onKeyboardChange=function(e){t._keyboardEvent=e,t._updateBottomIfNecesarry()},t._onLayout=function(e){var n=null==t._frame;t._frame=e.nativeEvent.layout,t._initialFrameHeight||(t._initialFrameHeight=t._frame.height),n&&t._updateBottomIfNecesarry()},t._updateBottomIfNecesarry=function(){if(null!=t._keyboardEvent){var e=t._keyboardEvent,n=e.duration,o=e.easing,u=e.endCoordinates,f=t._relativeKeyboardHeight(u);t.state.bottom!==f&&(n&&o&&c.default.configureNext({duration:n>10?n:10,update:{duration:n>10?n:10,type:c.default.Types[o]||'keyboard'}}),t.setState({bottom:f}))}else t.setState({bottom:0})},t.state={bottom:0},t.viewRef=h.createRef(),t}return(0,o.default)(E,[{key:"_relativeKeyboardHeight",value:function(e){var t,n=this._frame;if(!n||!e)return 0;var o=e.screenY-(null!=(t=this.props.keyboardVerticalOffset)?t:0);return Math.max(n.y+n.height-o,0)}},{key:"componentDidMount",value:function(){'ios'===y.default.OS?this._subscriptions=[s.default.addListener('keyboardWillChangeFrame',this._onKeyboardChange)]:this._subscriptions=[s.default.addListener('keyboardDidHide',this._onKeyboardChange),s.default.addListener('keyboardDidShow',this._onKeyboardChange)]}},{key:"componentWillUnmount",value:function(){this._subscriptions.forEach(function(e){e.remove()})}},{key:"render",value:function(){var n=this.props,o=n.behavior,u=n.children,f=n.contentContainerStyle,l=n.enabled,s=void 0===l||l,c=(n.keyboardVerticalOffset,n.style),y=(0,t.default)(n,b),_=!0===s?this.state.bottom:0;switch(o){case'height':var k;return null!=this._frame&&this.state.bottom>0&&(k={height:this._initialFrameHeight-_,flex:0}),h.createElement(v.default,(0,e.default)({ref:this.viewRef,style:p.default.compose(c,k),onLayout:this._onLayout},y),u);case'position':return h.createElement(v.default,(0,e.default)({ref:this.viewRef,style:c,onLayout:this._onLayout},y),h.createElement(v.default,{style:p.default.compose(f,{bottom:_})},u));case'padding':return h.createElement(v.default,(0,e.default)({ref:this.viewRef,style:p.default.compose(c,{paddingBottom:_}),onLayout:this._onLayout},y),u);default:return h.createElement(v.default,(0,e.default)({ref:this.viewRef,onLayout:this._onLayout,style:c},y),u)}}}]),E})(h.Component);_e.default=O},302,[3,29,103,7,8,10,12,15,252,253,19,129,173,174]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=r(d[0])},303,[304]); +__d(function(g,r,i,a,m,_e,d){'use strict';var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),f=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=l(t);if(n&&n.has(e))return n.get(e);var u={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in e)if("default"!==f&&Object.prototype.hasOwnProperty.call(e,f)){var c=o?Object.getOwnPropertyDescriptor(e,f):null;c&&(c.get||c.set)?Object.defineProperty(u,f,c):u[f]=e[f]}u.default=e,n&&n.set(e,u);return u})(r(d[6])),c=r(d[0])(r(d[7]));function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(l=function(e){return e?n:t})(e)}function p(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var s=(function(c){(0,n.default)(h,c);var l,s,v=(l=h,s=p(),function(){var e,t=(0,o.default)(l);if(s){var n=(0,o.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,u.default)(this,e)});function h(){return(0,e.default)(this,h),v.apply(this,arguments)}return(0,t.default)(h,[{key:"render",value:function(){var e=r(d[8]);return f.createElement(e,{style:[y.unimplementedView,this.props.style]},this.props.children)}}]),h})(f.Component),y=c.default.create({unimplementedView:{}});m.exports=s},304,[3,7,8,10,12,15,129,173,174]); +__d(function(g,r,i,a,m,_e,d){var t,e,n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),s=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),p=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),f=(r(d[0])(r(d[8])),r(d[0])(r(d[9])),r(d[0])(r(d[10])));function h(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var v=r(d[11]),y=0,R=(function(t){(0,l.default)(R,t);var e,n,c=(e=R,n=h(),function(){var t,o=(0,p.default)(e);if(n){var s=(0,p.default)(this).constructor;t=Reflect.construct(o,arguments,s)}else t=o.apply(this,arguments);return(0,u.default)(this,t)});function R(t){var e;return(0,o.default)(this,R),(e=c.call(this,t))._identifier=y++,e}return(0,s.default)(R,[{key:"componentDidMount",value:function(){}},{key:"componentWillUnmount",value:function(){this._eventSubscription&&this._eventSubscription.remove()}},{key:"componentDidUpdate",value:function(){}},{key:"render",value:function(){var t=this;if(!0!==this.props.visible)return null;var e={backgroundColor:!0===this.props.transparent?'transparent':'white'},n=this.props.animationType||'none',o=this.props.presentationStyle;o||(o='fullScreen',!0===this.props.transparent&&(o='overFullScreen'));var s=this.props.children;return v.createElement(f.default,{animationType:n,presentationStyle:o,transparent:this.props.transparent,hardwareAccelerated:this.props.hardwareAccelerated,onRequestClose:this.props.onRequestClose,onShow:this.props.onShow,onDismiss:function(){t.props.onDismiss&&t.props.onDismiss()},visible:this.props.visible,statusBarTranslucent:this.props.statusBarTranslucent,identifier:this._identifier,style:b.modal,onStartShouldSetResponder:this._shouldSetResponder,supportedOrientations:this.props.supportedOrientations,onOrientationChange:this.props.onOrientationChange},v.createElement(r(d[12]).VirtualizedListContextResetter,null,v.createElement(r(d[13]).Context.Provider,{value:null},v.createElement(r(d[14]),{style:[b.container,e],collapsable:!1},s))))}},{key:"_shouldSetResponder",value:function(){return!0}}]),R})(v.Component);R.defaultProps={visible:!0,hardwareAccelerated:!1},R.contextType=r(d[15]).RootTagContext;var S=r(d[16]).getConstants().isRTL?'right':'left',b=r(d[17]).create({modal:{position:'absolute'},container:(t={},(0,n.default)(t,S,0),(0,n.default)(t,"top",0),(0,n.default)(t,"flex",1),t)}),C=null!=(e=c.default.unstable_Modal)?e:R;m.exports=C},305,[3,247,7,8,10,12,15,306,95,307,308,129,273,250,174,309,310,173]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default={unstable_Modal:null}},306,[]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('ModalManager');e.default=n},307,[21]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o=(0,r(d[0])(r(d[1])).default)('ModalHostView',{interfaceOnly:!0,paperComponentName:'RCTModalHostView'});e.default=o},308,[3,179]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.RootTagContext=void 0,e.createRootTag=function(t){return t};var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in n)if("default"!==p&&Object.prototype.hasOwnProperty.call(n,p)){var l=c?Object.getOwnPropertyDescriptor(n,p):null;l&&(l.get||l.set)?Object.defineProperty(f,p,l):f[p]=n[p]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).createContext(0);e.RootTagContext=n},309,[129]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=(function(){if(t.default){var n=t.default.getConstants(),f=n.isRTL,L=n.doLeftAndRightSwapInRTL,R=n.localeIdentifier;return{isRTL:f,doLeftAndRightSwapInRTL:L,localeIdentifier:R}}return{isRTL:!1,doLeftAndRightSwapInRTL:!0}})();m.exports={getConstants:function(){return n},allowRTL:function(n){t.default&&t.default.allowRTL(n)},forceRTL:function(n){t.default&&t.default.forceRTL(n)},swapLeftAndRightInRTL:function(n){t.default&&t.default.swapLeftAndRightInRTL(n)},isRTL:n.isRTL,doLeftAndRightSwapInRTL:n.doLeftAndRightSwapInRTL}},310,[3,311]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('I18nManager');e.default=n},311,[21]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=r(d[0])(r(d[1])),s=r(d[0])(r(d[2])),t=r(d[0])(r(d[3])),l=(function(n,s){if(!s&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var t=p(s);if(t&&t.has(n))return t.get(n);var l={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in n)if("default"!==u&&Object.prototype.hasOwnProperty.call(n,u)){var f=o?Object.getOwnPropertyDescriptor(n,u):null;f&&(f.get||f.set)?Object.defineProperty(l,u,f):l[u]=n[u]}l.default=n,t&&t.set(n,l);return l})(r(d[4])),o=r(d[0])(r(d[5])),u=r(d[0])(r(d[6])),f=r(d[0])(r(d[7])),c=["accessible","android_disableSound","android_ripple","cancelable","children","delayLongPress","disabled","focusable","onLongPress","onPress","onPressIn","onPressOut","pressRetentionOffset","style","testOnly_pressed","unstable_pressDelay"];function p(n){if("function"!=typeof WeakMap)return null;var s=new WeakMap,t=new WeakMap;return(p=function(n){return n?t:s})(n)}function b(n){var t=(0,l.useState)(!1),o=(0,s.default)(t,2),u=o[0],f=o[1];return[u||n,f]}var P=l.memo(l.forwardRef(function(p,P){var y=p.accessible,v=p.android_disableSound,O=p.android_ripple,_=p.cancelable,S=p.children,M=p.delayLongPress,h=p.disabled,j=p.focusable,w=p.onLongPress,I=p.onPress,L=p.onPressIn,R=p.onPressOut,D=p.pressRetentionOffset,k=p.style,W=p.testOnly_pressed,z=p.unstable_pressDelay,E=(0,t.default)(p,c),H=(0,l.useRef)(null);(0,l.useImperativeHandle)(P,function(){return H.current});var N=(0,o.default)(O,H),q=b(!0===W),x=(0,s.default)(q,2),A=x[0],B=x[1],C=(0,r(d[8]).normalizeRect)(p.hitSlop),F=null!=h?(0,n.default)({},p.accessibilityState,{disabled:h}):p.accessibilityState,G=(0,n.default)({},E,null==N?void 0:N.viewProps,{accessible:!1!==y,accessibilityState:F,focusable:!1!==j,hitSlop:C}),J=(0,l.useMemo)(function(){return{cancelable:_,disabled:h,hitSlop:C,pressRectOffset:D,android_disableSound:v,delayLongPress:M,delayPressIn:z,onLongPress:w,onPress:I,onPressIn:function(n){null!=N&&N.onPressIn(n),B(!0),null!=L&&L(n)},onPressMove:null==N?void 0:N.onPressMove,onPressOut:function(n){null!=N&&N.onPressOut(n),B(!1),null!=R&&R(n)}}},[v,N,_,M,h,C,w,I,L,R,D,B,z]),K=(0,u.default)(J);return l.createElement(f.default,(0,n.default)({},G,K,{ref:H,style:'function'==typeof k?k({pressed:A}):k,collapsable:!1}),'function'==typeof S?S({pressed:A}):S,null)}));P.displayName='Pressable';var y=P;e.default=y},312,[3,29,23,103,129,313,200,174,206]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(l,u){var s=null!=l?l:{},c=s.color,f=s.borderless,p=s.radius,v=s.foreground;return(0,o.useMemo)(function(){if('android'===t.Platform.OS&&t.Platform.Version>=21&&(null!=c||null!=f||null!=p)){var o=(0,t.processColor)(c);(0,n.default)(null==o||'number'==typeof o,'Unexpected color given for Ripple color');var l={type:'RippleAndroid',color:o,borderless:!0===f,rippleRadius:p};return{viewProps:!0===v?{nativeForegroundAndroid:l}:{nativeBackgroundAndroid:l},onPressIn:function(n){var t,o,l=u.current;null!=l&&(r(d[4]).Commands.hotspotUpdate(l,null!=(t=n.nativeEvent.locationX)?t:0,null!=(o=n.nativeEvent.locationY)?o:0),r(d[4]).Commands.setPressed(l,!0))},onPressMove:function(n){var t,o,l=u.current;null!=l&&r(d[4]).Commands.hotspotUpdate(l,null!=(t=n.nativeEvent.locationX)?t:0,null!=(o=n.nativeEvent.locationY)?o:0)},onPressOut:function(n){var t=u.current;null!=t&&r(d[4]).Commands.setPressed(t,!1)}}}return null},[f,c,v,p,u])};var n=r(d[0])(r(d[1])),t=r(d[2]),o=(function(n,t){if(!t&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var o=l(t);if(o&&o.has(n))return o.get(n);var u={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var f=s?Object.getOwnPropertyDescriptor(n,c):null;f&&(f.get||f.set)?Object.defineProperty(u,c,f):u[c]=n[c]}u.default=n,o&&o.set(n,u);return u})(r(d[3]));function l(n){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(l=function(n){return n?o:t})(n)}},313,[3,18,1,129,175]); +__d(function(g,r,i,a,m,_e,d){'use strict';var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),f=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=p(e);if(n&&n.has(t))return n.get(t);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var c=u?Object.getOwnPropertyDescriptor(t,f):null;c&&(c.get||c.set)?Object.defineProperty(o,f,c):o[f]=t[f]}o.default=t,n&&n.set(t,o);return o})(r(d[6])),c=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),s=r(d[0])(r(d[9]));function p(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(p=function(t){return t?n:e})(t)}function y(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var h=(function(c){(0,n.default)(O,c);var p,h,b=(p=O,h=y(),function(){var t,e=(0,u.default)(p);if(h){var n=(0,u.default)(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return(0,o.default)(this,t)});function O(){return(0,t.default)(this,O),b.apply(this,arguments)}return(0,e.default)(O,[{key:"render",value:function(){return f.createElement(s.default,{style:[v.dummy,this.props.style]},f.createElement(l.default,{style:v.text},"ProgressViewIOS is not supported on this platform!"))}}]),O})(f.Component),v=c.default.create({dummy:{width:120,height:20,backgroundColor:'#ffbcbc',borderWidth:1,borderColor:'red',alignItems:'center',justifyContent:'center'},text:{color:'#333333',margin:5,fontSize:10}});m.exports=h},314,[3,7,8,10,12,15,129,173,184,174]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t,n=r(d[0])(r(d[1])),u=r(d[0])(r(d[2])),f=r(d[0])(r(d[3])),o=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var u=c(n);if(u&&u.has(t))return u.get(t);var f={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in t)if("default"!==l&&Object.prototype.hasOwnProperty.call(t,l)){var p=o?Object.getOwnPropertyDescriptor(t,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=t[l]}f.default=t,u&&u.set(t,f);return f})(r(d[4])),l=r(d[0])(r(d[5])),p=["emulateUnlessSupported"];function c(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,u=new WeakMap;return(c=function(t){return t?u:n})(t)}if('android'===f.default.OS)t=o.forwardRef(function(t,f){t.emulateUnlessSupported;var c=(0,u.default)(t,p);return o.createElement(l.default,(0,n.default)({},c,{ref:f}))});else{var s=r(d[6]).default;t=o.forwardRef(function(t,u){return o.createElement(s,(0,n.default)({emulateUnlessSupported:!0},t,{ref:u}))})}var v=t;e.default=v},315,[3,29,103,19,129,174,316]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var f=(0,r(d[0])(r(d[1])).default)('SafeAreaView',{paperComponentName:'RCTSafeAreaView',interfaceOnly:!0});e.default=f},316,[3,179]); +__d(function(g,r,i,a,m,_e,d){'use strict';var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),f=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=p(e);if(n&&n.has(t))return n.get(t);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var c=u?Object.getOwnPropertyDescriptor(t,f):null;c&&(c.get||c.set)?Object.defineProperty(o,f,c):o[f]=t[f]}o.default=t,n&&n.set(t,o);return o})(r(d[6])),c=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),s=r(d[0])(r(d[9]));function p(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(p=function(t){return t?n:e})(t)}function y(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var h=(function(c){(0,n.default)(O,c);var p,h,b=(p=O,h=y(),function(){var t,e=(0,u.default)(p);if(h){var n=(0,u.default)(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return(0,o.default)(this,t)});function O(){return(0,t.default)(this,O),b.apply(this,arguments)}return(0,e.default)(O,[{key:"render",value:function(){return f.createElement(s.default,{style:[v.dummy,this.props.style]},f.createElement(l.default,{style:v.text},"SegmentedControlIOS is not supported on this platform!"))}}]),O})(f.Component),v=c.default.create({dummy:{width:120,height:50,backgroundColor:'#ffbcbc',borderWidth:1,borderColor:'red',alignItems:'center',justifyContent:'center'},text:{color:'#333333',margin:5,fontSize:10}});m.exports=h},317,[3,7,8,10,12,15,129,173,184,174]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var l=c(n);if(l&&l.has(t))return l.get(t);var u={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var s=o?Object.getOwnPropertyDescriptor(t,f):null;s&&(s.get||s.set)?Object.defineProperty(u,f,s):u[f]=t[f]}u.default=t,l&&l.set(t,u);return u})(r(d[3])),u=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),f=r(d[0])(r(d[6])),s=["value","minimumValue","maximumValue","step","onValueChange","onSlidingComplete"];function c(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,l=new WeakMap;return(c=function(t){return t?l:n})(t)}var v,p=l.forwardRef(function(c,p){var b,y=f.default.compose(v.slider,c.style),S=c.value,O=void 0===S?.5:S,h=c.minimumValue,V=void 0===h?0:h,C=c.maximumValue,j=void 0===C?1:C,w=c.step,E=void 0===w?0:w,P=c.onValueChange,x=c.onSlidingComplete,M=(0,n.default)(c,s),R=P?function(t){var n=!0;'android'===u.default.OS&&(n=null!=t.nativeEvent.fromUser&&t.nativeEvent.fromUser),n&&P(t.nativeEvent.value)}:null,_=R,k=x?function(t){x(t.nativeEvent.value)}:null,W=!0===c.disabled||!0===(null==(b=c.accessibilityState)?void 0:b.disabled),D=W?(0,t.default)({},c.accessibilityState,{disabled:!0}):c.accessibilityState;return l.createElement(o.default,(0,t.default)({},M,{accessibilityState:D,enabled:!W,disabled:W,maximumValue:j,minimumValue:V,onChange:_,onResponderTerminationRequest:function(){return!1},onSlidingComplete:k,onStartShouldSetResponder:function(){return!0},onValueChange:R,ref:p,step:E,style:y,value:O}))});v='ios'===u.default.OS?f.default.create({slider:{height:40}}):f.default.create({slider:{}}),m.exports=p},318,[3,29,103,129,19,319,173]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=(0,r(d[0])(r(d[1])).default)('Slider',{interfaceOnly:!0,paperComponentName:'RCTSlider'});e.default=l},319,[3,179]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),u=C(r(d[5])),f=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),s=C(r(d[8])),v=C(r(d[9])),b=["disabled","ios_backgroundColor","onChange","onValueChange","style","thumbColor","trackColor","value"];function p(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(p=function(t){return t?o:n})(t)}function C(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=p(n);if(o&&o.has(t))return o.get(t);var l={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var c=u?Object.getOwnPropertyDescriptor(t,f):null;c&&(c.get||c.set)?Object.defineProperty(l,f,c):l[f]=t[f]}return l.default=t,o&&o.set(t,l),l}var h=function(){return!1},y=function(){return!0},R=u.forwardRef(function(p,C){var R=p.disabled,k=p.ios_backgroundColor,O=p.onChange,w=p.onValueChange,S=p.style,_=p.thumbColor,j=p.trackColor,P=p.value,T=(0,o.default)(p,b),E=null==j?void 0:j.false,M=null==j?void 0:j.true,V=u.useRef(null),F=(0,c.default)(V,C),W=u.useState({value:null}),q=(0,n.default)(W,2),D=q[0],N=q[1],L=function(t){null==O||O(t),null==w||w(t.nativeEvent.value),N({value:t.nativeEvent.value})};if(u.useLayoutEffect(function(){var t,n=!0===P;D.value!==n&&null!=(null==(t=V.current)?void 0:t.setNativeProps)&&('android'===l.default.OS?s.Commands.setNativeValue(V.current,n):v.Commands.setValue(V.current,n))},[P,D]),'android'===l.default.OS){var x,z={enabled:!0!==R,on:!0===P,style:S,thumbTintColor:_,trackColorForFalse:E,trackColorForTrue:M,trackTintColor:!0===P?M:E};return u.createElement(s.default,(0,t.default)({},T,z,{accessibilityRole:null!=(x=p.accessibilityRole)?x:'switch',onChange:L,onResponderTerminationRequest:h,onStartShouldSetResponder:y,ref:F}))}var A,B={disabled:R,onTintColor:M,style:f.default.compose({height:31,width:51},f.default.compose(S,null==k?null:{backgroundColor:k,borderRadius:16})),thumbTintColor:_,tintColor:E,value:!0===P};return u.createElement(v.default,(0,t.default)({},T,B,{accessibilityRole:null!=(A=p.accessibilityRole)?A:'switch',onChange:L,onResponderTerminationRequest:h,onStartShouldSetResponder:y,ref:F}))});e.default=R},320,[3,29,23,103,19,129,173,321,322,323]); +__d(function(g,r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){for(var o=arguments.length,u=new Array(o),i=0;i=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(t,n){if(t){if("string"==typeof t)return u(t,n);var o=Object.prototype.toString.call(t).slice(8,-1);return"Object"===o&&t.constructor&&(o=t.constructor.name),"Map"===o||"Set"===o?Array.from(t):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?u(t,n):void 0}}function u(t,n){(null==n||n>t.length)&&(n=t.length);for(var o=0,u=new Array(n);o1&&(be=u.createElement(f.default,null,be)),oe=u.createElement(I,(0,t.default)({ref:ee},o,pe,{accessible:ce,autoCapitalize:ye,blurOnSubmit:ae,caretHidden:se,children:be,disableFullscreenUI:o.disableFullscreenUI,focusable:ie,mostRecentEventCount:H,onBlur:ue,onChange:te,onFocus:le,onScroll:re,onSelectionChange:ne,placeholder:Se,selection:M,style:Ce,text:X,textBreakStrategy:o.textBreakStrategy}))}return u.createElement(p.default.Provider,{value:!0},oe)}var M=u.forwardRef(function(l,o){var c=l.allowFontScaling,s=void 0===c||c,f=l.rejectResponderTermination,p=void 0===f||f,v=l.underlineColorAndroid,C=void 0===v?'transparent':v,y=(0,n.default)(l,F);return u.createElement(A,(0,t.default)({allowFontScaling:s,rejectResponderTermination:p,underlineColorAndroid:C},y,{forwardedRef:o}))});M.propTypes=o.default,M.State={currentlyFocusedInput:v.default.currentlyFocusedInput,currentlyFocusedField:v.default.currentlyFocusedField,focusTextInput:v.default.focusTextInput,blurTextInput:v.default.blurTextInput};var z=s.default.create({multilineInput:{paddingTop:5}});m.exports=M},324,[3,29,103,23,129,325,19,173,184,176,135,18,297,241,200,136,326,328]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=['phoneNumber','link','address','calendarEvent','none','all'];m.exports=r(d[0])({},r(d[1]),{autoCapitalize:r(d[2]).oneOf(['none','sentences','words','characters']),autoComplete:r(d[2]).oneOf(['cc-csc','cc-exp','cc-exp-month','cc-exp-year','cc-number','email','name','password','postal-code','street-address','tel','username','off']),autoCorrect:r(d[2]).bool,spellCheck:r(d[2]).bool,autoFocus:r(d[2]).bool,allowFontScaling:r(d[2]).bool,maxFontSizeMultiplier:r(d[2]).number,editable:r(d[2]).bool,keyboardType:r(d[2]).oneOf(['default','email-address','numeric','phone-pad','number-pad','url','ascii-capable','numbers-and-punctuation','name-phone-pad','decimal-pad','twitter','web-search','ascii-capable-number-pad','visible-password']),keyboardAppearance:r(d[2]).oneOf(['default','light','dark']),returnKeyType:r(d[2]).oneOf(['done','go','next','search','send','none','previous','default','emergency-call','google','join','route','yahoo']),returnKeyLabel:r(d[2]).string,maxLength:r(d[2]).number,numberOfLines:r(d[2]).number,disableFullscreenUI:r(d[2]).bool,enablesReturnKeyAutomatically:r(d[2]).bool,multiline:r(d[2]).bool,textBreakStrategy:r(d[2]).oneOf(['simple','highQuality','balanced']),onBlur:r(d[2]).func,onFocus:r(d[2]).func,onChange:r(d[2]).func,onChangeText:r(d[2]).func,onContentSizeChange:r(d[2]).func,onTextInput:r(d[2]).func,onEndEditing:r(d[2]).func,onSelectionChange:r(d[2]).func,onSubmitEditing:r(d[2]).func,onKeyPress:r(d[2]).func,onLayout:r(d[2]).func,onScroll:r(d[2]).func,placeholder:r(d[2]).string,placeholderTextColor:r(d[3]),scrollEnabled:r(d[2]).bool,secureTextEntry:r(d[2]).bool,selectionColor:r(d[3]),selection:r(d[2]).shape({start:r(d[2]).number.isRequired,end:r(d[2]).number}),value:r(d[2]).string,defaultValue:r(d[2]).string,clearButtonMode:r(d[2]).oneOf(['never','while-editing','unless-editing','always']),clearTextOnFocus:r(d[2]).bool,selectTextOnFocus:r(d[2]).bool,blurOnSubmit:r(d[2]).bool,style:r(d[4]).style,underlineColorAndroid:r(d[3]),inlineImageLeft:r(d[2]).string,inlineImagePadding:r(d[2]).number,rejectResponderTermination:r(d[2]).bool,dataDetectorTypes:r(d[2]).oneOfType([r(d[2]).oneOf(n),r(d[2]).arrayOf(r(d[2]).oneOf(n))]),caretHidden:r(d[2]).bool,contextMenuHidden:r(d[2]).bool,inputAccessoryViewID:r(d[2]).string,textContentType:r(d[2]).oneOf(['none','URL','addressCity','addressCityAndState','addressState','countryName','creditCardNumber','emailAddress','familyName','fullStreetAddress','givenName','jobTitle','location','middleName','name','namePrefix','nameSuffix','nickname','organizationName','postalCode','streetAddressLine1','streetAddressLine2','sublocality','telephoneNumber','username','password','newPassword','oneTimeCode']),showSoftInputOnFocus:r(d[2]).bool})},325,[29,277,191,195,185]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Commands=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var u=o(n);if(u&&u.has(t))return u.get(t);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var p=l?Object.getOwnPropertyDescriptor(t,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=t[c]}f.default=t,u&&u.set(t,f);return f})(r(d[3]));function o(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,u=new WeakMap;return(o=function(t){return t?u:n})(t)}var f=(0,t.default)({supportedCommands:['focus','blur','setTextAndSelection']});e.Commands=f;var l=u.get('RCTSinglelineTextInputView',function(){return n.default});e.default=l},326,[3,137,327,150]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),n={uiViewClassName:'RCTSinglelineTextInputView',bubblingEventTypes:{topBlur:{phasedRegistrationNames:{bubbled:'onBlur',captured:'onBlurCapture'}},topChange:{phasedRegistrationNames:{bubbled:'onChange',captured:'onChangeCapture'}},topEndEditing:{phasedRegistrationNames:{bubbled:'onEndEditing',captured:'onEndEditingCapture'}},topFocus:{phasedRegistrationNames:{bubbled:'onFocus',captured:'onFocusCapture'}},topKeyPress:{phasedRegistrationNames:{bubbled:'onKeyPress',captured:'onKeyPressCapture'}},topSubmitEditing:{phasedRegistrationNames:{bubbled:'onSubmitEditing',captured:'onSubmitEditingCapture'}},topTouchCancel:{phasedRegistrationNames:{bubbled:'onTouchCancel',captured:'onTouchCancelCapture'}},topTouchEnd:{phasedRegistrationNames:{bubbled:'onTouchEnd',captured:'onTouchEndCapture'}},topTouchMove:{phasedRegistrationNames:{bubbled:'onTouchMove',captured:'onTouchMoveCapture'}}},directEventTypes:{},validAttributes:(0,t.default)({},o.default.validAttributes,{fontSize:!0,fontWeight:!0,fontVariant:!0,textShadowOffset:{diff:r(d[3])},allowFontScaling:!0,fontStyle:!0,textTransform:!0,textAlign:!0,fontFamily:!0,lineHeight:!0,isHighlighted:!0,writingDirection:!0,textDecorationLine:!0,textShadowRadius:!0,letterSpacing:!0,textDecorationStyle:!0,textDecorationColor:{process:r(d[4])},color:{process:r(d[4])},maxFontSizeMultiplier:!0,textShadowColor:{process:r(d[4])},editable:!0,inputAccessoryViewID:!0,caretHidden:!0,enablesReturnKeyAutomatically:!0,placeholderTextColor:{process:r(d[4])},onSelectionChange:!0,clearButtonMode:!0,onContentSizeChange:!0,keyboardType:!0,selection:!0,returnKeyType:!0,blurOnSubmit:!0,mostRecentEventCount:!0,onChange:!0,scrollEnabled:!0,selectionColor:{process:r(d[4])},contextMenuHidden:!0,secureTextEntry:!0,onTextInput:!0,placeholder:!0,autoCorrect:!0,onScroll:!0,multiline:!0,textContentType:!0,maxLength:!0,autoCapitalize:!0,keyboardAppearance:!0,passwordRules:!0,spellCheck:!0,selectTextOnFocus:!0,text:!0,clearTextOnFocus:!0})};m.exports=n},327,[3,29,139,146,141]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Commands=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var u=o(n);if(u&&u.has(t))return u.get(t);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var p=l?Object.getOwnPropertyDescriptor(t,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=t[c]}f.default=t,u&&u.set(t,f);return f})(r(d[3]));function o(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,u=new WeakMap;return(o=function(t){return t?u:n})(t)}var f=(0,t.default)({supportedCommands:['focus','blur','setTextAndSelection']});e.Commands=f;var l=u.get('RCTMultilineTextInputView',function(){return n.default});e.default=l},328,[3,137,327,150]); +__d(function(g,r,i,a,m,_e,d){var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),o=((function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=u(e);if(o&&o.has(t))return o.get(t);var E={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in t)if("default"!==n&&Object.prototype.hasOwnProperty.call(t,n)){var l=s?Object.getOwnPropertyDescriptor(t,n):null;l&&(l.get||l.set)?Object.defineProperty(E,n,l):E[n]=t[n]}E.default=t,o&&o.set(t,E)})(r(d[3])),r(d[0])(r(d[4]))),E=r(d[0])(r(d[5])),s=r(d[0])(r(d[6])),n=r(d[0])(r(d[7])),l=r(d[0])(r(d[8]));function u(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,o=new WeakMap;return(u=function(t){return t?o:e})(t)}var h=function(t){var e=t.touches,o=t.changedTouches,E=e&&e.length>0,s=o&&o.length>0;return!E&&s?o[0]:E?e[0]:t},R='NOT_RESPONDER',_='RESPONDER_INACTIVE_PRESS_IN',c='RESPONDER_INACTIVE_PRESS_OUT',S='RESPONDER_ACTIVE_PRESS_IN',T='RESPONDER_ACTIVE_PRESS_OUT',P='RESPONDER_ACTIVE_LONG_PRESS_IN',D='RESPONDER_ACTIVE_LONG_PRESS_OUT',N='ERROR',O={NOT_RESPONDER:!1,RESPONDER_INACTIVE_PRESS_IN:!1,RESPONDER_INACTIVE_PRESS_OUT:!1,RESPONDER_ACTIVE_PRESS_IN:!1,RESPONDER_ACTIVE_PRESS_OUT:!1,RESPONDER_ACTIVE_LONG_PRESS_IN:!1,RESPONDER_ACTIVE_LONG_PRESS_OUT:!1,ERROR:!1},p=(0,e.default)({},O,{RESPONDER_ACTIVE_PRESS_OUT:!0,RESPONDER_ACTIVE_PRESS_IN:!0}),f=(0,e.default)({},O,{RESPONDER_INACTIVE_PRESS_IN:!0,RESPONDER_ACTIVE_PRESS_IN:!0,RESPONDER_ACTIVE_LONG_PRESS_IN:!0}),A=(0,e.default)({},O,{RESPONDER_ACTIVE_LONG_PRESS_IN:!0}),b='DELAY',I='RESPONDER_GRANT',L='RESPONDER_RELEASE',v='RESPONDER_TERMINATED',y='ENTER_PRESS_RECT',C='LEAVE_PRESS_RECT',G='LONG_PRESS_DETECTED',V={NOT_RESPONDER:{DELAY:N,RESPONDER_GRANT:_,RESPONDER_RELEASE:N,RESPONDER_TERMINATED:N,ENTER_PRESS_RECT:N,LEAVE_PRESS_RECT:N,LONG_PRESS_DETECTED:N},RESPONDER_INACTIVE_PRESS_IN:{DELAY:S,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:_,LEAVE_PRESS_RECT:c,LONG_PRESS_DETECTED:N},RESPONDER_INACTIVE_PRESS_OUT:{DELAY:T,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:_,LEAVE_PRESS_RECT:c,LONG_PRESS_DETECTED:N},RESPONDER_ACTIVE_PRESS_IN:{DELAY:N,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:S,LEAVE_PRESS_RECT:T,LONG_PRESS_DETECTED:P},RESPONDER_ACTIVE_PRESS_OUT:{DELAY:N,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:S,LEAVE_PRESS_RECT:T,LONG_PRESS_DETECTED:N},RESPONDER_ACTIVE_LONG_PRESS_IN:{DELAY:N,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:P,LEAVE_PRESS_RECT:D,LONG_PRESS_DETECTED:P},RESPONDER_ACTIVE_LONG_PRESS_OUT:{DELAY:N,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:P,LEAVE_PRESS_RECT:D,LONG_PRESS_DETECTED:N},error:{DELAY:R,RESPONDER_GRANT:_,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:R,LEAVE_PRESS_RECT:R,LONG_PRESS_DETECTED:R}},H={componentDidMount:function(){E.default.isTV},componentWillUnmount:function(){this.touchableDelayTimeout&&clearTimeout(this.touchableDelayTimeout),this.longPressDelayTimeout&&clearTimeout(this.longPressDelayTimeout),this.pressOutDelayTimeout&&clearTimeout(this.pressOutDelayTimeout)},touchableGetInitialState:function(){return{touchable:{touchState:void 0,responderID:null}}},touchableHandleResponderTerminationRequest:function(){return!this.props.rejectResponderTermination},touchableHandleStartShouldSetResponder:function(){return!this.props.disabled},touchableLongPressCancelsPress:function(){return!0},touchableHandleResponderGrant:function(t){var e=t.currentTarget;t.persist(),this.pressOutDelayTimeout&&clearTimeout(this.pressOutDelayTimeout),this.pressOutDelayTimeout=null,this.state.touchable.touchState=R,this.state.touchable.responderID=e,this._receiveSignal(I,t);var o=void 0!==this.touchableGetHighlightDelayMS?Math.max(this.touchableGetHighlightDelayMS(),0):130;0!==(o=isNaN(o)?130:o)?this.touchableDelayTimeout=setTimeout(this._handleDelay.bind(this,t),o):this._handleDelay(t);var E=void 0!==this.touchableGetLongPressDelayMS?Math.max(this.touchableGetLongPressDelayMS(),10):370;E=isNaN(E)?370:E,this.longPressDelayTimeout=setTimeout(this._handleLongDelay.bind(this,t),E+o)},touchableHandleResponderRelease:function(t){this.pressInLocation=null,this._receiveSignal(L,t)},touchableHandleResponderTerminate:function(t){this.pressInLocation=null,this._receiveSignal(v,t)},touchableHandleResponderMove:function(t){if(this.state.touchable.positionOnActivate){var e=this.state.touchable.positionOnActivate,o=this.state.touchable.dimensionsOnActivate,E=this.touchableGetPressRectOffset?this.touchableGetPressRectOffset():{left:20,right:20,top:20,bottom:20},s=E.left,n=E.top,l=E.right,u=E.bottom,R=this.touchableGetHitSlop?this.touchableGetHitSlop():null;R&&(s+=R.left||0,n+=R.top||0,l+=R.right||0,u+=R.bottom||0);var c=h(t.nativeEvent),S=c&&c.pageX,T=c&&c.pageY;if(this.pressInLocation)this._getDistanceBetweenPoints(S,T,this.pressInLocation.pageX,this.pressInLocation.pageY)>10&&this._cancelLongPressDelayTimeout();if(S>e.left-s&&T>e.top-n&&S>`");E!==s&&(this._performSideEffectsForTransition(E,s,t,e),this.state.touchable.touchState=s)}},_cancelLongPressDelayTimeout:function(){this.longPressDelayTimeout&&clearTimeout(this.longPressDelayTimeout),this.longPressDelayTimeout=null},_isHighlight:function(t){return t===S||t===P},_savePressInLocation:function(t){var e=h(t.nativeEvent),o=e&&e.pageX,E=e&&e.pageY,s=e&&e.locationX,n=e&&e.locationY;this.pressInLocation={pageX:o,pageY:E,locationX:s,locationY:n}},_getDistanceBetweenPoints:function(t,e,o,E){var s=t-o,n=e-E;return Math.sqrt(s*s+n*n)},_performSideEffectsForTransition:function(t,e,o,s){var n=this._isHighlight(t),u=this._isHighlight(e);(o===v||o===L)&&this._cancelLongPressDelayTimeout();var h=t===R&&e===_,c=!p[t]&&p[e];if((h||c)&&this._remeasureMetricsOnActivation(),f[t]&&o===G&&this.touchableHandleLongPress&&this.touchableHandleLongPress(s),u&&!n?this._startHighlight(s):!u&&n&&this._endHighlight(s),f[t]&&o===L){var S=!!this.props.onLongPress,T=A[t]&&(!S||!this.touchableLongPressCancelsPress());(!A[t]||T)&&this.touchableHandlePress&&(u||n||(this._startHighlight(s),this._endHighlight(s)),'android'!==E.default.OS||this.props.touchSoundDisabled||l.default.playTouchSound(),this.touchableHandlePress(s))}this.touchableDelayTimeout&&clearTimeout(this.touchableDelayTimeout),this.touchableDelayTimeout=null},_startHighlight:function(t){this._savePressInLocation(t),this.touchableHandleActivePressIn&&this.touchableHandleActivePressIn(t)},_endHighlight:function(t){var e=this;this.touchableHandleActivePressOut&&(this.touchableGetPressOutDelayMS&&this.touchableGetPressOutDelayMS()?this.pressOutDelayTimeout=setTimeout(function(){e.touchableHandleActivePressOut(t)},this.touchableGetPressOutDelayMS()):this.touchableHandleActivePressOut(t))},withoutDefaultFocusAndBlur:{}},M=(H.touchableHandleFocus,H.touchableHandleBlur,(0,t.default)(H,["touchableHandleFocus","touchableHandleBlur"]));H.withoutDefaultFocusAndBlur=M;var w={Mixin:H,renderDebugView:function(t){t.color,t.hitSlop;return null}};m.exports=w},329,[3,103,29,129,330,19,332,43,202]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])(r(d[1])),o=t.default.twoArgumentPooler;function n(t,o){this.width=t,this.height=o}n.prototype.destructor=function(){this.width=null,this.height=null},n.getPooledFromElement=function(t){return n.getPooled(t.offsetWidth,t.offsetHeight)},t.default.addPoolingTo(n,o),m.exports=n},330,[3,331]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])(r(d[1])),n=function(t){if(this.instancePool.length){var n=this.instancePool.pop();return this.call(n,t),n}return new this(t)},o=function(n){(0,t.default)(n instanceof this,'Trying to release an instance into a pool of a different type.'),n.destructor(),this.instancePool.length=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function b(e,t){if(e){if("string"==typeof e)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n=0;n--)if(t[n]())return;i.exitApp()});var i={exitApp:function(){n.default&&n.default.invokeDefaultBackPressHandler()},addEventListener:function(n,f){return-1===t.indexOf(f)&&t.push(f),{remove:function(){return i.removeEventListener(n,f)}}},removeEventListener:function(n,i){-1!==t.indexOf(i)&&t.splice(t.indexOf(i),1)}};m.exports=i},345,[3,346,4]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('DeviceEventManager');e.default=n},346,[21]); +__d(function(g,r,i,a,m,_e,d){var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),l=(r(d[0])(r(d[7])),r(d[0])(r(d[8]))),s=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=p(e);if(n&&n.has(t))return n.get(t);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var l=u?Object.getOwnPropertyDescriptor(t,c):null;l&&(l.get||l.set)?Object.defineProperty(o,c,l):o[c]=t[c]}o.default=t,n&&n.set(t,o);return o})(r(d[9]));function p(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(p=function(t){return t?n:e})(t)}function f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var h=(function(l){(0,n.default)(b,l);var p,h,y=(p=b,h=f(),function(){var t,e=(0,u.default)(p);if(h){var n=(0,u.default)(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return(0,o.default)(this,t)});function b(){var e;(0,t.default)(this,b);for(var n=arguments.length,o=new Array(n),u=0;uthis.eventPool.length&&this.eventPool.push(e)}function T(e){e.getPooled=_,e.eventPool=[],e.release=R}n(i[2])(P.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=w)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=w)},persist:function(){this.isPersistent=w},isPersistent:x,destructor:function(){var e,n=this.constructor.Interface;for(e in n)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=x,this._dispatchInstances=this._dispatchListeners=null}}),P.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},P.extend=function(e){function t(){}function r(){return l.apply(this,arguments)}var l=this;t.prototype=l.prototype;var a=new t;return n(i[2])(a,r.prototype),r.prototype=a,r.prototype.constructor=r,r.Interface=n(i[2])({},l.Interface,e),r.extend=l.extend,T(r),r},T(P);var E=P.extend({touchHistory:function(){return null}});function N(e){return"topTouchStart"===e}function C(e){return"topTouchMove"===e}var z=["topTouchStart"],I=["topTouchMove"],L=["topTouchCancel","topTouchEnd"],U=[],M={touchBank:U,numberActiveTouches:0,indexOfSingleActiveTouch:-1,mostRecentTimeStamp:0};function F(e){return e.timeStamp||e.timestamp}function D(e){if(null==(e=e.identifier))throw Error("Touch object is missing identifier.");return e}function A(e){var n=D(e),t=U[n];t?(t.touchActive=!0,t.startPageX=e.pageX,t.startPageY=e.pageY,t.startTimeStamp=F(e),t.currentPageX=e.pageX,t.currentPageY=e.pageY,t.currentTimeStamp=F(e),t.previousPageX=e.pageX,t.previousPageY=e.pageY,t.previousTimeStamp=F(e)):(t={touchActive:!0,startPageX:e.pageX,startPageY:e.pageY,startTimeStamp:F(e),currentPageX:e.pageX,currentPageY:e.pageY,currentTimeStamp:F(e),previousPageX:e.pageX,previousPageY:e.pageY,previousTimeStamp:F(e)},U[n]=t),M.mostRecentTimeStamp=F(e)}function H(e){var n=U[D(e)];n&&(n.touchActive=!0,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=F(e),M.mostRecentTimeStamp=F(e))}function Q(e){var n=U[D(e)];n&&(n.touchActive=!1,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=F(e),M.mostRecentTimeStamp=F(e))}var j,B={instrument:function(e){j=e},recordTouchTrack:function(e,n){if(null!=j&&j(e,n),C(e))n.changedTouches.forEach(H);else if(N(e))n.changedTouches.forEach(A),M.numberActiveTouches=n.touches.length,1===M.numberActiveTouches&&(M.indexOfSingleActiveTouch=n.touches[0].identifier);else if(("topTouchEnd"===e||"topTouchCancel"===e)&&(n.changedTouches.forEach(Q),M.numberActiveTouches=n.touches.length,1===M.numberActiveTouches))for(e=0;e=(a=n&-n)||16===l&&0!=(4194240&a)))return n;if(0!=(4&r)&&(r|=16&t),0!==(n=e.entangledLanes))for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function wn(e,n,t){e.pendingLanes|=n,536870912!==n&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[n=31-_n(n)]=t}function xn(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0 component.");return t=$n,$n+=2,{node:Ln(t,"RCTRawText",n,{text:e},r)}}var Kn=setTimeout,Zn=clearTimeout;function et(e){var n=e.node,t=an(null,Ge,{style:{display:"none"}},e.canonical.viewConfig.validAttributes);return{node:Dn(n,t),canonical:e.canonical}}function nt(e,n,t){return n="",t&&(n=" (created by "+t+")"),"\n in "+(e||"Unknown")+n}function tt(e,n){return e?nt(e.displayName||e.name||null,n,null):""}var rt=Object.prototype.hasOwnProperty,lt=[],at=-1;function it(e){return{current:e}}function ut(e){0>at||(e.current=lt[at],lt[at]=null,at--)}function ot(e,n){lt[++at]=e.current,e.current=n}var st={},ct=it(st),dt=it(!1),ft=st;function pt(e,n){var t=e.type.contextTypes;if(!t)return st;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l,a={};for(l in t)a[l]=n[l];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=a),a}function ht(e){return null!==(e=e.childContextTypes)&&void 0!==e}function gt(){ut(dt),ut(ct)}function mt(e,n,t){if(ct.current!==st)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");ot(ct,n),ot(dt,t)}function vt(e,t,r){var l=e.stateNode;if(t=t.childContextTypes,"function"!=typeof l.getChildContext)return r;for(var a in l=l.getChildContext())if(!(a in t))throw Error((We(e)||"Unknown")+'.getChildContext(): key "'+a+'" is not defined in childContextTypes.');return n(i[2])({},r,l)}function bt(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||st,ft=ct.current,ot(ct,e),ot(dt,dt.current),!0}function yt(e,n,t){var r=e.stateNode;if(!r)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");t?(e=vt(e,n,ft),r.__reactInternalMemoizedMergedChildContext=e,ut(dt),ut(ct),ot(ct,e)):ut(dt),ot(dt,t)}var St=null,kt=!1,wt=!1;function xt(){if(!wt&&null!==St){wt=!0;var e=0,t=En;try{var r=St;for(En=1;eg?(m=h,h=null):m=h.sibling;var v=f(l,h,u[g],o);if(null===v){null===h&&(h=m);break}e&&h&&null===v.alternate&&n(l,h),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v,h=m}if(g===u.length)return t(l,h),s;if(null===h){for(;gg?(m=h,h=null):m=h.sibling;var b=f(l,h,v.value,o);if(null===b){null===h&&(h=m);break}e&&h&&null===b.alternate&&n(l,h),i=a(b,i,g),null===c?s=b:c.sibling=b,c=b,h=m}if(v.done)return t(l,h),s;if(null===h){for(;!v.done;g++,v=u.next())null!==(v=d(l,v.value,o))&&(i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return s}for(h=r(l,h);!v.done;g++,v=u.next())null!==(v=p(h,l,g,v.value,o))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return e&&h.forEach(function(e){return n(l,e)}),s}return function(e,r,a,u){var o="object"==typeof a&&null!==a&&a.type===_e&&null===a.key;if(o&&(a=a.props.children),"object"==typeof a&&null!==a){switch(a.$$typeof){case xe:e:{var s=a.key;for(o=r;null!==o;){if(o.key===s){if((s=a.type)===_e){if(7===o.tag){t(e,o.sibling),(r=l(o,a.props.children)).return=e,e=r;break e}}else if(o.elementType===s){t(e,o.sibling),(r=l(o,a.props)).ref=nr(e,o,a),r.return=e,e=r;break e}t(e,o);break}n(e,o),o=o.sibling}a.type===_e?((r=ti(a.props.children,e.mode,u,a.key)).return=e,e=r):((u=ni(a.type,a.key,a.props,null,e.mode,u)).ref=nr(e,r,a),u.return=e,e=u)}return i(e);case Pe:e:{for(o=a.key;null!==r;){if(r.key===o){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){t(e,r.sibling),(r=l(r,a.children||[])).return=e,e=r;break e}t(e,r);break}n(e,r),r=r.sibling}(r=ai(a,e.mode,u)).return=e,e=r}return i(e)}if(m(a))return h(e,r,a,u);if(je(a))return g(e,r,a,u);tr(e,a)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(t(e,r.sibling),(r=l(r,a)).return=e,e=r):(t(e,r),(r=li(a,e.mode,u)).return=e,e=r),i(e);if(void 0===a&&!o)switch(e.tag){case 1:case 0:case 11:case 15:throw Error((We(e)||"Component")+"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.")}return t(e,r)}}var lr=rr(!0),ar=rr(!1),ir={},ur=it(ir),or=it(ir),sr=it(ir);function cr(e){if(e===ir)throw Error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.");return e}function dr(e,n){ot(sr,n),ot(or,e),ot(ur,ir),ut(ur),ot(ur,{isInAParentText:!1})}function fr(){ut(ur),ut(or),ut(sr)}function pr(e){cr(sr.current);var n=cr(ur.current),t=e.type;t="AndroidTextInput"===t||"RCTMultilineTextInputView"===t||"RCTSinglelineTextInputView"===t||"RCTText"===t||"RCTVirtualText"===t,n!==(t=n.isInAParentText!==t?{isInAParentText:t}:n)&&(ot(or,e),ot(ur,t))}function hr(e){or.current===e&&(ut(ur),ut(or))}var gr=it(0);function mr(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===t.dehydrated||zn()||zn()))return n}else if(19===n.tag&&void 0!==n.memoizedProps.revealOrder){if(0!=(128&n.flags))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var vr=[];function br(){for(var e=0;ea))throw Error("Too many re-renders. React limits the number of renders to prevent an infinite loop.");a+=1,Pr=xr=null,n.updateQueue=null,yr.current=tl,e=t(r,l)}while(Rr)}if(yr.current=Zr,n=null!==xr&&null!==xr.next,kr=0,Pr=xr=wr=null,_r=!1,n)throw Error("Rendered fewer hooks than expected. This may be caused by an accidental early return statement.");return e}function Cr(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Pr?wr.memoizedState=Pr=e:Pr=Pr.next=e,Pr}function zr(){if(null===xr){var e=wr.alternate;e=null!==e?e.memoizedState:null}else e=xr.next;var n=null===Pr?wr.memoizedState:Pr.next;if(null!==n)Pr=n,xr=e;else{if(null===e)throw Error("Rendered more hooks than during the previous render.");e={memoizedState:(xr=e).memoizedState,baseState:xr.baseState,baseQueue:xr.baseQueue,queue:xr.queue,next:null},null===Pr?wr.memoizedState=Pr=e:Pr=Pr.next=e}return Pr}function Ir(e,n){return"function"==typeof n?n(e):n}function Lr(e){var n=zr(),t=n.queue;if(null===t)throw Error("Should have a queue. This is likely a bug in React. Please file an issue.");t.lastRenderedReducer=e;var r=xr,l=r.baseQueue,a=t.pending;if(null!==a){if(null!==l){var i=l.next;l.next=a.next,a.next=i}r.baseQueue=l=a,t.pending=null}if(null!==l){a=l.next,r=r.baseState;var u=i=null,o=null,s=a;do{var c=s.lane;if((kr&c)===c)null!==o&&(o=o.next={lane:0,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null}),r=s.eagerReducer===e?s.eagerState:e(r,s.action);else{var d={lane:c,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null};null===o?(u=o=d,i=r):o=o.next=d,wr.lanes|=c,da|=c}s=s.next}while(null!==s&&s!==a);null===o?i=r:o.next=u,_t(r,n.memoizedState)||(sl=!0),n.memoizedState=r,n.baseState=i,n.baseQueue=o,t.lastRenderedState=r}if(null!==(e=t.interleaved)){l=e;do{a=l.lane,wr.lanes|=a,da|=a,l=l.next}while(l!==e)}else null===l&&(t.lanes=0);return[n.memoizedState,t.dispatch]}function Ur(e){var n=zr(),t=n.queue;if(null===t)throw Error("Should have a queue. This is likely a bug in React. Please file an issue.");t.lastRenderedReducer=e;var r=t.dispatch,l=t.pending,a=n.memoizedState;if(null!==l){t.pending=null;var i=l=l.next;do{a=e(a,i.action),i=i.next}while(i!==l);_t(a,n.memoizedState)||(sl=!0),n.memoizedState=a,null===n.baseQueue&&(n.baseState=a),t.lastRenderedState=a}return[a,r]}function Mr(e,n,t){var r=n._getVersion;r=r(n._source);var l=n._workInProgressVersionSecondary;if(null!==l?e=l===r:(e=e.mutableReadLanes,(e=(kr&e)===e)&&(n._workInProgressVersionSecondary=r,vr.push(n))),e)return t(n._source);throw vr.push(n),Error("Cannot read from mutable source during the current render without tearing. This may be a bug in React. Please file an issue.")}function Fr(e,n,t,r){var l=la;if(null===l)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");var a=n._getVersion,i=a(n._source),u=yr.current,o=u.useState(function(){return Mr(l,n,t)}),s=o[1],c=o[0];o=Pr;var d=e.memoizedState,f=d.refs,p=f.getSnapshot,h=d.source;d=d.subscribe;var g=wr;return e.memoizedState={refs:f,source:n,subscribe:r},u.useEffect(function(){f.getSnapshot=t,f.setSnapshot=s;var e=a(n._source);_t(i,e)||(e=t(n._source),_t(c,e)||(s(e),e=Ta(g),l.mutableReadLanes|=e&l.pendingLanes),Pn(l,l.mutableReadLanes))},[t,n,r]),u.useEffect(function(){return r(n._source,function(){var e=f.getSnapshot,t=f.setSnapshot;try{t(e(n._source));var r=Ta(g);l.mutableReadLanes|=r&l.pendingLanes}catch(e){t(function(){throw e})}})},[n,r]),_t(p,t)&&_t(h,n)&&_t(d,r)||((e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ir,lastRenderedState:c}).dispatch=s=Kr.bind(null,wr,e),o.queue=e,o.baseQueue=null,c=Mr(l,n,t),o.memoizedState=o.baseState=c),c}function Dr(e,n,t){return Fr(zr(),e,n,t)}function Ar(e){var n=Cr();return"function"==typeof e&&(e=e()),n.memoizedState=n.baseState=e,e=(e=n.queue={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ir,lastRenderedState:e}).dispatch=Kr.bind(null,wr,e),[n.memoizedState,e]}function Hr(e,n,t,r){return e={tag:e,create:n,destroy:t,deps:r,next:null},null===(n=wr.updateQueue)?(n={lastEffect:null},wr.updateQueue=n,n.lastEffect=e.next=e):null===(t=n.lastEffect)?n.lastEffect=e.next=e:(r=t.next,t.next=e,e.next=r,n.lastEffect=e),e}function Qr(){return zr().memoizedState}function jr(e,n,t,r){var l=Cr();wr.flags|=e,l.memoizedState=Hr(1|n,t,void 0,void 0===r?null:r)}function Br(e,n,t,r){var l=zr();r=void 0===r?null:r;var a=void 0;if(null!==xr){var i=xr.memoizedState;if(a=i.destroy,null!==r&&Er(r,i.deps))return void(l.memoizedState=Hr(n,t,a,r))}wr.flags|=e,l.memoizedState=Hr(1|n,t,a,r)}function Wr(e,n){return jr(1049600,4,e,n)}function Or(e,n){return Br(1024,4,e,n)}function Vr(e,n){return Br(4,2,e,n)}function Yr(e,n){return"function"==typeof n?(e=e(),n(e),function(){n(null)}):null!==n&&void 0!==n?(e=e(),n.current=e,function(){n.current=null}):void 0}function qr(e,n,t){return t=null!==t&&void 0!==t?t.concat([e]):null,Br(4,2,Yr.bind(null,n,e),t)}function Xr(){}function $r(e,n){var t=zr();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&Er(n,r[1])?r[0]:(t.memoizedState=[e,n],e)}function Gr(e,n){var t=zr();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&Er(n,r[1])?r[0]:(e=e(),t.memoizedState=[e,n],e)}function Jr(e,n){var t=En;En=0!==t&&4>t?t:4,e(!0);var r=Sr.transition;Sr.transition=1;try{e(!1),n()}finally{En=t,Sr.transition=r}}function Kr(e,n,t){var r=Ra(),l=Ta(e),a={lane:l,action:t,eagerReducer:null,eagerState:null,next:null},i=e.alternate;if(e===wr||null!==i&&i===wr)Rr=_r=!0,null===(l=n.pending)?a.next=a:(a.next=l.next,l.next=a),n.pending=a;else{if(null!==la&&0!=(1&e.mode)&&0==(8&ra)){var u=n.interleaved;null===u?(a.next=a,null===At?At=[n]:At.push(n)):(a.next=u.next,u.next=a),n.interleaved=a}else null===(u=n.pending)?a.next=a:(a.next=u.next,u.next=a),n.pending=a;if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=n.lastRenderedReducer))try{var o=n.lastRenderedState,s=i(o,t);if(a.eagerReducer=i,a.eagerState=s,_t(s,o))return}catch(e){}a=Ea(e,l,r),0!=(4194240&l)&&null!==a&&(e=n.lanes,l|=e&=a.pendingLanes,n.lanes=l,Pn(a,l))}}var Zr={readContext:Dt,useCallback:Tr,useContext:Tr,useEffect:Tr,useImperativeHandle:Tr,useLayoutEffect:Tr,useMemo:Tr,useReducer:Tr,useRef:Tr,useState:Tr,useDebugValue:Tr,useDeferredValue:Tr,useTransition:Tr,useMutableSource:Tr,useOpaqueIdentifier:Tr,unstable_isNewReconciler:!1},el={readContext:Dt,useCallback:function(e,n){return Cr().memoizedState=[e,void 0===n?null:n],e},useContext:Dt,useEffect:Wr,useImperativeHandle:function(e,n,t){return t=null!==t&&void 0!==t?t.concat([e]):null,jr(4,2,Yr.bind(null,n,e),t)},useLayoutEffect:function(e,n){return jr(4,2,e,n)},useMemo:function(e,n){var t=Cr();return n=void 0===n?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=Cr();return n=void 0!==t?t(n):n,r.memoizedState=r.baseState=n,e=(e=r.queue={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n}).dispatch=Kr.bind(null,wr,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Cr().memoizedState=e},useState:Ar,useDebugValue:Xr,useDeferredValue:function(e){var n=Ar(e),t=n[0],r=n[1];return Wr(function(){var n=Sr.transition;Sr.transition=1;try{r(e)}finally{Sr.transition=n}},[e]),t},useTransition:function(){var e=Ar(!1),n=e[0];return e=Jr.bind(null,e[1]),Cr().memoizedState=e,[n,e]},useMutableSource:function(e,n,t){var r=Cr();return r.memoizedState={refs:{getSnapshot:n,setSnapshot:null},source:e,subscribe:t},Fr(r,e,n,t)},useOpaqueIdentifier:function(){throw Error("Not yet implemented")},unstable_isNewReconciler:!1},nl={readContext:Dt,useCallback:$r,useContext:Dt,useEffect:Or,useImperativeHandle:qr,useLayoutEffect:Vr,useMemo:Gr,useReducer:Lr,useRef:Qr,useState:function(){return Lr(Ir)},useDebugValue:Xr,useDeferredValue:function(e){var n=Lr(Ir),t=n[0],r=n[1];return Or(function(){var n=Sr.transition;Sr.transition=1;try{r(e)}finally{Sr.transition=n}},[e]),t},useTransition:function(){return[Lr(Ir)[0],zr().memoizedState]},useMutableSource:Dr,useOpaqueIdentifier:function(){return Lr(Ir)[0]},unstable_isNewReconciler:!1},tl={readContext:Dt,useCallback:$r,useContext:Dt,useEffect:Or,useImperativeHandle:qr,useLayoutEffect:Vr,useMemo:Gr,useReducer:Ur,useRef:Qr,useState:function(){return Ur(Ir)},useDebugValue:Xr,useDeferredValue:function(e){var n=Ur(Ir),t=n[0],r=n[1];return Or(function(){var n=Sr.transition;Sr.transition=1;try{r(e)}finally{Sr.transition=n}},[e]),t},useTransition:function(){return[Ur(Ir)[0],zr().memoizedState]},useMutableSource:Dr,useOpaqueIdentifier:function(){return Ur(Ir)[0]},unstable_isNewReconciler:!1};function rl(e,n){try{var t="",r=n;do{t+=Tt(r),r=r.return}while(r);var l=t}catch(e){l="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:n,stack:l}}if("function"!=typeof n(i[3]).ReactFiberErrorDialog.showErrorDialog)throw Error("Expected ReactFiberErrorDialog.showErrorDialog to be a function.");function ll(e,t){try{!1!==n(i[3]).ReactFiberErrorDialog.showErrorDialog({componentStack:null!==t.stack?t.stack:"",error:t.value,errorBoundary:null!==e&&1===e.tag?e.stateNode:null})&&console.error(t.value)}catch(e){setTimeout(function(){throw e})}}var al="function"==typeof WeakMap?WeakMap:Map;function il(e,n,t){(t=Bt(-1,t)).tag=3,t.payload={element:null};var r=n.value;return t.callback=function(){ma||(ma=!0,va=r),ll(e,n)},t}function ul(e,n,t){(t=Bt(-1,t)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var l=n.value;t.payload=function(){return ll(e,n),r(l)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(t.callback=function(){"function"!=typeof r&&(null===ba?ba=new Set([this]):ba.add(this),ll(e,n));var t=n.stack;this.componentDidCatch(n.value,{componentStack:null!==t?t:""})}),t}var ol=we.ReactCurrentOwner,sl=!1;function cl(e,n,t,r){n.child=null===e?ar(n,null,t,r):lr(n,e.child,t,r)}function dl(e,n,t,r,l){t=t.render;var a=n.ref;return Ft(n,l),r=Nr(e,n,t,r,a,l),null===e||sl?(n.flags|=1,cl(e,n,r,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-1029,e.lanes&=~l,Ll(e,n,l))}function fl(e,n,t,r,l,a){if(null===e){var i=t.type;return"function"!=typeof i||Ka(i)||void 0!==i.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=ni(t.type,null,r,n,n.mode,a)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=i,pl(e,n,i,r,l,a))}return i=e.child,0==(l&a)&&(l=i.memoizedProps,(t=null!==(t=t.compare)?t:Rt)(l,r)&&e.ref===n.ref)?Ll(e,n,a):(n.flags|=1,(e=ei(i,r)).ref=n.ref,e.return=n,n.child=e)}function pl(e,n,t,r,l,a){if(null!==e&&Rt(e.memoizedProps,r)&&e.ref===n.ref){if(sl=!1,0==(a&l))return n.lanes=e.lanes,Ll(e,n,a);0!=(32768&e.flags)&&(sl=!0)}return ml(e,n,t,r,a)}function hl(e,n,t){var r=n.pendingProps,l=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(1&n.mode))n.memoizedState={baseLanes:0,cachePool:null},ot(oa,ua),ua|=t;else{if(0==(1073741824&t))return e=null!==a?a.baseLanes|t:t,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null},n.updateQueue=null,ot(oa,ua),ua|=e,null;n.memoizedState={baseLanes:0,cachePool:null},r=null!==a?a.baseLanes:t,ot(oa,ua),ua|=r}else null!==a?(r=a.baseLanes|t,n.memoizedState=null):r=t,ot(oa,ua),ua|=r;return cl(e,n,l,t),n.child}function gl(e,n){var t=n.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(n.flags|=256)}function ml(e,n,t,r,l){var a=ht(t)?ft:ct.current;return a=pt(n,a),Ft(n,l),t=Nr(e,n,t,r,a,l),null===e||sl?(n.flags|=1,cl(e,n,t,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-1029,e.lanes&=~l,Ll(e,n,l))}function vl(e,n,t,r,l){if(ht(t)){var a=!0;bt(n)}else a=!1;if(Ft(n,l),null===n.stateNode)null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2),Kt(n,t,r),er(n,t,r,l),r=!0;else if(null===e){var i=n.stateNode,u=n.memoizedProps;i.props=u;var o=i.context,s=t.contextType;"object"==typeof s&&null!==s?s=Dt(s):s=pt(n,s=ht(t)?ft:ct.current);var c=t.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==r||o!==s)&&Zt(n,i,r,s),Ht=!1;var f=n.memoizedState;i.state=f,Yt(n,r,i,l),o=n.memoizedState,u!==r||f!==o||dt.current||Ht?("function"==typeof c&&($t(n,t,c,r),o=n.memoizedState),(u=Ht||Jt(n,t,u,r,f,o,s))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(n.flags|=4)):("function"==typeof i.componentDidMount&&(n.flags|=4),n.memoizedProps=r,n.memoizedState=o),i.props=r,i.state=o,i.context=s,r=u):("function"==typeof i.componentDidMount&&(n.flags|=4),r=!1)}else{i=n.stateNode,jt(e,n),u=n.memoizedProps,s=n.type===n.elementType?u:Et(n.type,u),i.props=s,d=n.pendingProps,f=i.context,"object"==typeof(o=t.contextType)&&null!==o?o=Dt(o):o=pt(n,o=ht(t)?ft:ct.current);var p=t.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==d||f!==o)&&Zt(n,i,r,o),Ht=!1,f=n.memoizedState,i.state=f,Yt(n,r,i,l);var h=n.memoizedState;u!==d||f!==h||dt.current||Ht?("function"==typeof p&&($t(n,t,p,r),h=n.memoizedState),(s=Ht||Jt(n,t,s,r,f,h,o)||!1)?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,o),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,o)),"function"==typeof i.componentDidUpdate&&(n.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(n.flags|=512)):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=512),n.memoizedProps=r,n.memoizedState=h),i.props=r,i.state=h,i.context=o,r=s):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=512),r=!1)}return bl(e,n,t,r,a,l)}function bl(e,n,t,r,l,a){gl(e,n);var i=0!=(128&n.flags);if(!r&&!i)return l&&yt(n,t,!1),Ll(e,n,a);r=n.stateNode,ol.current=n;var u=i&&"function"!=typeof t.getDerivedStateFromError?null:r.render();return n.flags|=1,null!==e&&i?(n.child=lr(n,e.child,null,a),n.child=lr(n,null,u,a)):cl(e,n,u,a),n.memoizedState=r.state,l&&yt(n,t,!0),n.child}function yl(e){var n=e.stateNode;n.pendingContext?mt(0,n.pendingContext,n.pendingContext!==n.context):n.context&&mt(0,n.context,!1),dr(e,n.containerInfo)}var Sl,kl,wl,xl,Pl={dehydrated:null,retryLane:0};function _l(e){return{baseLanes:e,cachePool:null}}function Rl(e,n,t){var r,l=n.pendingProps,a=gr.current,i=!1;return(r=0!=(128&n.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,n.flags&=-129):null!==e&&null===e.memoizedState||void 0===l.fallback||!0===l.unstable_avoidThisFallback||(a|=1),ot(gr,1&a),null===e?(e=l.children,a=l.fallback,i?(e=Tl(n,e,a,t),n.child.memoizedState=_l(t),n.memoizedState=Pl,e):"number"==typeof l.unstable_expectedLoadTime?(e=Tl(n,e,a,t),n.child.memoizedState=_l(t),n.memoizedState=Pl,n.lanes=4194304,e):((t=ri({mode:"visible",children:e},n.mode,t,null)).return=n,n.child=t)):(e.memoizedState,i?(l=Nl(e,n,l.children,l.fallback,t),i=n.child,a=e.child.memoizedState,i.memoizedState=null===a?_l(t):{baseLanes:a.baseLanes|t,cachePool:null},i.childLanes=e.childLanes&~t,n.memoizedState=Pl,l):(t=El(e,n,l.children,t),n.memoizedState=null,t))}function Tl(e,n,t,r){var l=e.mode,a=e.child;return n={mode:"hidden",children:n},0==(1&l)&&null!==a?(a.childLanes=0,a.pendingProps=n):a=ri(n,l,0,null),t=ti(t,l,r,null),a.return=e,t.return=e,a.sibling=t,e.child=a,t}function El(e,n,t,r){var l=e.child;return e=l.sibling,t=ei(l,{mode:"visible",children:t}),0==(1&n.mode)&&(t.lanes=r),t.return=n,t.sibling=null,null!==e&&(null===(r=n.deletions)?(n.deletions=[e],n.flags|=16):r.push(e)),n.child=t}function Nl(e,n,t,r,l){var a=n.mode,i=(e=e.child).sibling,u={mode:"hidden",children:t};return 0==(1&a)&&n.child!==e?((t=n.child).childLanes=0,t.pendingProps=u,n.deletions=null):(t=ei(e,u)).subtreeFlags=1835008&e.subtreeFlags,null!==i?r=ei(i,r):(r=ti(r,a,l,null)).flags|=2,r.return=n,t.return=n,t.sibling=r,n.child=t,r}function Cl(e,n){e.lanes|=n;var t=e.alternate;null!==t&&(t.lanes|=n),Mt(e.return,n)}function zl(e,n,t,r,l){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:l}:(a.isBackwards=n,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=t,a.tailMode=l)}function Il(e,n,t){var r=n.pendingProps,l=r.revealOrder,a=r.tail;if(cl(e,n,r.children,t),0!=(2&(r=gr.current)))r=1&r|2,n.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Cl(e,t);else if(19===e.tag)Cl(e,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(ot(gr,r),0==(1&n.mode))n.memoizedState=null;else switch(l){case"forwards":for(t=n.child,l=null;null!==t;)null!==(e=t.alternate)&&null===mr(e)&&(l=t),t=t.sibling;null===(t=l)?(l=n.child,n.child=null):(l=t.sibling,t.sibling=null),zl(n,!1,l,t,a);break;case"backwards":for(t=null,l=n.child,n.child=null;null!==l;){if(null!==(e=l.alternate)&&null===mr(e)){n.child=l;break}e=l.sibling,l.sibling=t,t=l,l=e}zl(n,!0,t,null,a);break;case"together":zl(n,!1,null,null,void 0);break;default:n.memoizedState=null}return n.child}function Ll(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),da|=n.lanes,0==(t&n.childLanes))return null;if(null!==e&&n.child!==e.child)throw Error("Resuming work not yet implemented.");if(null!==n.child){for(t=ei(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=ei(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function Ul(e,n){if(null!==e&&e.child===n.child)return!0;if(0!=(16&n.flags))return!1;for(e=n.child;null!==e;){if(0!=(6454&e.flags)||0!=(6454&e.subtreeFlags))return!1;e=e.sibling}return!0}function Ml(e,n,t,r){for(var l=n.child;null!==l;){if(5===l.tag){var a=l.stateNode;t&&r&&(a=et(a)),Qn(e,a.node)}else if(6===l.tag){if(a=l.stateNode,t&&r)throw Error("Not yet implemented.");Qn(e,a.node)}else if(4!==l.tag){if(13===l.tag&&0!=(4&l.flags)&&(a=null!==l.memoizedState)){var i=l.child;if(null!==i&&(null!==i.child&&(i.child.return=i,Ml(e,i,!0,a)),null!==(a=i.sibling))){a.return=l,l=a;continue}}if(null!==l.child){l.child.return=l,l=l.child;continue}}if(l===n)break;for(;null===l.sibling;){if(null===l.return||l.return===n)return;l=l.return}l.sibling.return=l.return,l=l.sibling}}function Fl(e,n){switch(e.tailMode){case"hidden":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Dl(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,r=0;if(n)for(var l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=1835008&l.subtreeFlags,r|=1835008&l.flags,l.return=e,l=l.sibling;else for(l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=t,n}function Al(e,t,r){var l=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Dl(t),null;case 1:return ht(t.type)&>(),Dl(t),null;case 3:return l=t.stateNode,fr(),ut(dt),ut(ct),br(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),null!==e&&null!==e.child||l.hydrate||(t.flags|=512),kl(e,t),Dl(t),null;case 5:hr(t),r=cr(sr.current);var a=t.type;if(null!==e&&null!=t.stateNode)wl(e,t,a,l,r),e.ref!==t.ref&&(t.flags|=256);else{if(!l){if(null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return Dl(t),null}cr(ur.current),e=$n,$n+=2,a=Xn(a);var u=an(null,Ge,l,a.validAttributes);r=Ln(e,a.uiViewClassName,r,u,t),e=new Gn(e,a,l,t),Sl(e={node:r,canonical:e},t,!1,!1),t.stateNode=e,null!==t.ref&&(t.flags|=256)}return Dl(t),null;case 6:if(e&&null!=t.stateNode)xl(e,t,e.memoizedProps,l);else{if("string"!=typeof l&&null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");e=cr(sr.current),r=cr(ur.current),t.stateNode=Jn(l,e,r,t)}return Dl(t),null;case 13:return ut(gr),l=t.memoizedState,0!=(128&t.flags)?(t.lanes=r,t):(l=null!==l,r=!1,null!==e&&(r=null!==e.memoizedState),l&&!r&&0!=(1&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&gr.current)?0===sa&&(sa=3):(0!==sa&&3!==sa||(sa=4),null===la||0==(268435455&da)&&0==(268435455&fa)||Ia(la,ia))),l&&(t.flags|=4),Dl(t),null);case 4:return fr(),kl(e,t),Dl(t),null;case 10:return Ut(t.type._context),Dl(t),null;case 17:return ht(t.type)&>(),Dl(t),null;case 19:if(ut(gr),null===(a=t.memoizedState))return Dl(t),null;if(l=0!=(128&t.flags),null===(u=a.rendering))if(l)Fl(a,!1);else{if(0!==sa||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(u=mr(e))){for(t.flags|=128,Fl(a,!1),null!==(e=u.updateQueue)&&(t.updateQueue=e,t.flags|=4),t.subtreeFlags=0,e=r,l=t.child;null!==l;)a=e,(r=l).flags&=1835010,null===(u=r.alternate)?(r.childLanes=0,r.lanes=a,r.child=null,r.subtreeFlags=0,r.memoizedProps=null,r.memoizedState=null,r.updateQueue=null,r.dependencies=null,r.stateNode=null):(r.childLanes=u.childLanes,r.lanes=u.lanes,r.child=u.child,r.subtreeFlags=0,r.deletions=null,r.memoizedProps=u.memoizedProps,r.memoizedState=u.memoizedState,r.updateQueue=u.updateQueue,r.type=u.type,a=u.dependencies,r.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),l=l.sibling;return ot(gr,1&gr.current|2),t.child}e=e.sibling}null!==a.tail&&n(i[4]).unstable_now()>ga&&(t.flags|=128,l=!0,Fl(a,!1),t.lanes=4194304)}else{if(!l)if(null!==(e=mr(u))){if(t.flags|=128,l=!0,null!==(e=e.updateQueue)&&(t.updateQueue=e,t.flags|=4),Fl(a,!0),null===a.tail&&"hidden"===a.tailMode&&!u.alternate)return Dl(t),null}else 2*n(i[4]).unstable_now()-a.renderingStartTime>ga&&1073741824!==r&&(t.flags|=128,l=!0,Fl(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(null!==(e=a.last)?e.sibling=u:t.child=u,a.last=u)}return null!==a.tail?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=n(i[4]).unstable_now(),t.sibling=null,e=gr.current,ot(gr,l?1&e|2:1&e),t):(Dl(t),null);case 22:case 23:return Ua(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&"unstable-defer-without-hiding"!==l.mode&&(t.flags|=4),r&&0==(1073741824&ua)&&0!=(1&t.mode)||Dl(t),null}throw Error("Unknown unit of work tag ("+t.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function Hl(e){switch(e.tag){case 1:ht(e.type)&>();var n=e.flags;return 16384&n?(e.flags=-16385&n|128,e):null;case 3:if(fr(),ut(dt),ut(ct),br(),0!=(128&(n=e.flags)))throw Error("The root failed to unmount after an error. This is likely a bug in React. Please file an issue.");return e.flags=-16385&n|128,e;case 5:return hr(e),null;case 13:return ut(gr),16384&(n=e.flags)?(e.flags=-16385&n|128,e):null;case 19:return ut(gr),null;case 4:return fr(),null;case 10:return Ut(e.type._context),null;case 22:case 23:return Ua(),null;case 24:default:return null}}Sl=function(e,n,t,r){for(var l=n.child;null!==l;){if(5===l.tag){var a=l.stateNode;t&&r&&(a=et(a)),Hn(e.node,a.node)}else if(6===l.tag){if(a=l.stateNode,t&&r)throw Error("Not yet implemented.");Hn(e.node,a.node)}else if(4!==l.tag){if(13===l.tag&&0!=(4&l.flags)&&(a=null!==l.memoizedState)){var i=l.child;if(null!==i&&(null!==i.child&&(i.child.return=i,Sl(e,i,!0,a)),null!==(a=i.sibling))){a.return=l,l=a;continue}}if(null!==l.child){l.child.return=l,l=l.child;continue}}if(l===n)break;for(;null===l.sibling;){if(null===l.return||l.return===n)return;l=l.return}l.sibling.return=l.return,l=l.sibling}},kl=function(e,n){var t=n.stateNode;if(!Ul(e,n)){e=t.containerInfo;var r=An(e);Ml(r,n,!1,!1),t.pendingChildren=r,n.flags|=4,jn(e,r)}},wl=function(e,n,t,r){t=e.stateNode;var l=e.memoizedProps;if((e=Ul(e,n))&&l===r)n.stateNode=t;else{var a=n.stateNode;cr(ur.current);var i=null;l!==r&&(l=an(null,l,r,a.canonical.viewConfig.validAttributes),a.canonical.currentProps=r,i=l),e&&null===i?n.stateNode=t:(r=i,l=t.node,t={node:e?null!==r?Dn(l,r):Un(l):null!==r?Fn(l,r):Mn(l),canonical:t.canonical},n.stateNode=t,e?n.flags|=4:Sl(t,n,!1,!1))}},xl=function(e,n,t,r){t!==r?(e=cr(sr.current),t=cr(ur.current),n.stateNode=Jn(r,e,t,n),n.flags|=4):n.stateNode=e.stateNode};var Ql="function"==typeof WeakSet?WeakSet:Set,jl=null;function Bl(e,n){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){qa(e,n,t)}else t.current=null}var Wl=!1;function Ol(e,n){for(jl=n;null!==jl;)if(n=(e=jl).child,0!=(516&e.subtreeFlags)&&null!==n)n.return=e,jl=n;else for(;null!==jl;){e=jl;try{var t=e.alternate;if(0!=(512&e.flags))switch(e.tag){case 0:case 11:case 15:break;case 1:if(null!==t){var r=t.memoizedProps,l=t.memoizedState,a=e.stateNode,i=a.getSnapshotBeforeUpdate(e.elementType===e.type?r:Et(e.type,r),l);a.__reactInternalSnapshotBeforeUpdate=i}break;case 3:break;case 5:case 6:case 4:case 17:break;default:throw 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.")}}catch(n){qa(e,e.return,n)}if(null!==(n=e.sibling)){n.return=e.return,jl=n;break}jl=e.return}return t=Wl,Wl=!1,t}function Vl(e,n,t){var r=n.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var l=r=r.next;do{if((l.tag&e)===e){var a=l.destroy;if(l.destroy=void 0,void 0!==a){var i=n,u=t;try{a()}catch(e){qa(i,u,e)}}}l=l.next}while(l!==r)}}function Yl(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function ql(e){var n=e.alternate;null!==n&&(e.alternate=null,ql(n)),e.child=null,e.deletions=null,e.sibling=null,e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Xl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:return void Vl(3,t,t.return);case 12:return;case 13:return null!==t.memoizedState&&(ha=n(i[4]).unstable_now()),void $l(t);case 19:return void $l(t);case 22:case 23:return}e:{switch(t.tag){case 1:case 5:case 6:break e;case 3:case 4:break e}throw 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.")}}function $l(e){var n=e.updateQueue;if(null!==n){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new Ql),n.forEach(function(n){var r=$a.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))})}}function Gl(e,n){for(jl=n;null!==jl;){if(null!==(n=(e=jl).deletions))for(var t=0;ta&&(a=o),l&=~u}if(l=a,10<(l=(120>(l=n(i[4]).unstable_now()-l)?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*Zl(l/1960))-l)){e.timeoutHandle=Kn(Wa.bind(null,e),l);break}Wa(e);break;case 5:Wa(e);break;default:throw Error("Unknown root exit status.")}}return Ca(e,n(i[4]).unstable_now()),e.callbackNode===r?za.bind(null,e):null}function Ia(e,n){for(n&=~pa,n&=~fa,e.suspendedLanes|=n,e.pingedLanes&=~n,e=e.expirationTimes;0 component higher in the tree to provide a loading indicator or placeholder to display.")}5!==sa&&(sa=2),o=rl(o,u),p=i;do{switch(p.tag){case 3:a=o,p.flags|=16384,n&=-n,p.lanes|=n,Vt(p,il(p,a,n));break e;case 1:a=o;var w=p.type,x=p.stateNode;if(0==(128&p.flags)&&("function"==typeof w.getDerivedStateFromError||null!==x&&"function"==typeof x.componentDidCatch&&(null===ba||!ba.has(x)))){p.flags|=16384,n&=-n,p.lanes|=n,Vt(p,ul(p,a,n));break e}}p=p.return}while(null!==p)}Ba(t)}catch(e){n=e,aa===t&&null!==t&&(aa=t=t.return);continue}break}}function Da(){var e=ea.current;return ea.current=Zr,null===e?Zr:e}function Aa(e,n){var t=ra;ra|=8;var r=Da();for(la===e&&ia===n||Ma(e,n);;)try{Ha();break}catch(n){Fa(e,n)}if(Lt(),ra=t,ea.current=r,null!==aa)throw Error("Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.");return la=null,ia=0,sa}function Ha(){for(;null!==aa;)ja(aa)}function Qa(){for(;null!==aa&&!n(i[4]).unstable_shouldYield();)ja(aa)}function ja(e){var n=Kl(e.alternate,e,ua);e.memoizedProps=e.pendingProps,null===n?Ba(e):aa=n,na.current=null}function Ba(e){var n=e;do{var t=n.alternate;if(e=n.return,0==(8192&n.flags)){if(null!==(t=Al(t,n,ua)))return void(aa=t)}else{if(null!==(t=Hl(n)))return t.flags&=8191,void(aa=t);null!==e&&(e.flags|=8192,e.subtreeFlags=0,e.deletions=null)}if(null!==(n=n.sibling))return void(aa=n);aa=n=e}while(null!==n);0===sa&&(sa=5)}function Wa(e){var n=En,t=ta.transition;try{ta.transition=0,En=1,Oa(e,n)}finally{ta.transition=t,En=n}return null}function Oa(e,t){do{Va()}while(null!==Sa);if(0!=(24&ra))throw Error("Should not already be working.");var r=e.finishedWork,l=e.finishedLanes;if(null===r)return null;if(e.finishedWork=null,e.finishedLanes=0,r===e.current)throw Error("Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.");e.callbackNode=null,e.callbackPriority=0;var a=r.lanes|r.childLanes;if(xn(e,a),e===la&&(aa=la=null,ia=0),0==(1040&r.subtreeFlags)&&0==(1040&r.flags)||ya||(ya=!0,n(i[4]).unstable_scheduleCallback(n(i[4]).unstable_NormalPriority,function(){return Va(),null})),a=0!=(8054&r.flags),0!=(8054&r.subtreeFlags)||a){a=ta.transition,ta.transition=0;var u=En;En=1;var o=ra;ra|=16,na.current=null,Ol(e,r),Gl(e,r),e.current=r,Jl(r),n(i[4]).unstable_requestPaint(),ra=o,En=u,ta.transition=a}else e.current=r;if(ya&&(ya=!1,Sa=e,ka=l),0===(a=e.pendingLanes)&&(ba=null),0!=(1&a)?e===xa?wa++:(wa=0,xa=e):wa=0,hn(r.stateNode),Ca(e,n(i[4]).unstable_now()),ma)throw ma=!1,e=va,va=null,e;return 0!=(4&ra)?null:(0!=(1&ka)&&0!==e.tag&&Va(),xt(),null)}function Va(){if(null!==Sa){var e=Nn(ka),n=ta.transition,t=En;try{if(ta.transition=0,En=16>e?16:e,null===Sa)var r=!1;else{if(e=Sa,Sa=null,ka=0,0!=(24&ra))throw Error("Cannot flush passive effects while already rendering.");var l=ra;for(ra|=16,jl=e.current;null!==jl;){var a=jl,i=a.child;if(0!=(16&jl.flags)){var u=a.deletions;if(null!==u){for(var o=0;on(i[4]).unstable_now()-ha?Ma(e,0):pa|=r),Ca(e,t)}function $a(e,n){var t=e.stateNode;null!==t&&t.delete(n),0===(n=0)&&(0==(1&e.mode)?n=1:(n=mn,0==(130023424&(mn<<=1))&&(mn=4194304))),t=Ra(),null!==(e=Na(e,n))&&(wn(e,n,t),Ca(e,t))}function Ga(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ja(e,n,t,r){return new Ga(e,n,t,r)}function Ka(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Za(e){if("function"==typeof e)return Ka(e)?1:0;if(void 0!==e&&null!==e){if((e=e.$$typeof)===Ce)return 11;if(e===Le)return 14}return 2}function ei(e,n){var t=e.alternate;return null===t?((t=Ja(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=1835008&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function ni(e,n,t,r,l,a){var i=2;if(r=e,"function"==typeof e)Ka(e)&&(i=1);else if("string"==typeof e)i=5;else e:switch(e){case _e:return ti(t.children,l,a,n);case Me:i=8,l|=4;break;case Re:i=8,l|=8;break;case Te:return(e=Ja(12,t,n,2|l)).elementType=Te,e.lanes=a,e;case ze:return(e=Ja(13,t,n,l)).elementType=ze,e.lanes=a,e;case Ie:return(e=Ja(19,t,n,l)).elementType=Ie,e.lanes=a,e;case Fe:return ri(t,l,a,n);case De:return(e=Ja(23,t,n,l)).elementType=De,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case Ee:i=10;break e;case Ne:i=9;break e;case Ce:i=11;break e;case Le:i=14;break e;case Ue:i=16,r=null;break e}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(null==e?e:typeof e)+".")}return(n=Ja(i,t,n,l)).elementType=e,n.type=r,n.lanes=a,n}function ti(e,n,t,r){return(e=Ja(7,e,r,n)).lanes=t,e}function ri(e,n,t,r){return(e=Ja(22,e,r,n)).elementType=Fe,e.lanes=t,e}function li(e,n,t){return(e=Ja(6,e,null,n)).lanes=t,e}function ai(e,n,t){return(n=Ja(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function ii(e,n,t){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=t,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=kn(0),this.expirationTimes=kn(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=kn(0)}function ui(e,n,t){var r=3=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(t,n){if(t){if("string"==typeof t)return s(t,n);var u=Object.prototype.toString.call(t).slice(8,-1);return"Object"===u&&t.constructor&&(u=t.constructor.name),"Map"===u||"Set"===u?Array.from(t):"Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u)?s(t,n):void 0}}function s(t,n){(null==n||n>t.length)&&(n=t.length);for(var u=0,o=new Array(n);ui&&(f+=u&&o?h.currentPageX:u&&!o?h.currentPageY:!u&&o?h.previousPageX:h.previousPageY,s=1);else for(var v=0;v=i){f+=u&&o?C.currentPageX:u&&!o?C.currentPageY:!u&&o?C.previousPageX:C.previousPageY,s++}}return s>0?f/s:n.noCentroid},currentCentroidXOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!0,!0)},currentCentroidYOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!1,!0)},previousCentroidXOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!0,!1)},previousCentroidYOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!1,!1)},currentCentroidX:function(t){return n.centroidDimension(t,0,!0,!0)},currentCentroidY:function(t){return n.centroidDimension(t,0,!1,!0)},noCentroid:-1};m.exports=n},376,[]); +__d(function(g,r,i,a,m,e,d){var n=r(d[0])(r(d[1])),s=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),t=r(d[0])(r(d[4])),E=r(d[0])(r(d[5])),A=r(d[0])(r(d[6])),_=r(d[0])(r(d[7])),u=Object.freeze({GRANTED:'granted',DENIED:'denied',NEVER_ASK_AGAIN:'never_ask_again'}),S=Object.freeze({READ_CALENDAR:'android.permission.READ_CALENDAR',WRITE_CALENDAR:'android.permission.WRITE_CALENDAR',CAMERA:'android.permission.CAMERA',READ_CONTACTS:'android.permission.READ_CONTACTS',WRITE_CONTACTS:'android.permission.WRITE_CONTACTS',GET_ACCOUNTS:'android.permission.GET_ACCOUNTS',ACCESS_FINE_LOCATION:'android.permission.ACCESS_FINE_LOCATION',ACCESS_COARSE_LOCATION:'android.permission.ACCESS_COARSE_LOCATION',ACCESS_BACKGROUND_LOCATION:'android.permission.ACCESS_BACKGROUND_LOCATION',RECORD_AUDIO:'android.permission.RECORD_AUDIO',READ_PHONE_STATE:'android.permission.READ_PHONE_STATE',CALL_PHONE:'android.permission.CALL_PHONE',READ_CALL_LOG:'android.permission.READ_CALL_LOG',WRITE_CALL_LOG:'android.permission.WRITE_CALL_LOG',ADD_VOICEMAIL:'com.android.voicemail.permission.ADD_VOICEMAIL',USE_SIP:'android.permission.USE_SIP',PROCESS_OUTGOING_CALLS:'android.permission.PROCESS_OUTGOING_CALLS',BODY_SENSORS:'android.permission.BODY_SENSORS',SEND_SMS:'android.permission.SEND_SMS',RECEIVE_SMS:'android.permission.RECEIVE_SMS',READ_SMS:'android.permission.READ_SMS',RECEIVE_WAP_PUSH:'android.permission.RECEIVE_WAP_PUSH',RECEIVE_MMS:'android.permission.RECEIVE_MMS',READ_EXTERNAL_STORAGE:'android.permission.READ_EXTERNAL_STORAGE',WRITE_EXTERNAL_STORAGE:'android.permission.WRITE_EXTERNAL_STORAGE',BLUETOOTH_CONNECT:'android.permission.BLUETOOTH_CONNECT',BLUETOOTH_SCAN:'android.permission.BLUETOOTH_SCAN',BLUETOOTH_ADVERTISE:'android.permission.BLUETOOTH_ADVERTISE'}),O=new((function(){function O(){(0,o.default)(this,O),this.PERMISSIONS=S,this.RESULTS=u}return(0,t.default)(O,[{key:"checkPermission",value:function(n){return console.warn('"PermissionsAndroid.checkPermission" is deprecated. Use "PermissionsAndroid.check" instead'),(0,_.default)(A.default,'PermissionsAndroid is not installed correctly.'),A.default.checkPermission(n)}},{key:"check",value:function(n){return(0,_.default)(A.default,'PermissionsAndroid is not installed correctly.'),A.default.checkPermission(n)}},{key:"requestPermission",value:function(s,o){var t;return n.default.async(function(E){for(;;)switch(E.prev=E.next){case 0:console.warn('"PermissionsAndroid.requestPermission" is deprecated. Use "PermissionsAndroid.request" instead'),E.next=4;break;case 4:return E.next=6,n.default.awrap(this.request(s,o));case 6:return t=E.sent,E.abrupt("return",t===this.RESULTS.GRANTED);case 8:case"end":return E.stop()}},null,this,null,Promise)}},{key:"request",value:function(o,t){return n.default.async(function(u){for(;;)switch(u.prev=u.next){case 0:u.next=3;break;case 3:if((0,_.default)(A.default,'PermissionsAndroid is not installed correctly.'),!t){u.next=10;break}return u.next=7,n.default.awrap(A.default.shouldShowRequestPermissionRationale(o));case 7:if(!u.sent||!E.default){u.next=10;break}return u.abrupt("return",new Promise(function(n,_){var u=(0,s.default)({},t);E.default.showAlert(u,function(){return _(new Error('Error showing rationale'))},function(){return n(A.default.requestPermission(o))})}));case 10:return u.abrupt("return",A.default.requestPermission(o));case 11:case"end":return u.stop()}},null,this,null,Promise)}},{key:"requestMultiple",value:function(n){return(0,_.default)(A.default,'PermissionsAndroid is not installed correctly.'),A.default.requestMultiplePermissions(n)}}]),O})());m.exports=O},377,[3,75,29,7,8,115,378,18]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('PermissionsAndroid');e.default=n},378,[21]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),f=new n.default('ios'!==c.default.OS?null:l.default),s=new Map,v=(function(){function n(o){var l=this;(0,t.default)(this,n),this._data={},this._remoteNotificationCompleteCallbackCalled=!1,this._isRemote=o.remote,this._isRemote&&(this._notificationId=o.notificationId),o.remote?Object.keys(o).forEach(function(t){var n=o[t];'aps'===t?(l._alert=n.alert,l._sound=n.sound,l._badgeCount=n.badge,l._category=n.category,l._contentAvailable=n['content-available'],l._threadID=n['thread-id']):l._data[t]=n}):(this._badgeCount=o.applicationIconBadgeNumber,this._sound=o.soundName,this._alert=o.alertBody,this._data=o.userInfo,this._category=o.category)}return(0,o.default)(n,[{key:"finish",value:function(t){this._isRemote&&this._notificationId&&!this._remoteNotificationCompleteCallbackCalled&&(this._remoteNotificationCompleteCallbackCalled=!0,(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.onFinishRemoteNotification(this._notificationId,t))}},{key:"getMessage",value:function(){return this._alert}},{key:"getSound",value:function(){return this._sound}},{key:"getCategory",value:function(){return this._category}},{key:"getAlert",value:function(){return this._alert}},{key:"getContentAvailable",value:function(){return this._contentAvailable}},{key:"getBadgeCount",value:function(){return this._badgeCount}},{key:"getData",value:function(){return this._data}},{key:"getThreadID",value:function(){return this._threadID}}],[{key:"presentLocalNotification",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.presentLocalNotification(t)}},{key:"scheduleLocalNotification",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.scheduleLocalNotification(t)}},{key:"cancelAllLocalNotifications",value:function(){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.cancelAllLocalNotifications()}},{key:"removeAllDeliveredNotifications",value:function(){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.removeAllDeliveredNotifications()}},{key:"getDeliveredNotifications",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.getDeliveredNotifications(t)}},{key:"removeDeliveredNotifications",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.removeDeliveredNotifications(t)}},{key:"setApplicationIconBadgeNumber",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.setApplicationIconBadgeNumber(t)}},{key:"getApplicationIconBadgeNumber",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.getApplicationIconBadgeNumber(t)}},{key:"cancelLocalNotifications",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.cancelLocalNotifications(t)}},{key:"getScheduledLocalNotifications",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.getScheduledLocalNotifications(t)}},{key:"addEventListener",value:function(t,o){var l;(0,u.default)('notification'===t||'register'===t||'registrationError'===t||'localNotification'===t,'PushNotificationIOS only supports `notification`, `register`, `registrationError`, and `localNotification` events'),'notification'===t?l=f.addListener("remoteNotificationReceived",function(t){o(new n(t))}):'localNotification'===t?l=f.addListener("localNotificationReceived",function(t){o(new n(t))}):'register'===t?l=f.addListener("remoteNotificationsRegistered",function(t){o(t.deviceToken)}):'registrationError'===t&&(l=f.addListener("remoteNotificationRegistrationError",function(t){o(t)})),s.set(t,l)}},{key:"removeEventListener",value:function(t,o){(0,u.default)('notification'===t||'register'===t||'registrationError'===t||'localNotification'===t,'PushNotificationIOS only supports `notification`, `register`, `registrationError`, and `localNotification` events');var n=s.get(t);n&&(n.remove(),s.delete(t))}},{key:"requestPermissions",value:function(t){var o={alert:!0,badge:!0,sound:!0};return t&&(o={alert:!!t.alert,badge:!!t.badge,sound:!!t.sound}),(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.requestPermissions(o)}},{key:"abandonPermissions",value:function(){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.abandonPermissions()}},{key:"checkPermissions",value:function(t){(0,u.default)('function'==typeof t,'Must provide a valid callback'),(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.checkPermissions(t)}},{key:"getInitialNotification",value:function(){return(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.getInitialNotification().then(function(t){return t&&new n(t)})}},{key:"getAuthorizationStatus",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.getAuthorizationStatus(t)}}]),n})();v.FetchResult={NewData:'UIBackgroundFetchResultNewData',NoData:'UIBackgroundFetchResultNoData',ResultFailed:'UIBackgroundFetchResultFailed'},m.exports=v},379,[3,7,8,95,380,18,19]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('PushNotificationManager');e.default=n},380,[21]); +__d(function(g,r,i,a,m,e,d){'use strict';var n={get:function(n){return console.warn('Settings is not yet supported on Android'),null},set:function(n){console.warn('Settings is not yet supported on Android')},watchKeys:function(n,t){return console.warn('Settings is not yet supported on Android'),-1},clearWatch:function(n){console.warn('Settings is not yet supported on Android')}};m.exports=n},381,[]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),s=r(d[0])(r(d[3])),l=(r(d[0])(r(d[4])),r(d[0])(r(d[5]))),o=(function(){function o(){(0,n.default)(this,o)}return(0,s.default)(o,null,[{key:"share",value:function(n){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(d[6])('object'==typeof n&&null!==n,'Content to share must be a valid object'),r(d[6])('string'==typeof n.url||'string'==typeof n.message,'At least one of URL and message is required'),r(d[6])('object'==typeof s&&null!==s,'Options must be a valid object'),r(d[6])(l.default,'ShareModule should be registered on Android.'),r(d[6])(null==n.title||'string'==typeof n.title,'Invalid title: title should be a string.');var o={title:n.title,message:'string'==typeof n.message?n.message:void 0};return l.default.share(o,s.dialogTitle).then(function(n){return(0,t.default)({activityType:null},n)})}}]),o})();o.sharedAction='sharedAction',o.dismissedAction='dismissedAction',m.exports=o},382,[3,29,7,8,336,383,18]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('ShareModule');e.default=n},383,[21]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),f=t.default.getConstants(),n={SHORT:f.SHORT,LONG:f.LONG,TOP:f.TOP,BOTTOM:f.BOTTOM,CENTER:f.CENTER,show:function(f,n){t.default.show(f,n)},showWithGravity:function(f,n,o){t.default.showWithGravity(f,n,o)},showWithGravityAndOffset:function(f,n,o,O,s){t.default.showWithGravityAndOffset(f,n,o,O,s)}};m.exports=n},384,[3,385]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=n[l]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).getEnforcing('ToastAndroid');e.default=n},385,[21]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){var t=(0,n.useMemo)(function(){return{getCurrentValue:function(){return u.default.getColorScheme()},subscribe:function(n){var t=u.default.addChangeListener(n);return function(){t.remove()}}}},[]);return(0,r(d[3]).useSubscription)(t)};var n=r(d[0]),u=r(d[1])(r(d[2]))},386,[129,3,337,387]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=r(d[0])},387,[388]); +__d(function(_g,r,i,_a,m,e,_d){'use strict';var u=r(_d[0]);e.useSubscription=function(t){var n=t.getCurrentValue,a=t.subscribe,s=u.useState(function(){return{getCurrentValue:n,subscribe:a,value:n()}});t=s[0];var c=s[1];return s=t.value,t.getCurrentValue===n&&t.subscribe===a||(s=n(),c({getCurrentValue:n,subscribe:a,value:s})),u.useDebugValue(s),u.useEffect(function(){function u(){if(!t){var u=n();c(function(t){return t.getCurrentValue!==n||t.subscribe!==a||t.value===u?t:r(_d[1])({},t,{value:u})})}}var t=!1,s=a(u);return u(),function(){t=!0,s()}},[n,a]),s}},388,[129,131]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){var f=(0,u.useState)(function(){return n.default.get('window')}),o=(0,t.default)(f,2),c=o[0],l=o[1];return(0,u.useEffect)(function(){function t(t){var n=t.window;c.width===n.width&&c.height===n.height&&c.scale===n.scale&&c.fontScale===n.fontScale||l(n)}var u=n.default.addEventListener('change',t);return t({window:n.default.get('window')}),function(){u.remove()}},[c]),c};var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[3])},389,[3,23,161,129]); +__d(function(g,r,i,a,m,e,d){'use strict';var A=r(d[0])({BOM:"\ufeff",BULLET:"\u2022",BULLET_SP:"\xa0\u2022\xa0",MIDDOT:"\xb7",MIDDOT_SP:"\xa0\xb7\xa0",MIDDOT_KATAKANA:"\u30fb",MDASH:"\u2014",MDASH_SP:"\xa0\u2014\xa0",NDASH:"\u2013",NDASH_SP:"\xa0\u2013\xa0",NBSP:"\xa0",PIZZA:"\ud83c\udf55",TRIANGLE_LEFT:"\u25c0",TRIANGLE_RIGHT:"\u25b6"});m.exports=A},390,[167]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=400;var o={vibrate:function(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:n,f=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if('number'==typeof o)t.default.vibrate(o);else{if(!Array.isArray(o))throw new Error('Vibration pattern should be a number or array');t.default.vibrateByPattern(o,f?0:-1)}},cancel:function(){t.default.cancel()}};m.exports=o},391,[3,392]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=n[l]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).getEnforcing('Vibration');e.default=n},392,[21]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var n;n=(function(n){r(d[3])(o,n);var e,u,c=(e=o,u=t(),function(){var t,n=r(d[0])(e);if(u){var c=r(d[0])(this).constructor;t=Reflect.construct(n,arguments,c)}else t=n.apply(this,arguments);return r(d[1])(this,t)});function o(){return r(d[4])(this,o),c.apply(this,arguments)}return r(d[5])(o,[{key:"render",value:function(){return null}}],[{key:"ignoreWarnings",value:function(t){}},{key:"install",value:function(){}},{key:"uninstall",value:function(){}}]),o})(r(d[2]).Component),m.exports=n},393,[15,12,129,10,7,8]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.DynamicColorIOS=void 0;e.DynamicColorIOS=function(o){throw new Error('DynamicColorIOS is not available on this platform.')}},394,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=r(d[0]).shape({x:r(d[0]).number,y:r(d[0]).number});m.exports=n},395,[191]); +__d(function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),s=r(d[0])(r(d[5])),o=r(d[0])(r(d[6])),c=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=p(t);if(n&&n.has(e))return n.get(e);var u={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var c=s?Object.getOwnPropertyDescriptor(e,o):null;c&&(c.get||c.set)?Object.defineProperty(u,o,c):u[o]=e[o]}u.default=e,n&&n.set(e,u);return u})(r(d[7])),l=r(d[8]),f=r(d[0])(r(d[9]));function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(p=function(e){return e?n:t})(e)}function h(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var y=(function(p){(0,u.default)(w,p);var y,v,b=(y=w,v=h(),function(){var e,t=(0,o.default)(y);if(v){var n=(0,o.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,s.default)(this,e)});function w(n){var u;return(0,t.default)(this,w),(u=b.call(this,n)).infer=function(){var t,n,s,o,c,l,p,h,y,v,b,w;return e.default.async(function(P){for(;;)switch(P.prev=P.next){case 0:return P.prev=0,t={},P.next=4,e.default.awrap(f.default.preprocess(u.state.imagePath));case 4:for(o in n=P.sent,s={},n)Object.hasOwnProperty.call(n,o)&&(c=r(d[10]).Buffer.from(n[o].data,'base64'),l=new Float32Array(c.buffer,c.byteOffset,c.length/Float32Array.BYTES_PER_ELEMENT),s[o]=new(r(d[11]).Tensor)(n[o].type,l,n[o].dims));return P.next=9,e.default.awrap(u.state.session.run(s,u.state.session.outputNames,t));case 9:for(y in p=P.sent,h={},p)Object.hasOwnProperty.call(p,y)&&(v=p[y].data.buffer,b={data:r(d[10]).Buffer.from(v,0,v.byteLength).toString('base64')},h[y]=b);return P.next=14,e.default.awrap(f.default.postprocess(h));case 14:w=P.sent,u.setState({output:w.result}),P.next=21;break;case 18:P.prev=18,P.t0=P.catch(0),console.log(P.t0.message);case 21:case"end":return P.stop()}},null,null,[[0,18]],Promise)},u.state={session:null,output:null,imagePath:null},u}return(0,n.default)(w,[{key:"componentDidMount",value:function(){var t,n,u;return e.default.async(function(s){for(;;)switch(s.prev=s.next){case 0:if(this.state.session){s.next=19;break}return s.prev=1,s.next=4,e.default.awrap(f.default.getImagePath());case 4:return t=s.sent,this.setState({imagePath:t}),s.next=8,e.default.awrap(f.default.getLocalModelPath());case 8:return n=s.sent,s.next=11,e.default.awrap(r(d[11]).InferenceSession.create(n));case 11:u=s.sent,this.setState({session:u}),this.infer(),s.next=19;break;case 16:s.prev=16,s.t0=s.catch(1),console.log(s.t0.message);case 19:case"end":return s.stop()}},null,this,[[1,16]],Promise)}},{key:"render",value:function(){var e=this.state,t=e.output,n=e.imagePath;return c.createElement(l.View,null,c.createElement(l.Text,null,'\n'),n&&c.createElement(l.Image,{source:{uri:n},style:{height:200,width:200,resizeMode:'stretch'}}),t&&c.createElement(l.TextInput,{accessibilityLabel:"output"},"Result: ",t))}}]),w})(c.PureComponent);_e.default=y},396,[3,75,7,8,10,12,15,129,1,397,398,400]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0]).NativeModules.MNISTDataHandler;e.default=t},397,[1]); +__d(function(g,r,_i,_a,_m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e='function'==typeof Symbol&&'function'==typeof Symbol.for?Symbol.for('nodejs.util.inspect.custom'):null;_e.Buffer=o,_e.SlowBuffer=function(t){+t!=t&&(t=0);return o.alloc(+t)},_e.INSPECT_MAX_BYTES=50;var n=2147483647;function i(t){if(t>n)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,o.prototype),e}function o(t,e,n){if('number'==typeof t){if('string'==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return h(t)}return f(t,e,n)}function f(t,e,n){if('string'==typeof t)return a(t,e);if(ArrayBuffer.isView(t))return c(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(nt(t,ArrayBuffer)||t&&nt(t.buffer,ArrayBuffer))return l(t,e,n);if('undefined'!=typeof SharedArrayBuffer&&(nt(t,SharedArrayBuffer)||t&&nt(t.buffer,SharedArrayBuffer)))return l(t,e,n);if('number'==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var i=t.valueOf&&t.valueOf();if(null!=i&&i!==t)return o.from(i,e,n);var f=y(t);if(f)return f;if('undefined'!=typeof Symbol&&null!=Symbol.toPrimitive&&'function'==typeof t[Symbol.toPrimitive])return o.from(t[Symbol.toPrimitive]('string'),e,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function u(t){if('number'!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function s(t,e,n){return u(t),t<=0?i(t):void 0!==e?'string'==typeof n?i(t).fill(e,n):i(t).fill(e):i(t)}function h(t){return u(t),i(t<0?0:0|w(t))}function a(t,e){if('string'==typeof e&&''!==e||(e='utf8'),!o.isEncoding(e))throw new TypeError('Unknown encoding: '+e);var n=0|v(t,e),f=i(n),u=f.write(t,e);return u!==n&&(f=f.slice(0,u)),f}function p(t){for(var e=t.length<0?0:0|w(t.length),n=i(e),o=0;o=n)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n.toString(16)+' bytes');return 0|t}function v(t,e){if(o.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||nt(t,ArrayBuffer))return t.byteLength;if('string'!=typeof t)throw new TypeError("The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type "+typeof t);var n=t.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===n)return 0;for(var f=!1;;)switch(e){case'ascii':case'latin1':case'binary':return n;case'utf8':case'utf-8':return K(t).length;case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return 2*n;case'hex':return n>>>1;case'base64':return rt(t).length;default:if(f)return i?-1:K(t).length;e=(''+e).toLowerCase(),f=!0}}function b(t,e,n){var i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return'';if((void 0===n||n>this.length)&&(n=this.length),n<=0)return'';if((n>>>=0)<=(e>>>=0))return'';for(t||(t='utf8');;)switch(t){case'hex':return P(this,e,n);case'utf8':case'utf-8':return L(this,e,n);case'ascii':return S(this,e,n);case'latin1':case'binary':return x(this,e,n);case'base64':return O(this,e,n);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return k(this,e,n);default:if(i)throw new TypeError('Unknown encoding: '+t);t=(t+'').toLowerCase(),i=!0}}function B(t,e,n){var i=t[e];t[e]=t[n],t[n]=i}function E(t,e,n,i,f){if(0===t.length)return-1;if('string'==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),it(n=+n)&&(n=f?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(f)return-1;n=t.length-1}else if(n<0){if(!f)return-1;n=0}if('string'==typeof e&&(e=o.from(e,i)),o.isBuffer(e))return 0===e.length?-1:m(t,e,n,i,f);if('number'==typeof e)return e&=255,'function'==typeof Uint8Array.prototype.indexOf?f?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):m(t,[e],n,i,f);throw new TypeError('val must be string, number or Buffer')}function m(t,e,n,i,o){var f,u=1,s=t.length,h=e.length;if(void 0!==i&&('ucs2'===(i=String(i).toLowerCase())||'ucs-2'===i||'utf16le'===i||'utf-16le'===i)){if(t.length<2||e.length<2)return-1;u=2,s/=2,h/=2,n/=2}function a(t,e){return 1===u?t[e]:t.readUInt16BE(e*u)}if(o){var p=-1;for(f=n;fs&&(n=s-h),f=n;f>=0;f--){for(var c=!0,l=0;lo&&(i=o):i=o;var f,u=e.length;for(i>u/2&&(i=u/2),f=0;f239?4:f>223?3:f>191?2:1;if(o+s<=n){var h=void 0,a=void 0,p=void 0,c=void 0;switch(s){case 1:f<128&&(u=f);break;case 2:128==(192&(h=t[o+1]))&&(c=(31&f)<<6|63&h)>127&&(u=c);break;case 3:h=t[o+1],a=t[o+2],128==(192&h)&&128==(192&a)&&(c=(15&f)<<12|(63&h)<<6|63&a)>2047&&(c<55296||c>57343)&&(u=c);break;case 4:h=t[o+1],a=t[o+2],p=t[o+3],128==(192&h)&&128==(192&a)&&128==(192&p)&&(c=(15&f)<<18|(63&h)<<12|(63&a)<<6|63&p)>65535&&c<1114112&&(u=c)}}null===u?(u=65533,s=1):u>65535&&(u-=65536,i.push(u>>>10&1023|55296),u=56320|1023&u),i.push(u),o+=s}return _(i)}_e.kMaxLength=n,o.TYPED_ARRAY_SUPPORT=(function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}})(),o.TYPED_ARRAY_SUPPORT||'undefined'==typeof console||'function'!=typeof console.error||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."),Object.defineProperty(o.prototype,'parent',{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,'offset',{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}}),o.poolSize=8192,o.from=function(t,e,n){return f(t,e,n)},Object.setPrototypeOf(o.prototype,Uint8Array.prototype),Object.setPrototypeOf(o,Uint8Array),o.alloc=function(t,e,n){return s(t,e,n)},o.allocUnsafe=function(t){return h(t)},o.allocUnsafeSlow=function(t){return h(t)},o.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==o.prototype},o.compare=function(t,e){if(nt(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),nt(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),!o.isBuffer(t)||!o.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var n=t.length,i=e.length,f=0,u=Math.min(n,i);fi.length?(o.isBuffer(u)||(u=o.from(u)),u.copy(i,f)):Uint8Array.prototype.set.call(i,u,f);else{if(!o.isBuffer(u))throw new TypeError('"list" argument must be an Array of Buffers');u.copy(i,f)}f+=u.length}return i},o.byteLength=v,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError('Buffer size must be a multiple of 16-bits');for(var e=0;ee&&(t+=' ... '),''},e&&(o.prototype[e]=o.prototype.inspect),o.prototype.compare=function(t,e,n,i,f){if(nt(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),!o.isBuffer(t))throw new TypeError("The \"target\" argument must be one of type Buffer or Uint8Array. Received type "+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===f&&(f=this.length),e<0||n>t.length||i<0||f>this.length)throw new RangeError('out of range index');if(i>=f&&e>=n)return 0;if(i>=f)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,i>>>=0,f>>>=0,this===t)return 0;for(var u=f-i,s=n-e,h=Math.min(u,s),a=this.slice(i,f),p=t.slice(e,n),c=0;c>>=0,isFinite(n)?(n>>>=0,void 0===i&&(i='utf8')):(i=n,n=void 0)}var o=this.length-e;if((void 0===n||n>o)&&(n=o),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError('Attempt to write outside buffer bounds');i||(i='utf8');for(var f=!1;;)switch(i){case'hex':return I(this,t,e,n);case'utf8':case'utf-8':return U(this,t,e,n);case'ascii':case'latin1':case'binary':return A(this,t,e,n);case'base64':return R(this,t,e,n);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return T(this,t,e,n);default:if(f)throw new TypeError('Unknown encoding: '+i);i=(''+i).toLowerCase(),f=!0}},o.prototype.toJSON=function(){return{type:'Buffer',data:Array.prototype.slice.call(this._arr||this,0)}};var M=4096;function _(t){var e=t.length;if(e<=M)return String.fromCharCode.apply(String,t);for(var n='',i=0;ii)&&(n=i);for(var o='',f=e;fn)throw new RangeError('Trying to access beyond buffer length')}function N(t,e,n,i,f,u){if(!o.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>f||et.length)throw new RangeError('Index out of range')}function F(t,e,n,i,o){X(e,i,o,t,n,7);var f=Number(e&BigInt(4294967295));t[n++]=f,f>>=8,t[n++]=f,f>>=8,t[n++]=f,f>>=8,t[n++]=f;var u=Number(e>>BigInt(32)&BigInt(4294967295));return t[n++]=u,u>>=8,t[n++]=u,u>>=8,t[n++]=u,u>>=8,t[n++]=u,n}function j(t,e,n,i,o){X(e,i,o,t,n,7);var f=Number(e&BigInt(4294967295));t[n+7]=f,f>>=8,t[n+6]=f,f>>=8,t[n+5]=f,f>>=8,t[n+4]=f;var u=Number(e>>BigInt(32)&BigInt(4294967295));return t[n+3]=u,u>>=8,t[n+2]=u,u>>=8,t[n+1]=u,u>>=8,t[n]=u,n+8}function D(t,e,n,i,o,f){if(n+i>t.length)throw new RangeError('Index out of range');if(n<0)throw new RangeError('Index out of range')}function z(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,4),r(d[3]).write(t,e,n,i,23,4),n+4}function Y(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,8),r(d[3]).write(t,e,n,i,52,8),n+8}o.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e>>=0,e>>>=0,n||C(t,e,this.length);for(var i=this[t],o=1,f=0;++f>>=0,e>>>=0,n||C(t,e,this.length);for(var i=this[t+--e],o=1;e>0&&(o*=256);)i+=this[t+--e]*o;return i},o.prototype.readUint8=o.prototype.readUInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),this[t]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readBigUInt64LE=ft(function(t){J(t>>>=0,'offset');var e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);var i=e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24),o=this[++t]+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+n*Math.pow(2,24);return BigInt(i)+(BigInt(o)<>>=0,'offset');var e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);var i=e*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t],o=this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+n;return(BigInt(i)<>>=0,e>>>=0,n||C(t,e,this.length);for(var i=this[t],o=1,f=0;++f=(o*=128)&&(i-=Math.pow(2,8*e)),i},o.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||C(t,e,this.length);for(var i=e,o=1,f=this[t+--i];i>0&&(o*=256);)f+=this[t+--i]*o;return f>=(o*=128)&&(f-=Math.pow(2,8*e)),f},o.prototype.readInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,e){t>>>=0,e||C(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},o.prototype.readInt16BE=function(t,e){t>>>=0,e||C(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},o.prototype.readInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readBigInt64LE=ft(function(t){J(t>>>=0,'offset');var e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);var i=this[t+4]+this[t+5]*Math.pow(2,8)+this[t+6]*Math.pow(2,16)+(n<<24);return(BigInt(i)<>>=0,'offset');var e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);var i=(e<<24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t];return(BigInt(i)<>>=0,e||C(t,4,this.length),r(d[3]).read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return t>>>=0,e||C(t,4,this.length),r(d[3]).read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return t>>>=0,e||C(t,8,this.length),r(d[3]).read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return t>>>=0,e||C(t,8,this.length),r(d[3]).read(this,t,!1,52,8)},o.prototype.writeUintLE=o.prototype.writeUIntLE=function(t,e,n,i){(t=+t,e>>>=0,n>>>=0,i)||N(this,t,e,n,Math.pow(2,8*n)-1,0);var o=1,f=0;for(this[e]=255&t;++f>>=0,n>>>=0,i)||N(this,t,e,n,Math.pow(2,8*n)-1,0);var o=n-1,f=1;for(this[e+o]=255&t;--o>=0&&(f*=256);)this[e+o]=t/f&255;return e+n},o.prototype.writeUint8=o.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,1,255,0),this[e]=255&t,e+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeBigUInt64LE=ft(function(t){return F(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt('0xffffffffffffffff'))}),o.prototype.writeBigUInt64BE=ft(function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt('0xffffffffffffffff'))}),o.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e>>>=0,!i){var o=Math.pow(2,8*n-1);N(this,t,e,n,o-1,-o)}var f=0,u=1,s=0;for(this[e]=255&t;++f>0)-s&255;return e+n},o.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e>>>=0,!i){var o=Math.pow(2,8*n-1);N(this,t,e,n,o-1,-o)}var f=n-1,u=1,s=0;for(this[e+f]=255&t;--f>=0&&(u*=256);)t<0&&0===s&&0!==this[e+f+1]&&(s=1),this[e+f]=(t/u>>0)-s&255;return e+n},o.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},o.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeBigInt64LE=ft(function(t){return F(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt('0x8000000000000000'),BigInt('0x7fffffffffffffff'))}),o.prototype.writeBigInt64BE=ft(function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt('0x8000000000000000'),BigInt('0x7fffffffffffffff'))}),o.prototype.writeFloatLE=function(t,e,n){return z(this,t,e,!0,n)},o.prototype.writeFloatBE=function(t,e,n){return z(this,t,e,!1,n)},o.prototype.writeDoubleLE=function(t,e,n){return Y(this,t,e,!0,n)},o.prototype.writeDoubleBE=function(t,e,n){return Y(this,t,e,!1,n)},o.prototype.copy=function(t,e,n,i){if(!o.isBuffer(t))throw new TypeError('argument should be a Buffer');if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError('Index out of range');if(i<0)throw new RangeError('sourceEnd out of bounds');i>this.length&&(i=this.length),t.length-e>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),'number'==typeof t)for(u=e;u=i+4;n-=3)e="_"+t.slice(n-3,n)+e;return""+t.slice(0,n)+e}function W(t,e,n){J(e,'offset'),void 0!==t[e]&&void 0!==t[e+n]||Z(e,t.length-(n+1))}function X(t,e,n,i,o,f){if(t>n||t3?0===e||e===BigInt(0)?">= 0"+s+" and < 2"+s+" ** "+8*(f+1)+s:">= -(2"+s+" ** "+(8*(f+1)-1)+s+") and < 2 ** "+(8*(f+1)-1)+s:">= "+e+s+" and <= "+n+s,new G.ERR_OUT_OF_RANGE('value',u,t)}W(i,o,f)}function J(t,e){if('number'!=typeof t)throw new G.ERR_INVALID_ARG_TYPE(e,'number',t)}function Z(t,e,n){if(Math.floor(t)!==t)throw J(t,n),new G.ERR_OUT_OF_RANGE(n||'offset','an integer',t);if(e<0)throw new G.ERR_BUFFER_OUT_OF_BOUNDS;throw new G.ERR_OUT_OF_RANGE(n||'offset',">= "+(n?1:0)+" and <= "+e,t)}V('ERR_BUFFER_OUT_OF_BOUNDS',function(t){return t?t+" is outside of buffer bounds":'Attempt to access memory outside buffer bounds'},RangeError),V('ERR_INVALID_ARG_TYPE',function(t,e){return"The \""+t+"\" argument must be of type number. Received type "+typeof e},TypeError),V('ERR_OUT_OF_RANGE',function(t,e,n){var i="The value of \""+t+"\" is out of range.",o=n;return Number.isInteger(n)&&Math.abs(n)>Math.pow(2,32)?o=q(String(n)):'bigint'==typeof n&&(o=String(n),(n>Math.pow(BigInt(2),BigInt(32))||n<-Math.pow(BigInt(2),BigInt(32)))&&(o=q(o)),o+='n'),i+=" It must be "+e+". Received "+o},RangeError);var $=/[^+/0-9A-Za-z-_]/g;function H(t){if((t=(t=t.split('=')[0]).trim().replace($,'')).length<2)return'';for(;t.length%4!=0;)t+='=';return t}function K(t,e){var n;e=e||1/0;for(var i=t.length,o=null,f=[],u=0;u55295&&n<57344){if(!o){if(n>56319){(e-=3)>-1&&f.push(239,191,189);continue}if(u+1===i){(e-=3)>-1&&f.push(239,191,189);continue}o=n;continue}if(n<56320){(e-=3)>-1&&f.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(e-=3)>-1&&f.push(239,191,189);if(o=null,n<128){if((e-=1)<0)break;f.push(n)}else if(n<2048){if((e-=2)<0)break;f.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;f.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error('Invalid code point');if((e-=4)<0)break;f.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return f}function Q(t){for(var e=[],n=0;n>8,o=n%256,f.push(o),f.push(i);return f}function rt(t){return r(d[2]).toByteArray(H(t))}function et(t,e,n,i){var o;for(o=0;o=e.length||o>=t.length);++o)e[o+n]=t[o];return o}function nt(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function it(t){return t!=t}var ot=(function(){for(var t=new Array(256),e=0;e<16;++e)for(var n=16*e,i=0;i<16;++i)t[n+i]="0123456789abcdef"[e]+"0123456789abcdef"[i];return t})();function ft(t){return'undefined'==typeof BigInt?ut:t}function ut(){throw new Error('BigInt not supported')}},398,[15,12,93,399,10,7,14,8]); +__d(function(g,r,_i,a,_m,_e,_d){_e.read=function(o,t,h,M,f){var w,p,i=8*f-M-1,n=(1<>1,e=-7,u=h?f-1:0,s=h?-1:1,c=o[t+u];for(u+=s,w=c&(1<<-e)-1,c>>=-e,e+=i;e>0;w=256*w+o[t+u],u+=s,e-=8);for(p=w&(1<<-e)-1,w>>=-e,e+=M;e>0;p=256*p+o[t+u],u+=s,e-=8);if(0===w)w=1-N;else{if(w===n)return p?NaN:1/0*(c?-1:1);p+=Math.pow(2,M),w-=N}return(c?-1:1)*p*Math.pow(2,w-M)},_e.write=function(o,t,h,M,f,w){var p,i,n,N=8*w-f-1,e=(1<>1,s=23===f?Math.pow(2,-24)-Math.pow(2,-77):0,c=M?0:w-1,l=M?1:-1,d=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(i=isNaN(t)?1:0,p=e):(p=Math.floor(Math.log(t)/Math.LN2),t*(n=Math.pow(2,-p))<1&&(p--,n*=2),(t+=p+u>=1?s/n:s*Math.pow(2,1-u))*n>=2&&(p++,n/=2),p+u>=e?(i=0,p=e):p+u>=1?(i=(t*n-1)*Math.pow(2,f),p+=u):(i=t*Math.pow(2,u-1)*Math.pow(2,f),p=0));f>=8;o[h+c]=255&i,c+=l,i/=256,f-=8);for(p=p<0;o[h+c]=255&p,c+=l,p/=256,N-=8);o[h+c-l]|=128*d}},399,[]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),Object.keys(r(d[0])).forEach(function(n){"default"!==n&&"__esModule"!==n&&(n in e&&e[n]===r(d[0])[n]||Object.defineProperty(e,n,{enumerable:!0,get:function(){return r(d[0])[n]}}))}),(0,r(d[0]).registerBackend)('cpu',r(d[1]).onnxruntimeBackend,1)},400,[401,406]); +__d(function(g,_r5,_i2,_a2,m,_e6,_d){function e(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=r(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0;return function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(e,r){if(e){if("string"==typeof e)return t(e,r);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(e,r):void 0}}function t(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t=0){for(var o=0;o=c.byteLength)){h.next=32;break}throw new RangeError("'byteOffset' is out of range [0, "+c.byteLength+").");case 32:if(y=t.byteLength-b,"number"!=typeof o){h.next=45;break}if(y=o,Number.isSafeInteger(y)){h.next=35;break}throw new RangeError("'byteLength' must be an integer.");case 35:if(!(y<=0||b+y>c.byteLength)){h.next=37;break}throw new RangeError("'byteLength' is out of range (0, "+(c.byteLength-b)+"].");case 37:if("object"!=typeof s||null===s){h.next=41;break}f=s,h.next=43;break;case 41:if(void 0===s){h.next=43;break}throw new TypeError("'options' must be an object.");case 43:h.next=47;break;case 45:if(void 0===o){h.next=47;break}throw new TypeError("'byteLength' must be a number.");case 47:h.next=51;break;case 49:if(void 0===i){h.next=51;break}throw new TypeError("'options' must be an object.");case 51:u=new Uint8Array(c,b,y);case 52:return l=(f.executionProviders||[]).map(function(e){return"string"==typeof e?e:e.name}),h.next=55,_r5(_d[2]).awrap((function(r){var t,i,o,s,u,f;return _r5(_d[2]).async(function(c){for(;;)switch(c.prev=c.next){case 0:t=0===r.length?a:r,i=[],o=e(t);case 2:if((s=o()).done){c.next=28;break}if(u=s.value,!(f=n[u])){c.next=26;break}if(!f.initialized){c.next=8;break}return c.abrupt("return",f.backend);case 8:if(!f.initializing){c.next=10;break}throw new Error("backend \""+u+"\" is being initialized; cannot initialize multiple times.");case 10:if(!f.aborted){c.next=12;break}return c.abrupt("continue",26);case 12:return c.prev=12,f.initializing=!0,c.next=16,_r5(_d[2]).awrap(f.backend.init());case 16:return f.initialized=!0,c.abrupt("return",f.backend);case 20:c.prev=20,c.t0=c.catch(12),i.push({name:u,err:c.t0}),f.aborted=!0;case 23:return c.prev=23,f.initializing=!1,c.finish(23);case 26:c.next=2;break;case 28:throw new Error("no available backend found. ERR: "+i.map(function(e){return"["+e.name+"] "+e.err}).join(", "));case 29:case"end":return c.stop()}},null,null,[[12,20,23,26]],Promise)})(l));case 55:return p=h.sent,h.next=58,_r5(_d[2]).awrap(p.createSessionHandler(u,f));case 58:return d=h.sent,h.abrupt("return",new r(d));case 60:case"end":return h.stop()}},null,null,null,Promise)}}]),r})(),l=_e6;for(var p in t)l[p]=t[p];t.__esModule&&Object.defineProperty(l,"__esModule",{value:!0})})()},401,[402,403,404]); +__d(function(g,r,i,a,m,e,d){m.exports=function(o,n){if(!(o instanceof n))throw new TypeError("Cannot call a class as a function")},m.exports.__esModule=!0,m.exports.default=m.exports},402,[]); +__d(function(g,r,_i,a,m,e,d){function t(t,o){for(var n=0;n=0;--u){var h=this.tryEntries[u],f=h.completion;if("root"===h.tryLoc)return c("end");if(h.tryLoc<=this.prev){var l=i.call(h,"catchLoc"),s=i.call(h,"finallyLoc");if(l&&s){if(this.prev=0;--o){var c=this.tryEntries[o];if(c.tryLoc<=this.prev&&i.call(c,"finallyLoc")&&this.prev=0;--n){var o=this.tryEntries[n];if(o.finallyLoc===t)return this.complete(o.completion,o.afterLoc),I(o),x}},catch:function(t){for(var n=this.tryEntries.length-1;n>=0;--n){var o=this.tryEntries[n];if(o.tryLoc===t){var i=o.completion;if("throw"===i.type){var c=i.arg;I(o)}return c}}throw new Error("illegal catch attempt")},delegateYield:function(t,o,i){return this.delegate={iterator:A(t),resultName:o,nextLoc:i},"next"===this.method&&(this.arg=n),x}},t})("object"==typeof m?m.exports:{});try{regeneratorRuntime=t}catch(n){"object"==typeof globalThis?globalThis.regeneratorRuntime=t:Function("r","regeneratorRuntime = r")(t)}},405,[]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.onnxruntimeBackend=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),l=function(t){switch(t){case'float32':return Float32Array;case'int8':return Int8Array;case'int16':return Int16Array;case'int32':return Int32Array;case'bool':return Int8Array;case'float64':return Float64Array;case'int64':return BigInt64Array;default:throw new Error("unsupported type: "+t)}},c=(0,o.default)("inferenceSession"),f=(0,o.default)("key"),p=(function(){function o(t){(0,n.default)(this,o),Object.defineProperty(this,c,{writable:!0,value:void 0}),Object.defineProperty(this,f,{writable:!0,value:void 0}),(0,s.default)(this,c)[c]=r(d[6]).binding,(0,s.default)(this,f)[f]=t,this.inputNames=[],this.outputNames=[]}return(0,u.default)(o,[{key:"loadModel",value:function(n){var u;return t.default.async(function(o){for(;;)switch(o.prev=o.next){case 0:return o.prev=0,o.next=3,t.default.awrap((0,s.default)(this,c)[c].loadModel((0,s.default)(this,f)[f],n));case 3:if((u=o.sent).key===(0,s.default)(this,f)[f]){o.next=6;break}throw new Error('Session key is invalid');case 6:this.inputNames=u.inputNames,this.outputNames=u.outputNames,o.next=13;break;case 10:throw o.prev=10,o.t0=o.catch(0),new Error("Can't load a model: "+o.t0.message);case 13:case"end":return o.stop()}},null,this,[[0,10]],Promise)}},{key:"dispose",value:function(){return t.default.async(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",Promise.resolve());case 1:case"end":return t.stop()}},null,null,null,Promise)}},{key:"startProfiling",value:function(){}},{key:"endProfiling",value:function(){}},{key:"run",value:function(n,u,o){var l,p,y,v,h;return t.default.async(function(w){for(;;)switch(w.prev=w.next){case 0:l=[],w.t0=t.default.keys(u);case 2:if((w.t1=w.t0()).done){w.next=10;break}if(p=w.t1.value,!Object.prototype.hasOwnProperty.call(u,p)){w.next=8;break}if(!u[p]){w.next=7;break}throw new Error('Preallocated output is not supported and only names as string array is allowed as parameter');case 7:l.push(p);case 8:w.next=2;break;case 10:return y=this.encodeFeedsType(n),w.next=13,t.default.awrap((0,s.default)(this,c)[c].run((0,s.default)(this,f)[f],y,l,o));case 13:return v=w.sent,h=this.decodeReturnType(v),w.abrupt("return",h);case 16:case"end":return w.stop()}},null,this,null,Promise)}},{key:"encodeFeedsType",value:function(t){var n={};for(var u in t)if(Object.hasOwnProperty.call(t,u)){var s=void 0;if(Array.isArray(t[u].data))s=t[u].data;else{var o=t[u].data.buffer;s=r(d[7]).Buffer.from(o,0,o.byteLength).toString('base64')}n[u]={dims:t[u].dims,type:t[u].type,data:s}}return n}},{key:"decodeReturnType",value:function(t){var n={};for(var u in t)if(Object.hasOwnProperty.call(t,u)){var s=void 0;if(Array.isArray(t[u].data))s=t[u].data;else{var o=r(d[7]).Buffer.from(t[u].data,'base64'),c=l(t[u].type);s=new c(o.buffer,o.byteOffset,o.length/c.BYTES_PER_ELEMENT)}n[u]=new(r(d[8]).Tensor)(t[u].type,s,t[u].dims)}return n}}]),o})(),y=new((function(){function s(){(0,n.default)(this,s)}return(0,u.default)(s,[{key:"init",value:function(){return t.default.async(function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",Promise.resolve());case 1:case"end":return t.stop()}},null,null,null,Promise)}},{key:"createSessionHandler",value:function(n,u){var s;return t.default.async(function(o){for(;;)switch(o.prev=o.next){case 0:if('string'==typeof n){o.next=2;break}throw new Error('Uint8Array is not supported');case 2:return s=new p(n),o.next=5,t.default.awrap(s.loadModel(u||{}));case 5:return o.abrupt("return",s);case 6:case"end":return o.stop()}},null,null,null,Promise)}}]),s})());e.onnxruntimeBackend=y},406,[407,404,402,403,408,409,410,801,401]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t){return t&&t.__esModule?t:{default:t}},m.exports.__esModule=!0,m.exports.default=m.exports},407,[]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t,o){if(!Object.prototype.hasOwnProperty.call(t,o))throw new TypeError("attempted to use private field on non-instance");return t},m.exports.__esModule=!0,m.exports.default=m.exports},408,[]); +__d(function(g,r,i,a,m,e,d){var t=0;m.exports=function(_){return"__private_"+t+++"_"+_},m.exports.__esModule=!0,m.exports.default=m.exports},409,[]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.binding=void 0;var n=r(d[0]).NativeModules.Onnxruntime;e.binding=n},410,[411]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports={get AccessibilityInfo(){return r(d[0]).default},get ActivityIndicator(){return r(d[1])},get Button(){return r(d[2])},get DatePickerIOS(){return r(d[3])('DatePickerIOS-merged',"DatePickerIOS has been merged with DatePickerAndroid and will be removed in a future release. It can now be installed and imported from '@react-native-community/datetimepicker' instead of 'react-native'. See https://github.com/react-native-datetimepicker/datetimepicker"),r(d[4])},get DrawerLayoutAndroid(){return r(d[5])},get FlatList(){return r(d[6])},get Image(){return r(d[7])},get ImageBackground(){return r(d[8])},get InputAccessoryView(){return r(d[9])},get KeyboardAvoidingView(){return r(d[10]).default},get MaskedViewIOS(){return r(d[3])('maskedviewios-moved',"MaskedViewIOS has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-masked-view/masked-view' instead of 'react-native'. See https://github.com/react-native-masked-view/masked-view"),r(d[11])},get Modal(){return r(d[12])},get Pressable(){return r(d[13]).default},get ProgressBarAndroid(){return r(d[3])('progress-bar-android-moved',"ProgressBarAndroid has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-community/progress-bar-android' instead of 'react-native'. See https://github.com/react-native-progress-view/progress-bar-android"),r(d[14])},get ProgressViewIOS(){return r(d[3])('progress-view-ios-moved',"ProgressViewIOS has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-community/progress-view' instead of 'react-native'. See https://github.com/react-native-progress-view/progress-view"),r(d[15])},get RefreshControl(){return r(d[16])},get SafeAreaView(){return r(d[17]).default},get ScrollView(){return r(d[18])},get SectionList(){return r(d[19]).default},get SegmentedControlIOS(){return r(d[3])('segmented-control-ios-moved',"SegmentedControlIOS has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-segmented-control/segmented-control' instead of 'react-native'. See https://github.com/react-native-segmented-control/segmented-control"),r(d[20])},get Slider(){return r(d[3])('slider-moved',"Slider has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-community/slider' instead of 'react-native'. See https://github.com/callstack/react-native-slider"),r(d[21])},get StatusBar(){return r(d[22])},get Switch(){return r(d[23]).default},get Text(){return r(d[24])},get TextInput(){return r(d[25])},get Touchable(){return r(d[26])},get TouchableHighlight(){return r(d[27])},get TouchableNativeFeedback(){return r(d[28])},get TouchableOpacity(){return r(d[29])},get TouchableWithoutFeedback(){return r(d[30])},get View(){return r(d[31])},get VirtualizedList(){return r(d[32])},get VirtualizedSectionList(){return r(d[33])},get ActionSheetIOS(){return r(d[34])},get Alert(){return r(d[35])},get Animated(){return r(d[36])},get Appearance(){return r(d[37])},get AppRegistry(){return r(d[38])},get AppState(){return r(d[39])},get AsyncStorage(){return r(d[3])('async-storage-moved',"AsyncStorage has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-async-storage/async-storage' instead of 'react-native'. See https://github.com/react-native-async-storage/async-storage"),r(d[40])},get BackHandler(){return r(d[41])},get Clipboard(){return r(d[3])('clipboard-moved',"Clipboard has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-clipboard/clipboard' instead of 'react-native'. See https://github.com/react-native-clipboard/clipboard"),r(d[42])},get DatePickerAndroid(){return r(d[3])('DatePickerAndroid-merged',"DatePickerAndroid has been merged with DatePickerIOS and will be removed in a future release. It can now be installed and imported from '@react-native-community/datetimepicker' instead of 'react-native'. See https://github.com/react-native-datetimepicker/datetimepicker"),r(d[43])},get DeviceInfo(){return r(d[44])},get DevSettings(){return r(d[45])},get Dimensions(){return r(d[46])},get Easing(){return r(d[47])},get findNodeHandle(){return r(d[48]).findNodeHandle},get I18nManager(){return r(d[49])},get ImagePickerIOS(){return r(d[3])('imagePickerIOS-moved',"ImagePickerIOS has been extracted from react-native core and will be removed in a future release. Please upgrade to use either '@react-native-community/react-native-image-picker' or 'expo-image-picker'. If you cannot upgrade to a different library, please install the deprecated '@react-native-community/image-picker-ios' package. See https://github.com/rnc-archive/react-native-image-picker-ios"),r(d[50])},get InteractionManager(){return r(d[51])},get Keyboard(){return r(d[52])},get LayoutAnimation(){return r(d[53])},get Linking(){return r(d[54])},get LogBox(){return r(d[55])},get NativeDialogManagerAndroid(){return r(d[56]).default},get NativeEventEmitter(){return r(d[57]).default},get Networking(){return r(d[58])},get PanResponder(){return r(d[59])},get PermissionsAndroid(){return r(d[60])},get PixelRatio(){return r(d[61])},get PushNotificationIOS(){return r(d[3])('pushNotificationIOS-moved',"PushNotificationIOS has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-community/push-notification-ios' instead of 'react-native'. See https://github.com/react-native-push-notification-ios/push-notification-ios"),r(d[62])},get Settings(){return r(d[63])},get Share(){return r(d[64])},get StyleSheet(){return r(d[65])},get Systrace(){return r(d[66])},get ToastAndroid(){return r(d[67])},get TurboModuleRegistry(){return r(d[68])},get UIManager(){return r(d[69])},get unstable_batchedUpdates(){return r(d[48]).unstable_batchedUpdates},get useColorScheme(){return r(d[70]).default},get useWindowDimensions(){return r(d[71]).default},get UTFSequence(){return r(d[72])},get Vibration(){return r(d[73])},get YellowBox(){return r(d[74])},get DeviceEventEmitter(){return r(d[75]).default},get DynamicColorIOS(){return r(d[76]).DynamicColorIOS},get NativeAppEventEmitter(){return r(d[77])},get NativeModules(){return r(d[78])},get Platform(){return r(d[79])},get PlatformColor(){return r(d[80]).PlatformColor},get processColor(){return r(d[81])},get requireNativeComponent(){return r(d[82])},get RootTagContext(){return r(d[83]).RootTagContext},get unstable_enableLogBox(){return function(){return console.warn('LogBox is enabled by default so there is no need to call unstable_enableLogBox() anymore. This is a no op and will be removed in the next version.')}},get ColorPropType(){return r(d[84])},get EdgeInsetsPropType(){return r(d[85])},get PointPropType(){return r(d[86])},get ViewPropTypes(){return r(d[87])}}},411,[412,577,588,696,697,698,651,680,704,705,707,708,710,717,582,719,671,720,655,692,722,723,699,725,589,729,734,738,614,615,739,579,654,693,740,518,616,742,744,761,764,750,767,769,771,772,566,640,456,715,774,625,657,658,776,779,520,500,499,780,782,565,784,786,787,578,439,789,428,450,791,794,795,796,798,413,799,528,429,426,549,546,585,714,600,603,800,682]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),l=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),c='android'===t.default.OS?new Map([['change','touchExplorationDidChange'],['reduceMotionChanged','reduceMotionDidChange'],['screenReaderChanged','touchExplorationDidChange']]):new Map([['announcementFinished','announcementFinished'],['boldTextChanged','boldTextChanged'],['change','screenReaderChanged'],['grayscaleChanged','grayscaleChanged'],['invertColorsChanged','invertColorsChanged'],['reduceMotionChanged','reduceMotionChanged'],['reduceTransparencyChanged','reduceTransparencyChanged'],['screenReaderChanged','screenReaderChanged']]),s={isBoldTextEnabled:function(){return'android'===t.default.OS?Promise.resolve(!1):new Promise(function(n,t){null!=u.default?u.default.getCurrentBoldTextState(n,t):t(null)})},isGrayscaleEnabled:function(){return'android'===t.default.OS?Promise.resolve(!1):new Promise(function(n,t){null!=u.default?u.default.getCurrentGrayscaleState(n,t):t(null)})},isInvertColorsEnabled:function(){return'android'===t.default.OS?Promise.resolve(!1):new Promise(function(n,t){null!=u.default?u.default.getCurrentInvertColorsState(n,t):t(null)})},isReduceMotionEnabled:function(){return new Promise(function(n,o){'android'===t.default.OS?null!=l.default?l.default.isReduceMotionEnabled(n):o(null):null!=u.default?u.default.getCurrentReduceMotionState(n,o):o(null)})},isReduceTransparencyEnabled:function(){return'android'===t.default.OS?Promise.resolve(!1):new Promise(function(n,t){null!=u.default?u.default.getCurrentReduceTransparencyState(n,t):t(null)})},isScreenReaderEnabled:function(){return new Promise(function(n,o){'android'===t.default.OS?null!=l.default?l.default.isTouchExplorationEnabled(n):o(null):null!=u.default?u.default.getCurrentVoiceOverState(n,o):o(null)})},addEventListener:function(t,l){var u=c.get(t);return null==u?{remove:function(){}}:n.default.addListener(u,l)},setAccessibilityFocus:function(n){(0,o.default)(n,'focus')},sendAccessibilityEvent_unstable:function(n,l){'ios'===t.default.OS&&'click'===l||(0,r(d[6]).sendAccessibilityEvent)(n,l)},announceForAccessibility:function(n){'android'===t.default.OS?null==l.default||l.default.announceForAccessibility(n):null==u.default||u.default.announceForAccessibility(n)},removeEventListener:function(t,l){null!=c.get(t)&&n.default.removeListener('deviceEventName',l)},getRecommendedTimeoutMillis:function(n){return'android'===t.default.OS?new Promise(function(t,u){null!=l.default&&l.default.getRecommendedTimeoutMillis?l.default.getRecommendedTimeoutMillis(n,t):t(n)}):Promise.resolve(n)}};e.default=s},412,[407,413,426,447,448,449,456]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=new(r(d[0])(r(d[1])).default);e.default=t},413,[407,414]); +__d(function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0,e.default=r(d[0])},414,[415]); +__d(function(g,r,_i,a,m,e,d){var t=r(d[0])(r(d[1])),i=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),o=function(){return!0},u=(function(){function u(i){(0,t.default)(this,u),this._subscriber=new s.default,null!=i&&(console.warn('EventEmitter(...): Constructor argument is deprecated.'),this._subscriber=i)}return(0,i.default)(u,[{key:"addListener",value:function(t,i,s){return this._subscriber.addSubscription(t,new n.default(this,this._subscriber,i,s))}},{key:"removeAllListeners",value:function(t){this._subscriber.removeAllSubscriptions(t)}},{key:"removeSubscription",value:function(t){console.warn("EventEmitter.removeSubscription(...): Method has been deprecated. Please instead use `remove()` on the subscription itself."),this.__removeSubscription(t)}},{key:"__removeSubscription",value:function(t){r(d[5])(t.emitter===this,'Subscription does not belong to this emitter.'),this._subscriber.removeSubscription(t)}},{key:"listenerCount",value:function(t){var i=this._subscriber.getSubscriptionsForType(t);return i?i.filter(o).length:0}},{key:"emit",value:function(t){var i=this._subscriber.getSubscriptionsForType(t);if(i){for(var n=arguments.length,s=new Array(n>1?n-1:0),o=1;o0?l[l.length-1]:null,c=l.length>1?l[l.length-2]:null,v='function'==typeof s,h='function'==typeof c;h&&r(d[1])(v,'Cannot have a non-function arg after a function arg.');var y=v?s:null,C=h?c:null,M=v+h,b=l.slice(0,l.length-M);if('sync'===o)return r(d[3]).callNativeSyncHook(n,t,b,C,y);r(d[3]).enqueueNativeCall(n,t,b,C,y)}).type=o,u}function u(n,t){return-1!==n.indexOf(t)}function l(n,t){return r(d[2])(t,n||{})}g.__fbGenNativeModule=n;var f={};if(g.nativeModuleProxy)f=g.nativeModuleProxy;else if(!g.nativeExtensions){var s=g.__fbBatchedBridgeConfig;r(d[1])(s,'__fbBatchedBridgeConfig is not set, cannot invoke native modules');var c=r(d[4]);(s.remoteModuleConfig||[]).forEach(function(o,u){var l=n(o,u);l&&(l.module?f[l.name]=l.module:c(f,l.name,{get:function(){return t(l.name,u)}}))})}m.exports=f},429,[430,425,436,437,446]); +__d(function(g,r,_i,a,m,e,d){m.exports=function(t,o){return r(d[0])(t)||r(d[1])(t,o)||r(d[2])(t,o)||r(d[3])()},m.exports.__esModule=!0,m.exports.default=m.exports},430,[431,432,433,435]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t){if(Array.isArray(t))return t},m.exports.__esModule=!0,m.exports.default=m.exports},431,[]); +__d(function(g,r,_i2,a,m,e,d){m.exports=function(t,l){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var o,u,f=[],i=!0,y=!1;try{for(n=n.call(t);!(i=(o=n.next()).done)&&(f.push(o.value),!l||f.length!==l);i=!0);}catch(t){y=!0,u=t}finally{try{i||null==n.return||n.return()}finally{if(y)throw u}}return f}},m.exports.__esModule=!0,m.exports.default=m.exports},432,[]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t,o){if(t){if("string"==typeof t)return r(d[0])(t,o);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(d[0])(t,o):void 0}},m.exports.__esModule=!0,m.exports.default=m.exports},433,[434]); +__d(function(g,r,_i,a,m,e,d){m.exports=function(t,n){(null==n||n>t.length)&&(n=t.length);for(var o=0,l=new Array(n);o=5){var h=this._queue;this._queue=[[],[],[],this._callID],this._lastFlush=o,g.nativeFlushQueueImmediate(h)}r(d[2]).counterEvent('pending_js_to_native_queue',this._queue[0].length),this.__spy&&this.__spy({type:1,module:t+'',method:l,args:s})}},{key:"createDebugLookup",value:function(t,l,s){}},{key:"setReactNativeMicrotasksCallback",value:function(t){this._reactNativeMicrotasksCallback=t}},{key:"__guard",value:function(t){if(this.__shouldPauseOnThrow())t();else try{t()}catch(t){r(d[3]).reportFatalError(t)}}},{key:"__shouldPauseOnThrow",value:function(){return'undefined'!=typeof DebuggerInternal&&!0===DebuggerInternal.shouldPauseOnThrow}},{key:"__callReactNativeMicrotasks",value:function(){r(d[2]).beginEvent('JSTimers.callReactNativeMicrotasks()'),null!=this._reactNativeMicrotasksCallback&&this._reactNativeMicrotasksCallback(),r(d[2]).endEvent()}},{key:"__callFunction",value:function(t,l,s){this._lastFlush=Date.now(),this._eventLoopStartTime=this._lastFlush,this.__spy?r(d[2]).beginEvent(t+"."+l+"("+r(d[4]).default(s)+")"):r(d[2]).beginEvent(t+"."+l+"(...)"),this.__spy&&this.__spy({type:0,module:t,method:l,args:s});var u=this.getCallableModule(t);r(d[5])(!!u,"Module "+t+" is not a registered callable module (calling "+l+"). A frequent cause of the error is that the application entry file path is incorrect.\n This can also happen when the JS bundle is corrupt or there is an early initialization error when loading React Native."),r(d[5])(!!u[l],"Method "+l+" does not exist on module "+t),u[l].apply(u,s),r(d[2]).endEvent()}},{key:"__invokeCallback",value:function(t,l){this._lastFlush=Date.now(),this._eventLoopStartTime=this._lastFlush;var s=t>>>1,u=1&t?this._successCallbacks.get(s):this._failureCallbacks.get(s);u&&(this._successCallbacks.delete(s),this._failureCallbacks.delete(s),u.apply(void 0,r(d[6])(l)))}}],[{key:"spy",value:function(l){t.prototype.__spy=!0===l?function(t){console.log((0===t.type?'N->JS':'JS->N')+" : "+(null!=t.module?t.module+'.':'')+t.method+"("+JSON.stringify(t.args)+")")}:!1===l?null:l}}]),t})();m.exports=t},438,[402,403,439,440,441,425,442]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=!1,t=0,c={installReactHook:function(){!0},setEnabled:function(t){n!==t&&(n=t)},isEnabled:function(){return n},beginEvent:function(t,c){if(n){var o='function'==typeof t?t():t;g.nativeTraceBeginSection(131072,o,c)}},endEvent:function(){n&&g.nativeTraceEndSection(131072)},beginAsyncEvent:function(c){var o=t;if(n){t++;var f='function'==typeof c?c():c;g.nativeTraceBeginAsyncSection(131072,f,o)}return o},endAsyncEvent:function(t,c){if(n){var o='function'==typeof t?t():t;g.nativeTraceEndAsyncSection(131072,o,c)}},counterEvent:function(t,c){if(n){var o='function'==typeof t?t():t;g.nativeTraceCounter&&g.nativeTraceCounter(131072,o,c)}}};m.exports=c},439,[]); +__d(function(g,r,i,a,m,e,d){m.exports=g.ErrorUtils},440,[]); +__d(function(g,r,_i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.createStringifySafeWithLimits=o,_e.default=void 0;var t=r(d[0])(r(d[1]));function e(t,e){var i="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(i)return(i=i.call(t)).next.bind(i);if(Array.isArray(t)||(i=n(t))||e&&t&&"number"==typeof t.length){i&&(t=i);var o=0;return function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function n(t,e){if(t){if("string"==typeof t)return i(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(t,e):void 0}}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,i=new Array(e);nf+"...(truncated)...".length?i.substring(0,f)+"...(truncated)...":i}if('object'!=typeof i||null===i)return i;var u=i;if(Array.isArray(i))h.length>=o?u="[ ... array with "+i.length+" values ... ]":i.length>c&&(u=i.slice(0,c).concat(["... extra "+(i.length-c)+" values truncated ..."]));else{(0,t.default)('object'==typeof i,'This was already found earlier');var l=Object.keys(i);if(h.length>=o)u="{ ... object with "+l.length+" keys ... }";else if(l.length>s){u={};for(var y,v=e(l.slice(0,s));!(y=v()).done;){var b=y.value;u[b]=i[b]}u['...(truncated keys)...']=l.length-s}}return h.unshift(u),u}return function(t){if(void 0===t)return'undefined';if(null===t)return'null';if('function'==typeof t)try{return t.toString()}catch(t){return'[function unknown]'}else{if(t instanceof Error)return t.name+': '+t.message;try{var e=JSON.stringify(t,v);return void 0===e?'["'+typeof t+'" failed to stringify]':e}catch(e){if('function'==typeof t.toString)try{return t.toString()}catch(t){}}}return'["'+typeof t+'" failed to stringify]'}}var u=o({maxDepth:10,maxStringLimit:100,maxArrayLimit:50,maxObjectKeysLimit:50});_e.default=u},441,[407,425]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t){return r(d[0])(t)||r(d[1])(t)||r(d[2])(t)||r(d[3])()},m.exports.__esModule=!0,m.exports.default=m.exports},442,[443,444,433,445]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t){if(Array.isArray(t))return r(d[0])(t)},m.exports.__esModule=!0,m.exports.default=m.exports},443,[434]); +__d(function(g,r,i,a,m,e,d){m.exports=function(o){if("undefined"!=typeof Symbol&&null!=o[Symbol.iterator]||null!=o["@@iterator"])return Array.from(o)},m.exports.__esModule=!0,m.exports.default=m.exports},444,[]); +__d(function(g,r,i,a,m,e,d){m.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},m.exports.__esModule=!0,m.exports.default=m.exports},445,[]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=function(t,n,u){var b,c=u.get,o=!1!==u.enumerable,f=!1!==u.writable,l=!1;function s(u){b=u,l=!0,Object.defineProperty(t,n,{value:u,configurable:!0,enumerable:o,writable:f})}Object.defineProperty(t,n,{get:function(){return l||(l=!0,s(c())),b},set:s,configurable:!0,enumerable:o})}},446,[]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=n[l]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).get('AccessibilityInfo');e.default=n},447,[428]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('AccessibilityManager');e.default=n},448,[428]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));m.exports=function(s,c){'focus'===c&&t.default.sendAccessibilityEvent(s,t.default.getConstants().AccessibilityEventTypes.typeViewFocused),'click'===c&&t.default.sendAccessibilityEvent(s,t.default.getConstants().AccessibilityEventTypes.typeViewClicked)}},449,[407,450]); +__d(function(g,r,i,a,m,e,d){var l=r(d[0])(r(d[1])),n=!0===g.RN$Bridgeless?r(d[2]):null==l.default.unstable_UIManager?r(d[3]):l.default.unstable_UIManager;m.exports=n},450,[407,451,452,453]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default={unstable_UIManager:null}},451,[]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports={getViewManagerConfig:function(n){return console.warn('Attempting to get config for view manager: '+n),'RCTVirtualText'===n?{}:null},hasViewManagerConfig:function(n){return'RCTVirtualText'===n||'RCTShimmeringView'===n},getConstants:function(){return{}},getConstantsForViewManager:function(n){},getDefaultEventTypes:function(){return[]},lazilyLoadView:function(n){},createView:function(n,t,o,u){},updateView:function(n,t,o){},focus:function(n){},blur:function(n){},findSubviewIn:function(n,t,o){},dispatchViewManagerCommand:function(n,t,o){},measure:function(n,t){},measureInWindow:function(n,t){},viewIsDescendantOf:function(n,t,o){},measureLayout:function(n,t,o,u){},measureLayoutRelativeToParent:function(n,t,o){},setJSResponder:function(n,t){},clearJSResponder:function(){},configureNextLayoutAnimation:function(n,t,o){},removeSubviewsFromContainerWithID:function(n){},replaceExistingNonRootView:function(n,t){},setChildren:function(n,t){},manageChildren:function(n,t,o,u,c,f){},setLayoutAnimationEnabledExperimental:function(n){},sendAccessibilityEvent:function(n,t){},showPopupMenu:function(n,t,o,u){},dismissPopupMenu:function(){}}},452,[]); +__d(function(g,r,i,a,m,_e,d){var n=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),t={},o=new Set,f={},u=!1;function c(){return u||(f=e.default.getConstants(),u=!0),f}function l(n){if(void 0===t[n]&&g.nativeCallSyncHook&&e.default.getConstantsForViewManager)try{t[n]=e.default.getConstantsForViewManager(n)}catch(e){console.error("NativeUIManager.getConstantsForViewManager('"+n+"') threw an exception.",e),t[n]=null}var f=t[n];if(f)return f;if(!g.nativeCallSyncHook)return f;if(e.default.lazilyLoadView&&!o.has(n)){var u=e.default.lazilyLoadView(n);o.add(n),null!=u&&null!=u.viewConfig&&(c()[n]=u.viewConfig,w(n))}return t[n]}var s=(0,n.default)({},e.default,{createView:function(n,t,o,f){e.default.createView(n,t,o,f)},getConstants:function(){return c()},getViewManagerConfig:function(n){return l(n)},hasViewManagerConfig:function(n){return null!=l(n)}});function w(n){var e=c()[n];t[n]=e,e.Manager&&(r(d[3])(e,'Constants',{get:function(){var n=r(d[4])[e.Manager],t={};return n&&Object.keys(n).forEach(function(e){var o=n[e];'function'!=typeof o&&(t[e]=o)}),t}}),r(d[3])(e,'Commands',{get:function(){var n=r(d[4])[e.Manager],t={},o=0;return n&&Object.keys(n).forEach(function(e){'function'==typeof n[e]&&(t[e]=o++)}),t}}))}e.default.getViewManagerConfig=s.getViewManagerConfig,c().ViewManagerNames&&e.default.getConstants().ViewManagerNames.forEach(function(n){r(d[3])(e.default,n,{get:function(){return e.default.getConstantsForViewManager(n)}})}),g.nativeCallSyncHook||Object.keys(c()).forEach(function(n){r(d[5]).includes(n)||(t[n]||(t[n]=c()[n]),r(d[3])(e.default,n,{get:function(){return console.warn("Accessing view manager configs directly off UIManager via UIManager['"+n+"'] is no longer supported. Use UIManager.getViewManagerConfig('"+n+"') instead."),s.getViewManagerConfig(n)}}))}),m.exports=s},453,[407,436,454,446,429,455]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=n[l]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).getEnforcing('UIManager');e.default=n},454,[428]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=['clearJSResponder','configureNextLayoutAnimation','createView','dismissPopupMenu','dispatchViewManagerCommand','findSubviewIn','getConstantsForViewManager','getDefaultEventTypes','manageChildren','measure','measureInWindow','measureLayout','measureLayoutRelativeToParent','removeRootView','removeSubviewsFromContainerWithID','replaceExistingNonRootView','sendAccessibilityEvent','setChildren','setJSResponder','setLayoutAnimationEnabledExperimental','showPopupMenu','updateView','viewIsDescendantOf','PopupMenu','LazyViewManagersEnabled','ViewManagerNames','StyleConstants','AccessibilityEventTypes','UIView','getViewManagerConfig','hasViewManagerConfig','blur','focus','genericBubblingEventTypes','genericDirectEventTypes','lazilyLoadView']},455,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var t;t=r(d[0]),m.exports=t},456,[457]); +__d(function(e,n,t,r,l,a,i){"use strict";n(i[0]);var u=n(i[1]);function o(e,n,t,r,l,a,i,u,o){var s=Array.prototype.slice.call(arguments,3);try{n.apply(t,s)}catch(e){this.onError(e)}}var s=!1,c=null,d=!1,f=null,p={onError:function(e){s=!0,c=e}};function h(e,n,t,r,l,a,i,u,d){s=!1,c=null,o.apply(p,arguments)}function g(e,n,t,r,l,a,i,u,o){if(h.apply(this,arguments),s){if(!s)throw Error("clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.");var p=c;s=!1,c=null,d||(d=!0,f=p)}}var m=Array.isArray,v=null,b=null,y=null;function S(e,n,t){var r=e.type||"unknown-event";e.currentTarget=y(t),g(r,n,void 0,e),e.currentTarget=null}function k(e){var n=e._dispatchListeners,t=e._dispatchInstances;if(m(n))throw Error("executeDirectDispatch(...): Invalid `event`.");return e.currentTarget=n?y(t):null,n=n?n(e):null,e.currentTarget=null,e._dispatchListeners=null,e._dispatchInstances=null,n}function w(){return!0}function _(){return!1}function T(e,n,t,r){for(var l in this.dispatchConfig=e,this._targetInst=n,this.nativeEvent=t,this._dispatchInstances=this._dispatchListeners=null,e=this.constructor.Interface)e.hasOwnProperty(l)&&((n=e[l])?this[l]=n(t):"target"===l?this.target=r:this[l]=t[l]);return this.isDefaultPrevented=(null!=t.defaultPrevented?t.defaultPrevented:!1===t.returnValue)?w:_,this.isPropagationStopped=_,this}function x(e,n,t,r){if(this.eventPool.length){var l=this.eventPool.pop();return this.call(l,e,n,t,r),l}return new this(e,n,t,r)}function P(e){if(!(e instanceof this))throw Error("Trying to release an event instance into a pool of a different type.");e.destructor(),10>this.eventPool.length&&this.eventPool.push(e)}function R(e){e.getPooled=x,e.eventPool=[],e.release=P}n(i[2])(T.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=w)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=w)},persist:function(){this.isPersistent=w},isPersistent:_,destructor:function(){var e,n=this.constructor.Interface;for(e in n)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=_,this._dispatchInstances=this._dispatchListeners=null}}),T.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},T.extend=function(e){function t(){}function r(){return l.apply(this,arguments)}var l=this;t.prototype=l.prototype;var a=new t;return n(i[2])(a,r.prototype),r.prototype=a,r.prototype.constructor=r,r.Interface=n(i[2])({},l.Interface,e),r.extend=l.extend,R(r),r},R(T);var E=T.extend({touchHistory:function(){return null}});function C(e){return"topTouchStart"===e}function N(e){return"topTouchMove"===e}var z=["topTouchStart"],I=["topTouchMove"],L=["topTouchCancel","topTouchEnd"],U=[],M={touchBank:U,numberActiveTouches:0,indexOfSingleActiveTouch:-1,mostRecentTimeStamp:0};function F(e){return e.timeStamp||e.timestamp}function D(e){if(null==(e=e.identifier))throw Error("Touch object is missing identifier.");return e}function A(e){var n=D(e),t=U[n];t?(t.touchActive=!0,t.startPageX=e.pageX,t.startPageY=e.pageY,t.startTimeStamp=F(e),t.currentPageX=e.pageX,t.currentPageY=e.pageY,t.currentTimeStamp=F(e),t.previousPageX=e.pageX,t.previousPageY=e.pageY,t.previousTimeStamp=F(e)):(t={touchActive:!0,startPageX:e.pageX,startPageY:e.pageY,startTimeStamp:F(e),currentPageX:e.pageX,currentPageY:e.pageY,currentTimeStamp:F(e),previousPageX:e.pageX,previousPageY:e.pageY,previousTimeStamp:F(e)},U[n]=t),M.mostRecentTimeStamp=F(e)}function Q(e){var n=U[D(e)];n&&(n.touchActive=!0,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=F(e),M.mostRecentTimeStamp=F(e))}function H(e){var n=U[D(e)];n&&(n.touchActive=!1,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=F(e),M.mostRecentTimeStamp=F(e))}var O,j={instrument:function(e){O=e},recordTouchTrack:function(e,n){if(null!=O&&O(e,n),N(e))n.changedTouches.forEach(Q);else if(C(e))n.changedTouches.forEach(A),M.numberActiveTouches=n.touches.length,1===M.numberActiveTouches&&(M.indexOfSingleActiveTouch=n.touches[0].identifier);else if(("topTouchEnd"===e||"topTouchCancel"===e)&&(n.changedTouches.forEach(H),M.numberActiveTouches=n.touches.length,1===M.numberActiveTouches))for(e=0;ei||(a=i),Ne(a,e,l)}}}),v=function(e){return we.get(e._nativeTag)||null},b=_e,y=function(e){var n=(e=e.stateNode)._nativeTag;if(void 0===n&&(n=(e=e.canonical)._nativeTag),!n)throw Error("All native instances should have a tag.");return e},re.injection.injectGlobalResponderHandler({onChange:function(e,t,r){null!==t?n(i[3]).UIManager.setJSResponder(t.stateNode._nativeTag,r):n(i[3]).UIManager.clearJSResponder()}});var ze=u.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Ie=60103,Le=60106,Ue=60107,Me=60108,Fe=60114,De=60109,Ae=60110,Qe=60112,He=60113,Oe=60120,je=60115,Be=60116,Ve=60129,We=60130,Ye=60131,qe=60132;if("function"==typeof Symbol&&Symbol.for){var Xe=Symbol.for;Ie=Xe("react.element"),Le=Xe("react.portal"),Ue=Xe("react.fragment"),Me=Xe("react.strict_mode"),Fe=Xe("react.profiler"),De=Xe("react.provider"),Ae=Xe("react.context"),Qe=Xe("react.forward_ref"),He=Xe("react.suspense"),Oe=Xe("react.suspense_list"),je=Xe("react.memo"),Be=Xe("react.lazy"),Xe("react.scope"),Ve=Xe("react.debug_trace_mode"),We=Xe("react.offscreen"),Ye=Xe("react.legacy_hidden"),qe=Xe("react.cache")}var $e="function"==typeof Symbol&&Symbol.iterator;function Ge(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$e&&e[$e]||e["@@iterator"])?e:null}function Ke(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case Ue:return"Fragment";case Le:return"Portal";case Fe:return"Profiler";case Me:return"StrictMode";case He:return"Suspense";case Oe:return"SuspenseList";case qe:return"Cache"}if("object"==typeof e)switch(e.$$typeof){case Ae:return(e.displayName||"Context")+".Consumer";case De:return(e._context.displayName||"Context")+".Provider";case Qe:var n=e.render;return(e=e.displayName)||(e=""!==(e=n.displayName||n.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case je:return null!==(n=e.displayName||null)?n:Ke(e.type)||"Memo";case Be:n=e._payload,e=e._init;try{return Ke(e(n))}catch(e){}}return null}function Je(e){var n=e.type;switch(e.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=n.render).displayName||e.name||"",n.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ke(n);case 23:return"LegacyHidden";case 8:return n===Me?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof n)return n.displayName||n.name||null;if("string"==typeof n)return n}return null}function Ze(e){var n=e,t=e;if(e.alternate)for(;n.return;)n=n.return;else{e=n;do{0!=(2050&(n=e).flags)&&(t=n.return),e=n.return}while(e)}return 3===n.tag?t:null}function en(e){if(Ze(e)!==e)throw Error("Unable to find node on an unmounted component.")}function nn(e){var n=e.alternate;if(!n){if(null===(n=Ze(e)))throw Error("Unable to find node on an unmounted component.");return n!==e?null:e}for(var t=e,r=n;;){var l=t.return;if(null===l)break;var a=l.alternate;if(null===a){if(null!==(r=l.return)){t=r;continue}break}if(l.child===a.child){for(a=l.child;a;){if(a===t)return en(l),e;if(a===r)return en(l),n;a=a.sibling}throw Error("Unable to find node on an unmounted component.")}if(t.return!==r.return)t=l,r=a;else{for(var i=!1,u=l.child;u;){if(u===t){i=!0,t=l,r=a;break}if(u===r){i=!0,r=l,t=a;break}u=u.sibling}if(!i){for(u=a.child;u;){if(u===t){i=!0,t=a,r=l;break}if(u===r){i=!0,r=a,t=l;break}u=u.sibling}if(!i)throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.")}}if(t.alternate!==r)throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.")}if(3!==t.tag)throw Error("Unable to find node on an unmounted component.");return t.stateNode.current===t?e:n}function tn(e){return null!==(e=nn(e))?rn(e):null}function rn(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var n=rn(e);if(null!==n)return n;e=e.sibling}return null}var ln={},an=null,un=0,on={unsafelyIgnoreFunctions:!0};function sn(e,t){return"object"!=typeof t||null===t||n(i[3]).deepDiffer(e,t,on)}function cn(e,n,t){if(m(n))for(var r=n.length;r--&&0=(a=n&-n)||16===l&&0!=(4194240&a)))return n;if(0!=(4&r)&&(r|=16&t),0!==(n=e.entangledLanes))for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function Rn(e,n,t){e.pendingLanes|=n,536870912!==n&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[n=31-Nn(n)]=t}function En(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0Xn||(e.current=qn[Xn],qn[Xn]=null,Xn--)}function Kn(e,n){qn[++Xn]=e.current,e.current=n}var Jn={},Zn=$n(Jn),et=$n(!1),nt=Jn;function tt(e,n){var t=e.type.contextTypes;if(!t)return Jn;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l,a={};for(l in t)a[l]=n[l];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=a),a}function rt(e){return null!==(e=e.childContextTypes)&&void 0!==e}function lt(){Gn(et),Gn(Zn)}function at(e,n,t){if(Zn.current!==Jn)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");Kn(Zn,n),Kn(et,t)}function it(e,t,r){var l=e.stateNode;if(t=t.childContextTypes,"function"!=typeof l.getChildContext)return r;for(var a in l=l.getChildContext())if(!(a in t))throw Error((Je(e)||"Unknown")+'.getChildContext(): key "'+a+'" is not defined in childContextTypes.');return n(i[2])({},r,l)}function ut(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Jn,nt=Zn.current,Kn(Zn,e),Kn(et,et.current),!0}function ot(e,n,t){var r=e.stateNode;if(!r)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");t?(e=it(e,n,nt),r.__reactInternalMemoizedMergedChildContext=e,Gn(et),Gn(Zn),Kn(Zn,e)):Gn(et),Kn(et,t)}var st=null,ct=!1,dt=!1;function ft(){if(!dt&&null!==st){dt=!0;var e=0,t=Ln;try{var r=st;for(Ln=1;eg?(m=h,h=null):m=h.sibling;var v=f(l,h,u[g],o);if(null===v){null===h&&(h=m);break}e&&h&&null===v.alternate&&n(l,h),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v,h=m}if(g===u.length)return t(l,h),s;if(null===h){for(;gg?(m=h,h=null):m=h.sibling;var b=f(l,h,v.value,o);if(null===b){null===h&&(h=m);break}e&&h&&null===b.alternate&&n(l,h),i=a(b,i,g),null===c?s=b:c.sibling=b,c=b,h=m}if(v.done)return t(l,h),s;if(null===h){for(;!v.done;g++,v=u.next())null!==(v=d(l,v.value,o))&&(i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return s}for(h=r(l,h);!v.done;g++,v=u.next())null!==(v=p(h,l,g,v.value,o))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return e&&h.forEach(function(e){return n(l,e)}),s}return function(e,r,a,u){var o="object"==typeof a&&null!==a&&a.type===Ue&&null===a.key;if(o&&(a=a.props.children),"object"==typeof a&&null!==a){switch(a.$$typeof){case Ie:e:{var s=a.key;for(o=r;null!==o;){if(o.key===s){if((s=a.type)===Ue){if(7===o.tag){t(e,o.sibling),(r=l(o,a.props.children)).return=e,e=r;break e}}else if(o.elementType===s){t(e,o.sibling),(r=l(o,a.props)).ref=Wt(e,o,a),r.return=e,e=r;break e}t(e,o);break}n(e,o),o=o.sibling}a.type===Ue?((r=Ka(a.props.children,e.mode,u,a.key)).return=e,e=r):((u=Ga(a.type,a.key,a.props,null,e.mode,u)).ref=Wt(e,r,a),u.return=e,e=u)}return i(e);case Le:e:{for(o=a.key;null!==r;){if(r.key===o){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){t(e,r.sibling),(r=l(r,a.children||[])).return=e,e=r;break e}t(e,r);break}n(e,r),r=r.sibling}(r=ei(a,e.mode,u)).return=e,e=r}return i(e)}if(m(a))return h(e,r,a,u);if(Ge(a))return g(e,r,a,u);Yt(e,a)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(t(e,r.sibling),(r=l(r,a)).return=e,e=r):(t(e,r),(r=Za(a,e.mode,u)).return=e,e=r),i(e);if(void 0===a&&!o)switch(e.tag){case 1:case 0:case 11:case 15:throw Error((Je(e)||"Component")+"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.")}return t(e,r)}}var Xt=qt(!0),$t=qt(!1),Gt={},Kt=$n(Gt),Jt=$n(Gt),Zt=$n(Gt);function er(e){if(e===Gt)throw Error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.");return e}function nr(e,n){Kn(Zt,n),Kn(Jt,e),Kn(Kt,Gt),Gn(Kt),Kn(Kt,{isInAParentText:!1})}function tr(){Gn(Kt),Gn(Jt),Gn(Zt)}function rr(e){er(Zt.current);var n=er(Kt.current),t=e.type;t="AndroidTextInput"===t||"RCTMultilineTextInputView"===t||"RCTSinglelineTextInputView"===t||"RCTText"===t||"RCTVirtualText"===t,n!==(t=n.isInAParentText!==t?{isInAParentText:t}:n)&&(Kn(Jt,e),Kn(Kt,t))}function lr(e){Jt.current===e&&(Gn(Kt),Gn(Jt))}var ar=$n(0);function ir(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===t.dehydrated||Mn()||Mn()))return n}else if(19===n.tag&&void 0!==n.memoizedProps.revealOrder){if(0!=(128&n.flags))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var ur=[];function or(){for(var e=0;ea))throw Error("Too many re-renders. React limits the number of renders to prevent an infinite loop.");a+=1,hr=pr=null,n.updateQueue=null,sr.current=Yr,e=t(r,l)}while(mr)}if(sr.current=Br,n=null!==pr&&null!==pr.next,dr=0,hr=pr=fr=null,gr=!1,n)throw Error("Rendered fewer hooks than expected. This may be caused by an accidental early return statement.");return e}function Sr(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===hr?fr.memoizedState=hr=e:hr=hr.next=e,hr}function kr(){if(null===pr){var e=fr.alternate;e=null!==e?e.memoizedState:null}else e=pr.next;var n=null===hr?fr.memoizedState:hr.next;if(null!==n)hr=n,pr=e;else{if(null===e)throw Error("Rendered more hooks than during the previous render.");e={memoizedState:(pr=e).memoizedState,baseState:pr.baseState,baseQueue:pr.baseQueue,queue:pr.queue,next:null},null===hr?fr.memoizedState=hr=e:hr=hr.next=e}return hr}function wr(e,n){return"function"==typeof n?n(e):n}function _r(e){var n=kr(),t=n.queue;if(null===t)throw Error("Should have a queue. This is likely a bug in React. Please file an issue.");t.lastRenderedReducer=e;var r=pr,l=r.baseQueue,a=t.pending;if(null!==a){if(null!==l){var i=l.next;l.next=a.next,a.next=i}r.baseQueue=l=a,t.pending=null}if(null!==l){a=l.next,r=r.baseState;var u=i=null,o=null,s=a;do{var c=s.lane;if((dr&c)===c)null!==o&&(o=o.next={lane:0,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null}),r=s.eagerReducer===e?s.eagerState:e(r,s.action);else{var d={lane:c,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null};null===o?(u=o=d,i=r):o=o.next=d,fr.lanes|=c,ia|=c}s=s.next}while(null!==s&&s!==a);null===o?i=r:o.next=u,ht(r,n.memoizedState)||(Zr=!0),n.memoizedState=r,n.baseState=i,n.baseQueue=o,t.lastRenderedState=r}if(null!==(e=t.interleaved)){l=e;do{a=l.lane,fr.lanes|=a,ia|=a,l=l.next}while(l!==e)}else null===l&&(t.lanes=0);return[n.memoizedState,t.dispatch]}function Tr(e){var n=kr(),t=n.queue;if(null===t)throw Error("Should have a queue. This is likely a bug in React. Please file an issue.");t.lastRenderedReducer=e;var r=t.dispatch,l=t.pending,a=n.memoizedState;if(null!==l){t.pending=null;var i=l=l.next;do{a=e(a,i.action),i=i.next}while(i!==l);ht(a,n.memoizedState)||(Zr=!0),n.memoizedState=a,null===n.baseQueue&&(n.baseState=a),t.lastRenderedState=a}return[a,r]}function xr(e,n,t){var r=n._getVersion;r=r(n._source);var l=n._workInProgressVersionPrimary;if(null!==l?e=l===r:(e=e.mutableReadLanes,(e=(dr&e)===e)&&(n._workInProgressVersionPrimary=r,ur.push(n))),e)return t(n._source);throw ur.push(n),Error("Cannot read from mutable source during the current render without tearing. This may be a bug in React. Please file an issue.")}function Pr(e,n,t,r){var l=Zl;if(null===l)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");var a=n._getVersion,i=a(n._source),u=sr.current,o=u.useState(function(){return xr(l,n,t)}),s=o[1],c=o[0];o=hr;var d=e.memoizedState,f=d.refs,p=f.getSnapshot,h=d.source;d=d.subscribe;var g=fr;return e.memoizedState={refs:f,source:n,subscribe:r},u.useEffect(function(){f.getSnapshot=t,f.setSnapshot=s;var e=a(n._source);ht(i,e)||(e=t(n._source),ht(c,e)||(s(e),e=wa(g),l.mutableReadLanes|=e&l.pendingLanes),Cn(l,l.mutableReadLanes))},[t,n,r]),u.useEffect(function(){return r(n._source,function(){var e=f.getSnapshot,t=f.setSnapshot;try{t(e(n._source));var r=wa(g);l.mutableReadLanes|=r&l.pendingLanes}catch(e){t(function(){throw e})}})},[n,r]),ht(p,t)&&ht(h,n)&&ht(d,r)||((e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:wr,lastRenderedState:c}).dispatch=s=jr.bind(null,fr,e),o.queue=e,o.baseQueue=null,c=xr(l,n,t),o.memoizedState=o.baseState=c),c}function Rr(e,n,t){return Pr(kr(),e,n,t)}function Er(e){var n=Sr();return"function"==typeof e&&(e=e()),n.memoizedState=n.baseState=e,e=(e=n.queue={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:wr,lastRenderedState:e}).dispatch=jr.bind(null,fr,e),[n.memoizedState,e]}function Cr(e,n,t,r){return e={tag:e,create:n,destroy:t,deps:r,next:null},null===(n=fr.updateQueue)?(n={lastEffect:null},fr.updateQueue=n,n.lastEffect=e.next=e):null===(t=n.lastEffect)?n.lastEffect=e.next=e:(r=t.next,t.next=e,e.next=r,n.lastEffect=e),e}function Nr(){return kr().memoizedState}function zr(e,n,t,r){var l=Sr();fr.flags|=e,l.memoizedState=Cr(1|n,t,void 0,void 0===r?null:r)}function Ir(e,n,t,r){var l=kr();r=void 0===r?null:r;var a=void 0;if(null!==pr){var i=pr.memoizedState;if(a=i.destroy,null!==r&&br(r,i.deps))return void(l.memoizedState=Cr(n,t,a,r))}fr.flags|=e,l.memoizedState=Cr(1|n,t,a,r)}function Lr(e,n){return zr(1049600,4,e,n)}function Ur(e,n){return Ir(1024,4,e,n)}function Mr(e,n){return Ir(4,2,e,n)}function Fr(e,n){return"function"==typeof n?(e=e(),n(e),function(){n(null)}):null!==n&&void 0!==n?(e=e(),n.current=e,function(){n.current=null}):void 0}function Dr(e,n,t){return t=null!==t&&void 0!==t?t.concat([e]):null,Ir(4,2,Fr.bind(null,n,e),t)}function Ar(){}function Qr(e,n){var t=kr();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&br(n,r[1])?r[0]:(t.memoizedState=[e,n],e)}function Hr(e,n){var t=kr();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&br(n,r[1])?r[0]:(e=e(),t.memoizedState=[e,n],e)}function Or(e,n){var t=Ln;Ln=0!==t&&4>t?t:4,e(!0);var r=cr.transition;cr.transition=1;try{e(!1),n()}finally{Ln=t,cr.transition=r}}function jr(e,n,t){var r=ka(),l=wa(e),a={lane:l,action:t,eagerReducer:null,eagerState:null,next:null},i=e.alternate;if(e===fr||null!==i&&i===fr)mr=gr=!0,null===(l=n.pending)?a.next=a:(a.next=l.next,l.next=a),n.pending=a;else{if(null!==Zl&&0!=(1&e.mode)&&0==(8&Jl)){var u=n.interleaved;null===u?(a.next=a,null===Et?Et=[n]:Et.push(n)):(a.next=u.next,u.next=a),n.interleaved=a}else null===(u=n.pending)?a.next=a:(a.next=u.next,u.next=a),n.pending=a;if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=n.lastRenderedReducer))try{var o=n.lastRenderedState,s=i(o,t);if(a.eagerReducer=i,a.eagerState=s,ht(s,o))return}catch(e){}a=_a(e,l,r),0!=(4194240&l)&&null!==a&&(e=n.lanes,l|=e&=a.pendingLanes,n.lanes=l,Cn(a,l))}}var Br={readContext:Rt,useCallback:vr,useContext:vr,useEffect:vr,useImperativeHandle:vr,useLayoutEffect:vr,useMemo:vr,useReducer:vr,useRef:vr,useState:vr,useDebugValue:vr,useDeferredValue:vr,useTransition:vr,useMutableSource:vr,useOpaqueIdentifier:vr,unstable_isNewReconciler:!1},Vr={readContext:Rt,useCallback:function(e,n){return Sr().memoizedState=[e,void 0===n?null:n],e},useContext:Rt,useEffect:Lr,useImperativeHandle:function(e,n,t){return t=null!==t&&void 0!==t?t.concat([e]):null,zr(4,2,Fr.bind(null,n,e),t)},useLayoutEffect:function(e,n){return zr(4,2,e,n)},useMemo:function(e,n){var t=Sr();return n=void 0===n?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=Sr();return n=void 0!==t?t(n):n,r.memoizedState=r.baseState=n,e=(e=r.queue={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n}).dispatch=jr.bind(null,fr,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Sr().memoizedState=e},useState:Er,useDebugValue:Ar,useDeferredValue:function(e){var n=Er(e),t=n[0],r=n[1];return Lr(function(){var n=cr.transition;cr.transition=1;try{r(e)}finally{cr.transition=n}},[e]),t},useTransition:function(){var e=Er(!1),n=e[0];return e=Or.bind(null,e[1]),Sr().memoizedState=e,[n,e]},useMutableSource:function(e,n,t){var r=Sr();return r.memoizedState={refs:{getSnapshot:n,setSnapshot:null},source:e,subscribe:t},Pr(r,e,n,t)},useOpaqueIdentifier:function(){throw Error("Not yet implemented")},unstable_isNewReconciler:!1},Wr={readContext:Rt,useCallback:Qr,useContext:Rt,useEffect:Ur,useImperativeHandle:Dr,useLayoutEffect:Mr,useMemo:Hr,useReducer:_r,useRef:Nr,useState:function(){return _r(wr)},useDebugValue:Ar,useDeferredValue:function(e){var n=_r(wr),t=n[0],r=n[1];return Ur(function(){var n=cr.transition;cr.transition=1;try{r(e)}finally{cr.transition=n}},[e]),t},useTransition:function(){return[_r(wr)[0],kr().memoizedState]},useMutableSource:Rr,useOpaqueIdentifier:function(){return _r(wr)[0]},unstable_isNewReconciler:!1},Yr={readContext:Rt,useCallback:Qr,useContext:Rt,useEffect:Ur,useImperativeHandle:Dr,useLayoutEffect:Mr,useMemo:Hr,useReducer:Tr,useRef:Nr,useState:function(){return Tr(wr)},useDebugValue:Ar,useDeferredValue:function(e){var n=Tr(wr),t=n[0],r=n[1];return Ur(function(){var n=cr.transition;cr.transition=1;try{r(e)}finally{cr.transition=n}},[e]),t},useTransition:function(){return[Tr(wr)[0],kr().memoizedState]},useMutableSource:Rr,useOpaqueIdentifier:function(){return Tr(wr)[0]},unstable_isNewReconciler:!1};function qr(e,n){return{value:e,source:n,stack:vt(n)}}if("function"!=typeof n(i[3]).ReactFiberErrorDialog.showErrorDialog)throw Error("Expected ReactFiberErrorDialog.showErrorDialog to be a function.");function Xr(e,t){try{!1!==n(i[3]).ReactFiberErrorDialog.showErrorDialog({componentStack:null!==t.stack?t.stack:"",error:t.value,errorBoundary:null!==e&&1===e.tag?e.stateNode:null})&&console.error(t.value)}catch(e){setTimeout(function(){throw e})}}var $r="function"==typeof WeakMap?WeakMap:Map;function Gr(e,n,t){(t=It(-1,t)).tag=3,t.payload={element:null};var r=n.value;return t.callback=function(){da||(da=!0,fa=r),Xr(e,n)},t}function Kr(e,n,t){(t=It(-1,t)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var l=n.value;t.payload=function(){return Xr(e,n),r(l)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(t.callback=function(){"function"!=typeof r&&(null===pa?pa=new Set([this]):pa.add(this),Xr(e,n));var t=n.stack;this.componentDidCatch(n.value,{componentStack:null!==t?t:""})}),t}var Jr=ze.ReactCurrentOwner,Zr=!1;function el(e,n,t,r){n.child=null===e?$t(n,null,t,r):Xt(n,e.child,t,r)}function nl(e,n,t,r,l){t=t.render;var a=n.ref;return Pt(n,l),r=yr(e,n,t,r,a,l),null===e||Zr?(n.flags|=1,el(e,n,r,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-1029,e.lanes&=~l,_l(e,n,l))}function tl(e,n,t,r,l,a){if(null===e){var i=t.type;return"function"!=typeof i||qa(i)||void 0!==i.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=Ga(t.type,null,r,n,n.mode,a)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=i,rl(e,n,i,r,l,a))}return i=e.child,0==(l&a)&&(l=i.memoizedProps,(t=null!==(t=t.compare)?t:gt)(l,r)&&e.ref===n.ref)?_l(e,n,a):(n.flags|=1,(e=$a(i,r)).ref=n.ref,e.return=n,n.child=e)}function rl(e,n,t,r,l,a){if(null!==e&>(e.memoizedProps,r)&&e.ref===n.ref){if(Zr=!1,0==(a&l))return n.lanes=e.lanes,_l(e,n,a);0!=(32768&e.flags)&&(Zr=!0)}return il(e,n,t,r,a)}function ll(e,n,t){var r=n.pendingProps,l=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(1&n.mode))n.memoizedState={baseLanes:0,cachePool:null},Kn(ra,ta),ta|=t;else{if(0==(1073741824&t))return e=null!==a?a.baseLanes|t:t,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null},n.updateQueue=null,Kn(ra,ta),ta|=e,null;n.memoizedState={baseLanes:0,cachePool:null},r=null!==a?a.baseLanes:t,Kn(ra,ta),ta|=r}else null!==a?(r=a.baseLanes|t,n.memoizedState=null):r=t,Kn(ra,ta),ta|=r;return el(e,n,l,t),n.child}function al(e,n){var t=n.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(n.flags|=256)}function il(e,n,t,r,l){var a=rt(t)?nt:Zn.current;return a=tt(n,a),Pt(n,l),t=yr(e,n,t,r,a,l),null===e||Zr?(n.flags|=1,el(e,n,t,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-1029,e.lanes&=~l,_l(e,n,l))}function ul(e,n,t,r,l){if(rt(t)){var a=!0;ut(n)}else a=!1;if(Pt(n,l),null===n.stateNode)null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2),jt(n,t,r),Vt(n,t,r,l),r=!0;else if(null===e){var i=n.stateNode,u=n.memoizedProps;i.props=u;var o=i.context,s=t.contextType;"object"==typeof s&&null!==s?s=Rt(s):s=tt(n,s=rt(t)?nt:Zn.current);var c=t.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==r||o!==s)&&Bt(n,i,r,s),Ct=!1;var f=n.memoizedState;i.state=f,Ft(n,r,i,l),o=n.memoizedState,u!==r||f!==o||et.current||Ct?("function"==typeof c&&(Qt(n,t,c,r),o=n.memoizedState),(u=Ct||Ot(n,t,u,r,f,o,s))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(n.flags|=4)):("function"==typeof i.componentDidMount&&(n.flags|=4),n.memoizedProps=r,n.memoizedState=o),i.props=r,i.state=o,i.context=s,r=u):("function"==typeof i.componentDidMount&&(n.flags|=4),r=!1)}else{i=n.stateNode,zt(e,n),u=n.memoizedProps,s=n.type===n.elementType?u:bt(n.type,u),i.props=s,d=n.pendingProps,f=i.context,"object"==typeof(o=t.contextType)&&null!==o?o=Rt(o):o=tt(n,o=rt(t)?nt:Zn.current);var p=t.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==d||f!==o)&&Bt(n,i,r,o),Ct=!1,f=n.memoizedState,i.state=f,Ft(n,r,i,l);var h=n.memoizedState;u!==d||f!==h||et.current||Ct?("function"==typeof p&&(Qt(n,t,p,r),h=n.memoizedState),(s=Ct||Ot(n,t,s,r,f,h,o)||!1)?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,o),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,o)),"function"==typeof i.componentDidUpdate&&(n.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(n.flags|=512)):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=512),n.memoizedProps=r,n.memoizedState=h),i.props=r,i.state=h,i.context=o,r=s):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=512),r=!1)}return ol(e,n,t,r,a,l)}function ol(e,n,t,r,l,a){al(e,n);var i=0!=(128&n.flags);if(!r&&!i)return l&&ot(n,t,!1),_l(e,n,a);r=n.stateNode,Jr.current=n;var u=i&&"function"!=typeof t.getDerivedStateFromError?null:r.render();return n.flags|=1,null!==e&&i?(n.child=Xt(n,e.child,null,a),n.child=Xt(n,null,u,a)):el(e,n,u,a),n.memoizedState=r.state,l&&ot(n,t,!0),n.child}function sl(e){var n=e.stateNode;n.pendingContext?at(0,n.pendingContext,n.pendingContext!==n.context):n.context&&at(0,n.context,!1),nr(e,n.containerInfo)}var cl,dl,fl,pl,hl={dehydrated:null,retryLane:0};function gl(e){return{baseLanes:e,cachePool:null}}function ml(e,n,t){var r,l=n.pendingProps,a=ar.current,i=!1;return(r=0!=(128&n.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,n.flags&=-129):null!==e&&null===e.memoizedState||void 0===l.fallback||!0===l.unstable_avoidThisFallback||(a|=1),Kn(ar,1&a),null===e?(e=l.children,a=l.fallback,i?(e=vl(n,e,a,t),n.child.memoizedState=gl(t),n.memoizedState=hl,e):"number"==typeof l.unstable_expectedLoadTime?(e=vl(n,e,a,t),n.child.memoizedState=gl(t),n.memoizedState=hl,n.lanes=4194304,e):((t=Ja({mode:"visible",children:e},n.mode,t,null)).return=n,n.child=t)):(e.memoizedState,i?(l=yl(e,n,l.children,l.fallback,t),i=n.child,a=e.child.memoizedState,i.memoizedState=null===a?gl(t):{baseLanes:a.baseLanes|t,cachePool:null},i.childLanes=e.childLanes&~t,n.memoizedState=hl,l):(t=bl(e,n,l.children,t),n.memoizedState=null,t))}function vl(e,n,t,r){var l=e.mode,a=e.child;return n={mode:"hidden",children:n},0==(1&l)&&null!==a?(a.childLanes=0,a.pendingProps=n):a=Ja(n,l,0,null),t=Ka(t,l,r,null),a.return=e,t.return=e,a.sibling=t,e.child=a,t}function bl(e,n,t,r){var l=e.child;return e=l.sibling,t=$a(l,{mode:"visible",children:t}),0==(1&n.mode)&&(t.lanes=r),t.return=n,t.sibling=null,null!==e&&(null===(r=n.deletions)?(n.deletions=[e],n.flags|=16):r.push(e)),n.child=t}function yl(e,n,t,r,l){var a=n.mode,i=(e=e.child).sibling,u={mode:"hidden",children:t};return 0==(1&a)&&n.child!==e?((t=n.child).childLanes=0,t.pendingProps=u,n.deletions=null):(t=$a(e,u)).subtreeFlags=1835008&e.subtreeFlags,null!==i?r=$a(i,r):(r=Ka(r,a,l,null)).flags|=2,r.return=n,t.return=n,t.sibling=r,n.child=t,r}function Sl(e,n){e.lanes|=n;var t=e.alternate;null!==t&&(t.lanes|=n),xt(e.return,n)}function kl(e,n,t,r,l){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:l}:(a.isBackwards=n,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=t,a.tailMode=l)}function wl(e,n,t){var r=n.pendingProps,l=r.revealOrder,a=r.tail;if(el(e,n,r.children,t),0!=(2&(r=ar.current)))r=1&r|2,n.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Sl(e,t);else if(19===e.tag)Sl(e,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Kn(ar,r),0==(1&n.mode))n.memoizedState=null;else switch(l){case"forwards":for(t=n.child,l=null;null!==t;)null!==(e=t.alternate)&&null===ir(e)&&(l=t),t=t.sibling;null===(t=l)?(l=n.child,n.child=null):(l=t.sibling,t.sibling=null),kl(n,!1,l,t,a);break;case"backwards":for(t=null,l=n.child,n.child=null;null!==l;){if(null!==(e=l.alternate)&&null===ir(e)){n.child=l;break}e=l.sibling,l.sibling=t,t=l,l=e}kl(n,!0,t,null,a);break;case"together":kl(n,!1,null,null,void 0);break;default:n.memoizedState=null}return n.child}function _l(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),ia|=n.lanes,0==(t&n.childLanes))return null;if(null!==e&&n.child!==e.child)throw Error("Resuming work not yet implemented.");if(null!==n.child){for(t=$a(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=$a(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function Tl(e,n){switch(e.tailMode){case"hidden":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function xl(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,r=0;if(n)for(var l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=1835008&l.subtreeFlags,r|=1835008&l.flags,l.return=e,l=l.sibling;else for(l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=t,n}function Pl(e,t,r){var l=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return xl(t),null;case 1:return rt(t.type)&<(),xl(t),null;case 3:return l=t.stateNode,tr(),Gn(et),Gn(Zn),or(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),null!==e&&null!==e.child||l.hydrate||(t.flags|=512),dl(e,t),xl(t),null;case 5:lr(t),r=er(Zt.current);var a=t.type;if(null!==e&&null!=t.stateNode)fl(e,t,a,l,r),e.ref!==t.ref&&(t.flags|=256);else{if(!l){if(null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return xl(t),null}er(Kt.current),e=Qn(),a=Fn(a);var u=hn(null,ln,l,a.validAttributes);n(i[3]).UIManager.createView(e,a.uiViewClassName,r,u),r=new mn(e,a,t),ke.set(e,t),we.set(e,l),cl(r,t,!1,!1),t.stateNode=r,On(r)&&(t.flags|=4),null!==t.ref&&(t.flags|=256)}return xl(t),null;case 6:if(e&&null!=t.stateNode)pl(e,t,e.memoizedProps,l);else{if("string"!=typeof l&&null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");if(e=er(Zt.current),!er(Kt.current).isInAParentText)throw Error("Text strings must be rendered within a component.");r=Qn(),n(i[3]).UIManager.createView(r,"RCTRawText",e,{text:l}),ke.set(r,t),t.stateNode=r}return xl(t),null;case 13:return Gn(ar),l=t.memoizedState,0!=(128&t.flags)?(t.lanes=r,t):(l=null!==l,r=!1,null!==e&&(r=null!==e.memoizedState),l&&!r&&0!=(1&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&ar.current)?0===la&&(la=3):(0!==la&&3!==la||(la=4),null===Zl||0==(268435455&ia)&&0==(268435455&ua)||Ra(Zl,na))),(l||r)&&(t.flags|=4),xl(t),null);case 4:return tr(),dl(e,t),xl(t),null;case 10:return Tt(t.type._context),xl(t),null;case 17:return rt(t.type)&<(),xl(t),null;case 19:if(Gn(ar),null===(a=t.memoizedState))return xl(t),null;if(l=0!=(128&t.flags),null===(u=a.rendering))if(l)Tl(a,!1);else{if(0!==la||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(u=ir(e))){for(t.flags|=128,Tl(a,!1),null!==(e=u.updateQueue)&&(t.updateQueue=e,t.flags|=4),t.subtreeFlags=0,e=r,l=t.child;null!==l;)a=e,(r=l).flags&=1835010,null===(u=r.alternate)?(r.childLanes=0,r.lanes=a,r.child=null,r.subtreeFlags=0,r.memoizedProps=null,r.memoizedState=null,r.updateQueue=null,r.dependencies=null,r.stateNode=null):(r.childLanes=u.childLanes,r.lanes=u.lanes,r.child=u.child,r.subtreeFlags=0,r.deletions=null,r.memoizedProps=u.memoizedProps,r.memoizedState=u.memoizedState,r.updateQueue=u.updateQueue,r.type=u.type,a=u.dependencies,r.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),l=l.sibling;return Kn(ar,1&ar.current|2),t.child}e=e.sibling}null!==a.tail&&n(i[4]).unstable_now()>ca&&(t.flags|=128,l=!0,Tl(a,!1),t.lanes=4194304)}else{if(!l)if(null!==(e=ir(u))){if(t.flags|=128,l=!0,null!==(e=e.updateQueue)&&(t.updateQueue=e,t.flags|=4),Tl(a,!0),null===a.tail&&"hidden"===a.tailMode&&!u.alternate)return xl(t),null}else 2*n(i[4]).unstable_now()-a.renderingStartTime>ca&&1073741824!==r&&(t.flags|=128,l=!0,Tl(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(null!==(e=a.last)?e.sibling=u:t.child=u,a.last=u)}return null!==a.tail?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=n(i[4]).unstable_now(),t.sibling=null,e=ar.current,Kn(ar,l?1&e|2:1&e),t):(xl(t),null);case 22:case 23:return Ca(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&"unstable-defer-without-hiding"!==l.mode&&(t.flags|=4),r&&0==(1073741824&ta)&&0!=(1&t.mode)||xl(t),null}throw Error("Unknown unit of work tag ("+t.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function Rl(e){switch(e.tag){case 1:rt(e.type)&<();var n=e.flags;return 16384&n?(e.flags=-16385&n|128,e):null;case 3:if(tr(),Gn(et),Gn(Zn),or(),0!=(128&(n=e.flags)))throw Error("The root failed to unmount after an error. This is likely a bug in React. Please file an issue.");return e.flags=-16385&n|128,e;case 5:return lr(e),null;case 13:return Gn(ar),16384&(n=e.flags)?(e.flags=-16385&n|128,e):null;case 19:return Gn(ar),null;case 4:return tr(),null;case 10:return Tt(e.type._context),null;case 22:case 23:return Ca(),null;case 24:default:return null}}cl=function(e,n){for(var t=n.child;null!==t;){if(5===t.tag||6===t.tag)e._children.push(t.stateNode);else if(4!==t.tag&&null!==t.child){t.child.return=t,t=t.child;continue}if(t===n)break;for(;null===t.sibling;){if(null===t.return||t.return===n)return;t=t.return}t.sibling.return=t.return,t=t.sibling}},dl=function(){},fl=function(e,n,t,r){e.memoizedProps!==r&&(er(Kt.current),n.updateQueue=Dn)&&(n.flags|=4)},pl=function(e,n,t,r){t!==r&&(n.flags|=4)};var El="function"==typeof WeakSet?WeakSet:Set,Cl=null;function Nl(e,n){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){ja(e,n,t)}else t.current=null}var zl=!1;function Il(e,n){for(Cl=n;null!==Cl;)if(n=(e=Cl).child,0!=(516&e.subtreeFlags)&&null!==n)n.return=e,Cl=n;else for(;null!==Cl;){e=Cl;try{var t=e.alternate;if(0!=(512&e.flags))switch(e.tag){case 0:case 11:case 15:break;case 1:if(null!==t){var r=t.memoizedProps,l=t.memoizedState,a=e.stateNode,i=a.getSnapshotBeforeUpdate(e.elementType===e.type?r:bt(e.type,r),l);a.__reactInternalSnapshotBeforeUpdate=i}break;case 3:break;case 5:case 6:case 4:case 17:break;default:throw 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.")}}catch(n){ja(e,e.return,n)}if(null!==(n=e.sibling)){n.return=e.return,Cl=n;break}Cl=e.return}return t=zl,zl=!1,t}function Ll(e,n,t){var r=n.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var l=r=r.next;do{if((l.tag&e)===e){var a=l.destroy;if(l.destroy=void 0,void 0!==a){var i=n,u=t;try{a()}catch(e){ja(i,u,e)}}}l=l.next}while(l!==r)}}function Ul(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function Ml(e,t){for(var r=null,l=e;;){if(5===l.tag){if(null===r){r=l;var a=l.stateNode;if(t){var u=a.viewConfig,o=hn(null,ln,{style:{display:"none"}},u.validAttributes);n(i[3]).UIManager.updateView(a._nativeTag,u.uiViewClassName,o)}else{a=l.stateNode,o=l.memoizedProps,u=a.viewConfig,o=hn(null,n(i[2])({},o,{style:[o.style,{display:"none"}]}),o,u.validAttributes),n(i[3]).UIManager.updateView(a._nativeTag,u.uiViewClassName,o)}}}else if(6===l.tag){if(null===r)throw Error("Not yet implemented.")}else if((22!==l.tag&&23!==l.tag||null===l.memoizedState||l===e)&&null!==l.child){l.child.return=l,l=l.child;continue}if(l===e)break;for(;null===l.sibling;){if(null===l.return||l.return===e)return;r===l&&(r=null),l=l.return}r===l&&(r=null),l.sibling.return=l.return,l=l.sibling}}function Fl(e,n,t){if(bn&&"function"==typeof bn.onCommitFiberUnmount)try{bn.onCommitFiberUnmount(vn,n)}catch(e){}switch(n.tag){case 0:case 11:case 14:case 15:if(null!==(e=n.updateQueue)&&null!==(e=e.lastEffect)){var r=e=e.next;do{var l=r,a=l.destroy;if(l=l.tag,void 0!==a&&0!=(2&l)){l=n;var i=t;try{a()}catch(e){ja(l,i,e)}}r=r.next}while(r!==e)}break;case 1:if(Nl(n,t),"function"==typeof(e=n.stateNode).componentWillUnmount)try{e.props=n.memoizedProps,e.state=n.memoizedState,e.componentWillUnmount()}catch(e){ja(n,t,e)}break;case 5:Nl(n,t);break;case 4:jl(e,n,t)}}function Dl(e){var n=e.alternate;null!==n&&(e.alternate=null,Dl(n)),e.child=null,e.deletions=null,e.sibling=null,e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Al(e){return 5===e.tag||3===e.tag||4===e.tag}function Ql(e){e:{for(var n=e.return;null!==n;){if(Al(n))break e;n=n.return}throw Error("Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.")}var t=n;switch(n=t.stateNode,t.tag){case 5:var r=!1;break;case 3:case 4:n=n.containerInfo,r=!0;break;default:throw Error("Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.")}32&t.flags&&(t.flags&=-33);e:n:for(t=e;;){for(;null===t.sibling;){if(null===t.return||Al(t.return)){t=null;break e}t=t.return}for(t.sibling.return=t.return,t=t.sibling;5!==t.tag&&6!==t.tag&&18!==t.tag;){if(2&t.flags)continue n;if(null===t.child||4===t.tag)continue n;t.child.return=t,t=t.child}if(!(2&t.flags)){t=t.stateNode;break e}}r?Hl(e,t,n):Ol(e,t,n)}function Hl(e,t,r){var l=e.tag;if(5===l||6===l)if(e=e.stateNode,t){if("number"==typeof r)throw Error("Container does not support insertBefore operation")}else n(i[3]).UIManager.setChildren(r,["number"==typeof e?e:e._nativeTag]);else if(4!==l&&null!==(e=e.child))for(Hl(e,t,r),e=e.sibling;null!==e;)Hl(e,t,r),e=e.sibling}function Ol(e,t,r){var l=e.tag;if(5===l||6===l)if(e=e.stateNode,t){var a=(l=r._children).indexOf(e);0<=a?(l.splice(a,1),t=l.indexOf(t),l.splice(t,0,e),n(i[3]).UIManager.manageChildren(r._nativeTag,[a],[t],[],[],[])):(t=l.indexOf(t),l.splice(t,0,e),n(i[3]).UIManager.manageChildren(r._nativeTag,[],[],["number"==typeof e?e:e._nativeTag],[t],[]))}else t="number"==typeof e?e:e._nativeTag,0<=(a=(l=r._children).indexOf(e))?(l.splice(a,1),l.push(e),n(i[3]).UIManager.manageChildren(r._nativeTag,[a],[l.length-1],[],[],[])):(l.push(e),n(i[3]).UIManager.manageChildren(r._nativeTag,[],[],[t],[l.length-1],[]));else if(4!==l&&null!==(e=e.child))for(Ol(e,t,r),e=e.sibling;null!==e;)Ol(e,t,r),e=e.sibling}function jl(e,t,r){for(var l,a,u=t,o=!1;;){if(!o){o=u.return;e:for(;;){if(null===o)throw Error("Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.");switch(l=o.stateNode,o.tag){case 5:a=!1;break e;case 3:case 4:l=l.containerInfo,a=!0;break e}o=o.return}o=!0}if(5===u.tag||6===u.tag){e:for(var s=e,c=u,d=r,f=c;;)if(Fl(s,f,d),null!==f.child&&4!==f.tag)f.child.return=f,f=f.child;else{if(f===c)break e;for(;null===f.sibling;){if(null===f.return||f.return===c)break e;f=f.return}f.sibling.return=f.return,f=f.sibling}a?(s=l,Hn(u.stateNode),n(i[3]).UIManager.manageChildren(s,[],[],[],[],[0])):(s=l,Hn(d=u.stateNode),d=(c=s._children).indexOf(d),c.splice(d,1),n(i[3]).UIManager.manageChildren(s._nativeTag,[],[],[],[],[d]))}else if(4===u.tag){if(null!==u.child){l=u.stateNode.containerInfo,a=!0,u.child.return=u,u=u.child;continue}}else if(Fl(e,u,r),null!==u.child){u.child.return=u,u=u.child;continue}if(u===t)break;for(;null===u.sibling;){if(null===u.return||u.return===t)return;4===(u=u.return).tag&&(o=!1)}u.sibling.return=u.return,u=u.sibling}}function Bl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:return void Ll(3,t,t.return);case 1:return;case 5:var r=t.stateNode;if(null!=r){var l=t.memoizedProps;e=null!==e?e.memoizedProps:l;var a=t.updateQueue;t.updateQueue=null,null!==a&&(t=r.viewConfig,we.set(r._nativeTag,l),null!=(l=hn(null,e,l,t.validAttributes))&&n(i[3]).UIManager.updateView(r._nativeTag,t.uiViewClassName,l))}return;case 6:if(null===t.stateNode)throw Error("This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.");return void n(i[3]).UIManager.updateView(t.stateNode,"RCTRawText",{text:t.memoizedProps});case 3:case 12:return;case 13:return null!==t.memoizedState&&(sa=n(i[4]).unstable_now(),Ml(t.child,!0)),void Vl(t);case 19:return void Vl(t);case 17:return;case 22:case 23:return void Ml(t,null!==t.memoizedState)}throw 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.")}function Vl(e){var n=e.updateQueue;if(null!==n){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new El),n.forEach(function(n){var r=Va.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))})}}function Wl(e,n){for(Cl=n;null!==Cl;){var t=(n=Cl).deletions;if(null!==t)for(var r=0;ra&&(a=o),l&=~u}if(l=a,10<(l=(120>(l=n(i[4]).unstable_now()-l)?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*Xl(l/1960))-l)){e.timeoutHandle=jn(Aa.bind(null,e),l);break}Aa(e);break;case 5:Aa(e);break;default:throw Error("Unknown root exit status.")}}return xa(e,n(i[4]).unstable_now()),e.callbackNode===r?Pa.bind(null,e):null}function Ra(e,n){for(n&=~oa,n&=~ua,e.suspendedLanes|=n,e.pingedLanes&=~n,e=e.expirationTimes;0 component higher in the tree to provide a loading indicator or placeholder to display.")}5!==la&&(la=2),o=qr(o,u),p=i;do{switch(p.tag){case 3:a=o,p.flags|=16384,n&=-n,p.lanes|=n,Mt(p,Gr(p,a,n));break e;case 1:a=o;var w=p.type,_=p.stateNode;if(0==(128&p.flags)&&("function"==typeof w.getDerivedStateFromError||null!==_&&"function"==typeof _.componentDidCatch&&(null===pa||!pa.has(_)))){p.flags|=16384,n&=-n,p.lanes|=n,Mt(p,Kr(p,a,n));break e}}p=p.return}while(null!==p)}Da(t)}catch(e){n=e,ea===t&&null!==t&&(ea=t=t.return);continue}break}}function Ia(){var e=$l.current;return $l.current=Br,null===e?Br:e}function La(e,n){var t=Jl;Jl|=8;var r=Ia();for(Zl===e&&na===n||Na(e,n);;)try{Ua();break}catch(n){za(e,n)}if(_t(),Jl=t,$l.current=r,null!==ea)throw Error("Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.");return Zl=null,na=0,la}function Ua(){for(;null!==ea;)Fa(ea)}function Ma(){for(;null!==ea&&!n(i[4]).unstable_shouldYield();)Fa(ea)}function Fa(e){var n=ql(e.alternate,e,ta);e.memoizedProps=e.pendingProps,null===n?Da(e):ea=n,Gl.current=null}function Da(e){var n=e;do{var t=n.alternate;if(e=n.return,0==(8192&n.flags)){if(null!==(t=Pl(t,n,ta)))return void(ea=t)}else{if(null!==(t=Rl(n)))return t.flags&=8191,void(ea=t);null!==e&&(e.flags|=8192,e.subtreeFlags=0,e.deletions=null)}if(null!==(n=n.sibling))return void(ea=n);ea=n=e}while(null!==n);0===la&&(la=5)}function Aa(e){var n=Ln,t=Kl.transition;try{Kl.transition=0,Ln=1,Qa(e,n)}finally{Kl.transition=t,Ln=n}return null}function Qa(e,t){do{Ha()}while(null!==ga);if(0!=(24&Jl))throw Error("Should not already be working.");var r=e.finishedWork,l=e.finishedLanes;if(null===r)return null;if(e.finishedWork=null,e.finishedLanes=0,r===e.current)throw Error("Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.");e.callbackNode=null,e.callbackPriority=0;var a=r.lanes|r.childLanes;if(En(e,a),e===Zl&&(ea=Zl=null,na=0),0==(1040&r.subtreeFlags)&&0==(1040&r.flags)||ha||(ha=!0,n(i[4]).unstable_scheduleCallback(n(i[4]).unstable_NormalPriority,function(){return Ha(),null})),a=0!=(8054&r.flags),0!=(8054&r.subtreeFlags)||a){a=Kl.transition,Kl.transition=0;var u=Ln;Ln=1;var o=Jl;Jl|=16,Gl.current=null,Il(e,r),Wl(e,r),e.current=r,Yl(r),n(i[4]).unstable_requestPaint(),Jl=o,Ln=u,Kl.transition=a}else e.current=r;if(ha&&(ha=!1,ga=e,ma=l),0===(a=e.pendingLanes)&&(pa=null),0!=(1&a)?e===ba?va++:(va=0,ba=e):va=0,yn(r.stateNode),xa(e,n(i[4]).unstable_now()),da)throw da=!1,e=fa,fa=null,e;return 0!=(4&Jl)?null:(0!=(1&ma)&&0!==e.tag&&Ha(),ft(),null)}function Ha(){if(null!==ga){var e=Un(ma),n=Kl.transition,t=Ln;try{if(Kl.transition=0,Ln=16>e?16:e,null===ga)var r=!1;else{if(e=ga,ga=null,ma=0,0!=(24&Jl))throw Error("Cannot flush passive effects while already rendering.");var l=Jl;for(Jl|=16,Cl=e.current;null!==Cl;){var a=Cl,i=a.child;if(0!=(16&Cl.flags)){var u=a.deletions;if(null!==u){for(var o=0;on(i[4]).unstable_now()-sa?Na(e,0):oa|=r),xa(e,t)}function Va(e,n){var t=e.stateNode;null!==t&&t.delete(n),0===(n=0)&&(0==(1&e.mode)?n=1:(n=kn,0==(130023424&(kn<<=1))&&(kn=4194304))),t=ka(),null!==(e=Ta(e,n))&&(Rn(e,n,t),xa(e,t))}function Wa(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ya(e,n,t,r){return new Wa(e,n,t,r)}function qa(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Xa(e){if("function"==typeof e)return qa(e)?1:0;if(void 0!==e&&null!==e){if((e=e.$$typeof)===Qe)return 11;if(e===je)return 14}return 2}function $a(e,n){var t=e.alternate;return null===t?((t=Ya(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=1835008&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function Ga(e,n,t,r,l,a){var i=2;if(r=e,"function"==typeof e)qa(e)&&(i=1);else if("string"==typeof e)i=5;else e:switch(e){case Ue:return Ka(t.children,l,a,n);case Ve:i=8,l|=4;break;case Me:i=8,l|=8;break;case Fe:return(e=Ya(12,t,n,2|l)).elementType=Fe,e.lanes=a,e;case He:return(e=Ya(13,t,n,l)).elementType=He,e.lanes=a,e;case Oe:return(e=Ya(19,t,n,l)).elementType=Oe,e.lanes=a,e;case We:return Ja(t,l,a,n);case Ye:return(e=Ya(23,t,n,l)).elementType=Ye,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case De:i=10;break e;case Ae:i=9;break e;case Qe:i=11;break e;case je:i=14;break e;case Be:i=16,r=null;break e}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(null==e?e:typeof e)+".")}return(n=Ya(i,t,n,l)).elementType=e,n.type=r,n.lanes=a,n}function Ka(e,n,t,r){return(e=Ya(7,e,r,n)).lanes=t,e}function Ja(e,n,t,r){return(e=Ya(22,e,r,n)).elementType=We,e.lanes=t,e}function Za(e,n,t){return(e=Ya(6,e,null,n)).lanes=t,e}function ei(e,n,t){return(n=Ya(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function ni(e,n,t){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=t,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Pn(0),this.expirationTimes=Pn(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Pn(0)}function ti(e,n,t){var r=3=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function n(t,n){if(t){if("string"==typeof t)return o(t,n);var u=Object.prototype.toString.call(t).slice(8,-1);return"Object"===u&&t.constructor&&(u=t.constructor.name),"Map"===u||"Set"===u?Array.from(t):"Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u)?o(t,n):void 0}}function o(t,n){(null==n||n>t.length)&&(n=t.length);for(var o=0,u=new Array(n);o|\/|[a-z]:\\|\\\\).*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,u=/\((\S*)(?::(\d+))(?::(\d+))\)/;function t(t){var o=l.exec(t);if(!o)return null;var c=o[2]&&0===o[2].indexOf('native'),s=o[2]&&0===o[2].indexOf('eval'),v=u.exec(o[2]);return s&&null!=v&&(o[2]=v[1],o[3]=v[2],o[4]=v[3]),{file:c?null:o[2],methodName:o[1]||n,arguments:c?[o[2]]:[],lineNumber:o[3]?+o[3]:null,column:o[4]?+o[4]:null}}var o=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:file|ms-appx|https?|webpack|blob):.*?):(\d+)(?::(\d+))?\)?\s*$/i;function c(l){var u=o.exec(l);return u?{file:u[2],methodName:u[1]||n,arguments:[],lineNumber:+u[3],column:u[4]?+u[4]:null}:null}var s=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|\[native).*?|[^@]*bundle)(?::(\d+))?(?::(\d+))?\s*$/i,v=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i;function f(l){var u=s.exec(l);if(!u)return null;var t=u[3]&&u[3].indexOf(' > eval')>-1,o=v.exec(u[3]);return t&&null!=o&&(u[3]=o[1],u[4]=o[2],u[5]=null),{file:u[3],methodName:u[1]||n,arguments:u[2]?u[2].split(','):[],lineNumber:u[4]?+u[4]:null,column:u[5]?+u[5]:null}}var b=/^\s*(?:([^@]*)(?:\((.*?)\))?@)?(\S.*?):(\d+)(?::(\d+))?\s*$/i;function p(l){var u=b.exec(l);return u?{file:u[3],methodName:u[1]||n,arguments:[],lineNumber:+u[4],column:u[5]?+u[5]:null}:null}var x=/^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i;function h(l){var u=x.exec(l);return u?{file:u[2],methodName:u[1]||n,arguments:[],lineNumber:+u[3],column:u[4]?+u[4]:null}:null}e.parse=function(n){return n.split('\n').reduce(function(n,l){var u=t(l)||c(l)||f(l)||h(l)||p(l);return u&&n.push(u),n},[])}},471,[]); +__d(function(g,r,_i,a,m,e,d){'use strict';var t=/^ {4}at (.+?)(?: \((native)\)?| \((address at )?(.*?):(\d+):(\d+)\))$/,n=/^ {4}... skipping (\d+) frames$/;function s(s){var i=s.match(t);if(i)return{type:'FRAME',functionName:i[1],location:'native'===i[2]?{type:'NATIVE'}:'address at '===i[3]?{type:'BYTECODE',sourceUrl:i[4],line1Based:Number.parseInt(i[5],10),virtualOffset0Based:Number.parseInt(i[6],10)}:{type:'SOURCE',sourceUrl:i[4],line1Based:Number.parseInt(i[5],10),column1Based:Number.parseInt(i[6],10)}};var u=s.match(n);return u?{type:'SKIPPED',count:Number.parseInt(u[1],10)}:void 0}m.exports=function(t){for(var n=t.split(/\n/),i=[],u=-1,p=0;p-1}m.exports={isNativeFunction:t,hasNativeConstructor:function(n,o){var c=Object.getPrototypeOf(n).constructor;return c.name===o&&t(c)}}},481,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var l,n,t=!0===(null==(l=g.HermesInternal)?void 0:null==l.hasPromise?void 0:l.hasPromise())&&!0===(null==(n=g.HermesInternal)?void 0:null==n.useEngineQueue?void 0:n.useEngineQueue()),u=r(d[0]).isNativeFunction(Promise)||t;if(!g.RN$Bridgeless){var o=function(l){r(d[1]).polyfillGlobal(l,function(){return r(d[2])[l]})};o('setTimeout'),o('clearTimeout'),o('setInterval'),o('clearInterval'),o('requestAnimationFrame'),o('cancelAnimationFrame'),o('requestIdleCallback'),o('cancelIdleCallback')}u?(r(d[1]).polyfillGlobal('setImmediate',function(){return r(d[3]).setImmediate}),r(d[1]).polyfillGlobal('clearImmediate',function(){return r(d[3]).clearImmediate})):g.RN$Bridgeless||(r(d[1]).polyfillGlobal('setImmediate',function(){return r(d[2]).queueReactNativeMicrotask}),r(d[1]).polyfillGlobal('clearImmediate',function(){return r(d[2]).clearReactNativeMicrotask})),t?r(d[1]).polyfillGlobal('queueMicrotask',function(){var l;return null==(l=g.HermesInternal)?void 0:l.enqueueJob}):r(d[1]).polyfillGlobal('queueMicrotask',function(){return r(d[4]).default})},482,[481,474,483,485,486]); +__d(function(g,r,_i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=16.666666666666668,n=[],i=[],l=[],o=[],c=[],u={},f=1,s=null,v=!1;function h(){var e=l.indexOf(null);return-1===e&&(e=l.length),e}function T(e,t){var o=f++,c=h();return l[c]=o,n[c]=e,i[c]=t,o}function k(e,o,c){e>f&&console.warn('Tried to call timer with ID %s but no such timer exists.',e);var u=l.indexOf(e);if(-1!==u){var v=i[u],h=n[u];if(h&&v){'setInterval'!==v&&p(u);try{'setTimeout'===v||'setInterval'===v||'queueReactNativeMicrotask'===v?h():'requestAnimationFrame'===v?h(g.performance.now()):'requestIdleCallback'===v?h({timeRemaining:function(){return Math.max(0,t-(g.performance.now()-o))},didTimeout:!!c}):console.error('Tried to call a callback with invalid type: '+v)}catch(e){s?s.push(e):s=[e]}}else console.error('No callback found for timerID '+e)}}function w(){if(0===o.length)return!1;var e=o;o=[];for(var t=0;t0}function p(e){l[e]=null,n[e]=null,i[e]=null}function N(e){if(null!=e){var t=l.indexOf(e);if(-1!==t){var n=i[t];p(t),'queueReactNativeMicrotask'!==n&&'requestIdleCallback'!==n&&M(e)}}}var b,I={setTimeout:function(e,t){for(var n=arguments.length,i=new Array(n>2?n-2:0),l=2;l2?n-2:0),l=2;l1?t-1:0),i=1;i-1&&(c.splice(e,1),k(i,g.performance.now(),!0)),delete u[i],0===c.length&&R(!1)},n);u[i]=l}return i},cancelIdleCallback:function(e){N(e);var t=c.indexOf(e);-1!==t&&c.splice(t,1);var n=u[e];n&&(I.clearTimeout(n),delete u[e]),0===c.length&&R(!1)},clearTimeout:function(e){N(e)},clearInterval:function(e){N(e)},clearReactNativeMicrotask:function(e){N(e);var t=o.indexOf(e);-1!==t&&o.splice(t,1)},cancelAnimationFrame:function(e){N(e)},callTimers:function(e){r(d[2])(0!==e.length,'Cannot call `callTimers` with an empty list of IDs.'),s=null;for(var t=0;t1)for(var i=1;i0){var n=c;c=[];for(var i=0;i1?u-1:0),c=1;c=0,loaded:t,total:s})}},{key:"__didCompleteResponse",value:function(e,t,s){e===this._requestId&&(t&&(''!==this._responseType&&'text'!==this._responseType||(this._response=t),this._hasError=!0,s&&(this._timedOut=!0)),this._clearSubscriptions(),this._requestId=null,this.setReadyState(this.DONE),t?E._interceptor&&E._interceptor.loadingFailed(e,t):E._interceptor&&E._interceptor.loadingFinished(e,this._response.length))}},{key:"_clearSubscriptions",value:function(){(this._subscriptions||[]).forEach(function(e){e&&e.remove()}),this._subscriptions=[]}},{key:"getAllResponseHeaders",value:function(){if(!this.responseHeaders)return null;var e=this.responseHeaders||{};return Object.keys(e).map(function(t){return t+': '+e[t]}).join('\r\n')}},{key:"getResponseHeader",value:function(e){var t=this._lowerCaseResponseHeaders[e.toLowerCase()];return void 0!==t?t:null}},{key:"setRequestHeader",value:function(e,t){if(this.readyState!==this.OPENED)throw new Error('Request has not been opened');this._headers[e.toLowerCase()]=String(t)}},{key:"setTrackingName",value:function(e){return this._trackingName=e,this}},{key:"setPerformanceLogger",value:function(e){return this._performanceLogger=e,this}},{key:"open",value:function(e,t,s){if(this.readyState!==this.UNSENT)throw new Error('Cannot open, already sending');if(void 0!==s&&!s)throw new Error('Synchronous http requests are not supported');if(!t)throw new Error('Cannot load an empty url');this._method=e.toUpperCase(),this._url=t,this._aborted=!1,this.setReadyState(this.OPENED)}},{key:"send",value:function(t){var s=this;if(this.readyState!==this.OPENED)throw new Error('Request has not been opened');if(this._sent)throw new Error('Request has already been sent');this._sent=!0;var n=this._incrementalEvents||!!this.onreadystatechange||!!this.onprogress;this._subscriptions.push(r(d[13]).addListener('didSendNetworkData',function(t){return s.__didUploadProgress.apply(s,(0,e.default)(t))})),this._subscriptions.push(r(d[13]).addListener('didReceiveNetworkResponse',function(t){return s.__didReceiveResponse.apply(s,(0,e.default)(t))})),this._subscriptions.push(r(d[13]).addListener('didReceiveNetworkData',function(t){return s.__didReceiveData.apply(s,(0,e.default)(t))})),this._subscriptions.push(r(d[13]).addListener('didReceiveNetworkIncrementalData',function(t){return s.__didReceiveIncrementalData.apply(s,(0,e.default)(t))})),this._subscriptions.push(r(d[13]).addListener('didReceiveNetworkDataProgress',function(t){return s.__didReceiveDataProgress.apply(s,(0,e.default)(t))})),this._subscriptions.push(r(d[13]).addListener('didCompleteNetworkResponse',function(t){return s.__didCompleteResponse.apply(s,(0,e.default)(t))}));var o='text';'arraybuffer'===this._responseType&&(o='base64'),'blob'===this._responseType&&(o='blob');var h;h='unknown'!==s._trackingName?s._trackingName:s._url,s._perfKey='network_XMLHttpRequest_'+String(h),s._performanceLogger.startTimespan(s._perfKey),r(d[11])(s._method,'XMLHttpRequest method needs to be defined (%s).',h),r(d[11])(s._url,'XMLHttpRequest URL needs to be defined (%s).',h),r(d[13]).sendRequest(s._method,s._trackingName,s._url,s._headers,t,o,n,s.timeout,s.__didCreateRequest.bind(s),s.withCredentials)}},{key:"abort",value:function(){this._aborted=!0,this._requestId&&r(d[13]).abortRequest(this._requestId),this.readyState===this.UNSENT||this.readyState===this.OPENED&&!this._sent||this.readyState===this.DONE||(this._reset(),this.setReadyState(this.DONE)),this._reset()}},{key:"setResponseHeaders",value:function(e){this.responseHeaders=e||null;var t=e||{};this._lowerCaseResponseHeaders=Object.keys(t).reduce(function(e,s){return e[s.toLowerCase()]=t[s],e},{})}},{key:"setReadyState",value:function(e){this.readyState=e,this.dispatchEvent({type:'readystatechange'}),e===this.DONE&&(this._aborted?this.dispatchEvent({type:'abort'}):this._hasError?this._timedOut?this.dispatchEvent({type:'timeout'}):this.dispatchEvent({type:'error'}):this.dispatchEvent({type:'load'}),this.dispatchEvent({type:'loadend'}))}},{key:"addEventListener",value:function(e,s){'readystatechange'!==e&&'progress'!==e||(this._incrementalEvents=!0),(0,t.default)((0,u.default)(E.prototype),"addEventListener",this).call(this,e,s)}}],[{key:"setInterceptor",value:function(e){E._interceptor=e}}]),E})(r(d[9]).apply(void 0,(0,e.default)(b)));N.UNSENT=l,N.OPENED=_,N.HEADERS_RECEIVED=f,N.LOADING=y,N.DONE=v,N._interceptor=null,m.exports=N},488,[407,442,489,403,402,417,419,422,491,495,496,425,498,499]); +__d(function(g,r,i,a,m,e,d){function t(){return"undefined"!=typeof Reflect&&Reflect.get?(m.exports=t=Reflect.get,m.exports.__esModule=!0,m.exports.default=m.exports):(m.exports=t=function(t,o,p){var s=r(d[0])(t,o);if(s){var l=Object.getOwnPropertyDescriptor(s,o);return l.get?l.get.call(arguments.length<3?t:p):l.value}},m.exports.__esModule=!0,m.exports.default=m.exports),t.apply(this,arguments)}m.exports=t,m.exports.__esModule=!0,m.exports.default=m.exports},489,[490]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t,o){for(;!Object.prototype.hasOwnProperty.call(t,o)&&null!==(t=r(d[0])(t)););return t},m.exports.__esModule=!0,m.exports.default=m.exports},490,[422]); +__d(function(g,_r,i,a,m,e,d){var t=_r(d[0])(_r(d[1])),l=_r(d[0])(_r(d[2])),r=_r(d[0])(_r(d[3])),o=_r(d[0])(_r(d[4])),n=_r(d[0])(_r(d[5]));var u=(function(){function u(){(0,l.default)(this,u)}return(0,r.default)(u,null,[{key:"createFromParts",value:function(t,l){(0,n.default)(o.default,'NativeBlobModule is available.');var r='xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(t){var l=16*Math.random()|0;return('x'==t?l:3&l|8).toString(16)}),f=t.map(function(t){if(t instanceof ArrayBuffer||g.ArrayBufferView&&t instanceof g.ArrayBufferView)throw new Error("Creating blobs from 'ArrayBuffer' and 'ArrayBufferView' are not supported");return t instanceof _r(d[6])?{data:t.data,type:'blob'}:{data:String(t),type:'string'}}),c=f.reduce(function(t,l){return'string'===l.type?t+g.unescape(encodeURI(l.data)).length:t+l.data.size},0);return o.default.createFromParts(f,r),u.createFromOptions({blobId:r,offset:0,size:c,type:l?l.type:'',lastModified:l?l.lastModified:Date.now()})}},{key:"createFromOptions",value:function(l){return _r(d[7]).register(l.blobId),(0,t.default)(Object.create(_r(d[6]).prototype),{data:null==l.__collector?(0,t.default)({},l,{__collector:(r=l.blobId,null==g.__blobCollectorProvider?null:g.__blobCollectorProvider(r))}):l});var r}},{key:"release",value:function(t){(0,n.default)(o.default,'NativeBlobModule is available.'),_r(d[7]).unregister(t),_r(d[7]).has(t)||o.default.release(t)}},{key:"addNetworkingHandler",value:function(){(0,n.default)(o.default,'NativeBlobModule is available.'),o.default.addNetworkingHandler()}},{key:"addWebSocketHandler",value:function(t){(0,n.default)(o.default,'NativeBlobModule is available.'),o.default.addWebSocketHandler(t)}},{key:"removeWebSocketHandler",value:function(t){(0,n.default)(o.default,'NativeBlobModule is available.'),o.default.removeWebSocketHandler(t)}},{key:"sendOverSocket",value:function(t,l){(0,n.default)(o.default,'NativeBlobModule is available.'),o.default.sendOverSocket(t.data,l)}}]),u})();u.isAvailable=!!o.default,m.exports=u},491,[407,436,402,403,492,425,493,494]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var l={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in n)if("default"!==f&&Object.prototype.hasOwnProperty.call(n,f)){var s=c?Object.getOwnPropertyDescriptor(n,f):null;s&&(s.get||s.set)?Object.defineProperty(l,f,s):l[f]=n[f]}l.default=n,u&&u.set(n,l);return l})(r(d[0])).get('BlobModule'),o=null,u=null;null!=n&&(u={getConstants:function(){return null==o&&(o=n.getConstants()),o},addNetworkingHandler:function(){n.addNetworkingHandler()},addWebSocketHandler:function(t){n.addWebSocketHandler(t)},removeWebSocketHandler:function(t){n.removeWebSocketHandler(t)},sendOverSocket:function(t,o){n.sendOverSocket(t,o)},createFromParts:function(t,o){n.createFromParts(t,o)},release:function(t){n.release(t)}});var l=u;e.default=l},492,[428]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=(function(){function t(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],s=arguments.length>1?arguments[1]:void 0;r(d[0])(this,t);var o=r(d[1]);this.data=o.createFromParts(n,s).data}return r(d[2])(t,[{key:"data",get:function(){if(!this._data)throw new Error('Blob has been closed and is no longer available');return this._data},set:function(t){this._data=t}},{key:"slice",value:function(t,n){var s=r(d[1]),o=this.data,u=o.offset,l=o.size;return'number'==typeof t&&(t>l&&(t=l),u+=t,l-=t,'number'==typeof n&&(n<0&&(n=this.size+n),l=n-t)),s.createFromOptions({blobId:this.data.blobId,offset:u,size:l})}},{key:"close",value:function(){r(d[1]).release(this.data.blobId),this.data=null}},{key:"size",get:function(){return this.data.size}},{key:"type",get:function(){return this.data.type||''}}]),t})();m.exports=t},493,[402,491,403]); +__d(function(g,r,i,a,m,e,d){var n={};m.exports={register:function(t){n[t]?n[t]++:n[t]=1},unregister:function(t){n[t]&&(n[t]--,n[t]<=0&&delete n[t])},has:function(t){return n[t]&&n[t]>0}}},494,[]); +__d(function(g,r,_i,a,m,e,d){'use strict';Object.defineProperty(e,'__esModule',{value:!0});var t=new WeakMap,n=new WeakMap;function o(n){var o=t.get(n);return console.assert(null!=o,"'this' is expected an Event object, but got",n),o}function i(t){null==t.passiveListener?t.event.cancelable&&(t.canceled=!0,"function"==typeof t.event.preventDefault&&t.event.preventDefault()):"undefined"!=typeof console&&"function"==typeof console.error&&console.error("Unable to preventDefault inside passive event listener invocation.",t.passiveListener)}function l(n,o){t.set(this,{eventTarget:n,event:o,eventPhase:2,currentTarget:n,canceled:!1,stopped:!1,immediateStopped:!1,passiveListener:null,timeStamp:o.timeStamp||Date.now()}),Object.defineProperty(this,"isTrusted",{value:!1,enumerable:!0});for(var i=Object.keys(o),l=0;l0){for(var t=new Array(arguments.length),n=0;n1&&void 0!==arguments[1]?arguments[1]:l(),n=arguments.length>2?arguments[2]:void 0;this._closed||null==this._points[t]&&(this._points[t]=s,n&&(this._pointExtras[t]=n))}},{key:"removeExtra",value:function(t){var s=this._extras[t];return delete this._extras[t],s}},{key:"setExtra",value:function(t,s){this._closed||this._extras.hasOwnProperty(t)||(this._extras[t]=s)}},{key:"startTimespan",value:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l(),n=arguments.length>2?arguments[2]:void 0;this._closed||this._timespans[t]||(this._timespans[t]={startTime:s,startExtras:n},u[t]=r(d[4]).beginAsyncEvent(t))}},{key:"stopTimespan",value:function(t){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:l(),n=arguments.length>2?arguments[2]:void 0;if(!this._closed){var o=this._timespans[t];o&&null!=o.startTime&&null==o.endTime&&(o.endExtras=n,o.endTime=s,o.totalTime=o.endTime-(o.startTime||0),null!=u[t]&&(r(d[4]).endAsyncEvent(t,u[t]),delete u[t]))}}}]),t})()},497,[407,436,402,403,439]); +__d(function(g,r,_i,a,m,e,d){'use strict';e.byteLength=function(t){var n=i(t),o=n[0],h=n[1];return 3*(o+h)/4-h},e.toByteArray=function(t){var h,u,c=i(t),A=c[0],C=c[1],y=new o(f(t,A,C)),s=0,v=C>0?A-4:A;for(u=0;u>16&255,y[s++]=h>>8&255,y[s++]=255&h;2===C&&(h=n[t.charCodeAt(u)]<<2|n[t.charCodeAt(u+1)]>>4,y[s++]=255&h);1===C&&(h=n[t.charCodeAt(u)]<<10|n[t.charCodeAt(u+1)]<<4|n[t.charCodeAt(u+2)]>>2,y[s++]=h>>8&255,y[s++]=255&h);return y},e.fromByteArray=function(n){for(var o,h=n.length,u=h%3,c=[],i=0,f=h-u;if?f:i+16383));1===u?(o=n[h-1],c.push(t[o>>2]+t[o<<4&63]+'==')):2===u&&(o=(n[h-2]<<8)+n[h-1],c.push(t[o>>10]+t[o>>4&63]+t[o<<2&63]+'='));return c.join('')};for(var t=[],n=[],o='undefined'!=typeof Uint8Array?Uint8Array:Array,h='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',u=0,c=h.length;u0)throw new Error('Invalid string. Length must be a multiple of 4');var o=t.indexOf('=');return-1===o&&(o=n),[o,o===n?0:4-o%4]}function f(t,n,o){return 3*(n+o)/4-o}function A(n,o,h){for(var u,c,i=[],f=o;f>18&63]+t[c>>12&63]+t[c>>6&63]+t[63&c]);return i.join('')}n['-'.charCodeAt(0)]=62,n['_'.charCodeAt(0)]=63},498,[]); +__d(function(g,r,i,a,m,_e,d){var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),n=r(d[0])(r(d[4])),f=r(d[0])(r(d[5])),o=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),c=r(d[0])(r(d[8])),s=r(d[0])(r(d[9])),v=r(d[0])(r(d[10]));function h(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}function p(t){var e=[];for(var u in t)e.push([u,t[u]]);return e}var y=1;var R=(function(l){(0,n.default)(D,l);var R,k,q=(R=D,k=h(),function(){var t,e=(0,o.default)(R);if(k){var u=(0,o.default)(this).constructor;t=Reflect.construct(e,arguments,u)}else t=e.apply(this,arguments);return(0,f.default)(this,t)});function D(){return(0,e.default)(this,D),q.call(this,'ios'!==v.default.OS?null:c.default)}return(0,u.default)(D,[{key:"sendRequest",value:function(e,u,n,f,o,l,v,h,R,k){var q=(0,s.default)(o);q&&q.formData&&(q.formData=q.formData.map(function(e){return(0,t.default)({},e,{headers:p(e.headers)})}));var D=y++;c.default.sendRequest(e,n,D,p(f),(0,t.default)({},q,{trackingName:u}),l,v,h,k),R(D)}},{key:"abortRequest",value:function(t){c.default.abortRequest(t)}},{key:"clearCookies",value:function(t){c.default.clearCookies(t)}}]),D})(l.default);m.exports=new R},499,[407,436,402,403,417,419,422,500,501,502,426]); +__d(function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),s=(function(){function s(n){(0,t.default)(this,s),'ios'===l.default.OS&&(0,o.default)(null!=n,'`new NativeEventEmitter()` requires a non-null argument.');var u=!!n&&'function'==typeof n.addListener,v=!!n&&'function'==typeof n.removeListeners;n&&u&&v?this._nativeModule=n:null!=n&&(u||console.warn('`new NativeEventEmitter()` was called with a non-null argument without the required `addListener` method.'),v||console.warn('`new NativeEventEmitter()` was called with a non-null argument without the required `removeListeners` method.'))}return(0,n.default)(s,[{key:"addListener",value:function(t,n,l){var o,s=this;null==(o=this._nativeModule)||o.addListener(t);var v=u.default.addListener(t,n,l);return{remove:function(){var t;null!=v&&(null==(t=s._nativeModule)||t.removeListeners(1),v.remove(),v=null)}}}},{key:"removeListener",value:function(t,n){var l;null==(l=this._nativeModule)||l.removeListeners(1),u.default.removeListener(t,n)}},{key:"emit",value:function(t){for(var n=arguments.length,l=new Array(n>1?n-1:0),o=1;o-1};function s(t){if('string'!=typeof t&&(t=String(t)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(t)||''===t)throw new TypeError('Invalid character in header field name: "'+t+'"');return t.toLowerCase()}function h(t){return'string'!=typeof t&&(t=String(t)),t}function f(t){var e={next:function(){var e=t.shift();return{done:void 0===e,value:e}}};return o.iterable&&(e[Symbol.iterator]=function(){return e}),e}function u(t){this.map={},t instanceof u?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 c(t){if(t.bodyUsed)return Promise.reject(new TypeError('Already read'));t.bodyUsed=!0}function y(t){return new Promise(function(e,o){t.onload=function(){e(t.result)},t.onerror=function(){o(t.error)}})}function l(t){var e=new FileReader,o=y(e);return e.readAsArrayBuffer(t),o}function p(t){for(var e=new Uint8Array(t),o=new Array(e.length),n=0;n-1?n:o),this.mode=e.mode||this.mode||null,this.signal=e.signal||this.signal,this.referrer=null,('GET'===this.method||'HEAD'===this.method)&&i)throw new TypeError('Body not allowed for GET or HEAD requests');if(this._initBody(i),!('GET'!==this.method&&'HEAD'!==this.method||'no-store'!==e.cache&&'no-cache'!==e.cache)){var s=/([?&])_=[^&]*/;if(s.test(this.url))this.url=this.url.replace(s,'$1_='+(new Date).getTime());else{this.url+=(/\?/.test(this.url)?'&':'?')+'_='+(new Date).getTime()}}}function E(t){var e=new FormData;return t.trim().split('&').forEach(function(t){if(t){var o=t.split('='),n=o.shift().replace(/\+/g,' '),i=o.join('=').replace(/\+/g,' ');e.append(decodeURIComponent(n),decodeURIComponent(i))}}),e}function T(t,e){if(!(this instanceof T))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');e||(e={}),this.type='default',this.status=void 0===e.status?200:e.status,this.ok=this.status>=200&&this.status<300,this.statusText=void 0===e.statusText?'':''+e.statusText,this.headers=new u(e.headers),this.url=e.url||'',this._initBody(t)}_.prototype.clone=function(){return new _(this,{body:this._bodyInit})},w.call(_.prototype),w.call(T.prototype),T.prototype.clone=function(){return new T(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new u(this.headers),url:this.url})},T.error=function(){var t=new T(null,{status:0,statusText:''});return t.type='error',t};var A=[301,302,303,307,308];T.redirect=function(t,e){if(-1===A.indexOf(e))throw new RangeError('Invalid status code');return new T(null,{status:e,headers:{location:t}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(t,e){this.message=t,this.name=e;var o=Error(t);this.stack=o.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function B(n,i){return new Promise(function(s,f){var c=new _(n,i);if(c.signal&&c.signal.aborted)return f(new t.DOMException('Aborted','AbortError'));var y=new XMLHttpRequest;function l(){y.abort()}y.onload=function(){var t,e,o={status:y.status,statusText:y.statusText,headers:(t=y.getAllResponseHeaders()||'',e=new u,t.replace(/\r?\n[\t ]+/g,' ').split('\r').map(function(t){return 0===t.indexOf('\n')?t.substr(1,t.length):t}).forEach(function(t){var o=t.split(':'),n=o.shift().trim();if(n){var i=o.join(':').trim();e.append(n,i)}}),e)};o.url='responseURL'in y?y.responseURL:o.headers.get('X-Request-URL');var n='response'in y?y.response:y.responseText;setTimeout(function(){s(new T(n,o))},0)},y.onerror=function(){setTimeout(function(){f(new TypeError('Network request failed'))},0)},y.ontimeout=function(){setTimeout(function(){f(new TypeError('Network request failed'))},0)},y.onabort=function(){setTimeout(function(){f(new t.DOMException('Aborted','AbortError'))},0)},y.open(c.method,(function(t){try{return''===t&&e.location.href?e.location.href:t}catch(e){return t}})(c.url),!0),'include'===c.credentials?y.withCredentials=!0:'omit'===c.credentials&&(y.withCredentials=!1),'responseType'in y&&(o.blob?y.responseType='blob':o.arrayBuffer&&c.headers.get('Content-Type')&&-1!==c.headers.get('Content-Type').indexOf('application/octet-stream')&&(y.responseType='arraybuffer')),!i||'object'!=typeof i.headers||i.headers instanceof u?c.headers.forEach(function(t,e){y.setRequestHeader(e,t)}):Object.getOwnPropertyNames(i.headers).forEach(function(t){y.setRequestHeader(t,h(i.headers[t]))}),c.signal&&(c.signal.addEventListener('abort',l),y.onreadystatechange=function(){4===y.readyState&&c.signal.removeEventListener('abort',l)}),y.send(void 0===c._bodyInit?null:c._bodyInit)})}B.polyfill=!0,e.fetch||(e.fetch=B,e.Headers=u,e.Request=_,e.Response=T),t.Headers=u,t.Request=_,t.Response=T,t.fetch=B,Object.defineProperty(t,'__esModule',{value:!0})},'object'==typeof _e&&void 0!==m?e(_e):'function'==typeof define&&define.amd?define(['exports'],e):e(t.WHATWGFetch={})},506,[]); +__d(function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),u=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),f=r(d[0])(r(d[9])),h=r(d[0])(r(d[10])),y=r(d[0])(r(d[11])),b=r(d[0])(r(d[12])),p=r(d[0])(r(d[13])),v=r(d[0])(r(d[14])),_=r(d[0])(r(d[15])),E=r(d[0])(r(d[16])),k=["headers"];function S(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var I=0,N=1,O=2,w=3,C=0,L=(function(_){(0,s.default)(R,_);var L,T,A=(L=R,T=S(),function(){var e,t=(0,u.default)(L);if(T){var n=(0,u.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,o.default)(this,e)});function R(n,s,o){var u;(0,t.default)(this,R),(u=A.call(this)).CONNECTING=I,u.OPEN=N,u.CLOSING=O,u.CLOSED=w,u.readyState=I,u.url=n,'string'==typeof s&&(s=[s]);var c=o||{},l=c.headers,h=void 0===l?{}:l,p=(0,e.default)(c,k);return p&&'string'==typeof p.origin&&(console.warn('Specifying `origin` as a WebSocket connection option is deprecated. Include it under `headers` instead.'),h.origin=p.origin,delete p.origin),Object.keys(p).length>0&&console.warn('Unrecognized WebSocket connection option(s) `'+Object.keys(p).join('`, `')+"`. Did you mean to put these under `headers`?"),Array.isArray(s)||(s=null),u._eventEmitter=new f.default('ios'!==y.default.OS?null:b.default),u._socketId=C++,u._registerEvents(),b.default.connect(n,s,{headers:h},u._socketId),u}return(0,n.default)(R,[{key:"binaryType",get:function(){return this._binaryType},set:function(e){if('blob'!==e&&'arraybuffer'!==e)throw new Error("binaryType must be either 'blob' or 'arraybuffer'");'blob'!==this._binaryType&&'blob'!==e||((0,E.default)(l.default.isAvailable,'Native module BlobModule is required for blob support'),'blob'===e?l.default.addWebSocketHandler(this._socketId):l.default.removeWebSocketHandler(this._socketId)),this._binaryType=e}},{key:"close",value:function(e,t){this.readyState!==this.CLOSING&&this.readyState!==this.CLOSED&&(this.readyState=this.CLOSING,this._close(e,t))}},{key:"send",value:function(e){if(this.readyState===this.CONNECTING)throw new Error('INVALID_STATE_ERR');if(e instanceof c.default)return(0,E.default)(l.default.isAvailable,'Native module BlobModule is required for blob support'),void l.default.sendOverSocket(e,this._socketId);if('string'!=typeof e){if(!(e instanceof ArrayBuffer||ArrayBuffer.isView(e)))throw new Error('Unsupported data type');b.default.sendBinary((0,h.default)(e),this._socketId)}else b.default.send(e,this._socketId)}},{key:"ping",value:function(){if(this.readyState===this.CONNECTING)throw new Error('INVALID_STATE_ERR');b.default.ping(this._socketId)}},{key:"_close",value:function(e,t){var n='number'==typeof e?e:1e3,s='string'==typeof t?t:'';b.default.close(n,s,this._socketId),l.default.isAvailable&&'blob'===this._binaryType&&l.default.removeWebSocketHandler(this._socketId)}},{key:"_unregisterEvents",value:function(){this._subscriptions.forEach(function(e){return e.remove()}),this._subscriptions=[]}},{key:"_registerEvents",value:function(){var e=this;this._subscriptions=[this._eventEmitter.addListener('websocketMessage',function(t){if(t.id===e._socketId){var n=t.data;switch(t.type){case'binary':n=v.default.toByteArray(t.data).buffer;break;case'blob':n=l.default.createFromOptions(t.data)}e.dispatchEvent(new p.default('message',{data:n}))}}),this._eventEmitter.addListener('websocketOpen',function(t){t.id===e._socketId&&(e.readyState=e.OPEN,e.protocol=t.protocol,e.dispatchEvent(new p.default('open')))}),this._eventEmitter.addListener('websocketClosed',function(t){t.id===e._socketId&&(e.readyState=e.CLOSED,e.dispatchEvent(new p.default('close',{code:t.code,reason:t.reason})),e._unregisterEvents(),e.close())}),this._eventEmitter.addListener('websocketFailed',function(t){t.id===e._socketId&&(e.readyState=e.CLOSED,e.dispatchEvent(new p.default('error',{message:t.message})),e.dispatchEvent(new p.default('close',{message:t.message})),e._unregisterEvents(),e.close())})]}}]),R})(_.default.apply(void 0,['close','error','message','open']));L.CONNECTING=I,L.OPEN=N,L.CLOSING=O,L.CLOSED=w,m.exports=L},507,[407,508,402,403,417,419,422,493,491,500,504,426,510,511,498,495,425]); +__d(function(g,r,_i,a,m,e,d){m.exports=function(t,o){if(null==t)return{};var n,l,p=r(d[0])(t,o);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(p[n]=t[n])}return p},m.exports.__esModule=!0,m.exports.default=m.exports},508,[509]); +__d(function(g,r,_i,a,m,e,d){m.exports=function(t,n){if(null==t)return{};var o,u,f={},s=Object.keys(t);for(u=0;u=0||(f[o]=t[o]);return f},m.exports.__esModule=!0,m.exports.default=m.exports},509,[]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).getEnforcing('WebSocketModule');e.default=n},510,[428]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])(function t(s,n){r(d[1])(this,t),this.type=s.toString(),r(d[2])(this,n)});m.exports=t},511,[403,402,436]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(o,e);var n,u,c=(n=o,u=t(),function(){var t,e=r(d[0])(n);if(u){var c=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,c)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function o(t,e,n){var u;return r(d[3])(this,o),r(d[4])(null!=t&&null!=e,'Failed to construct `File`: Must pass both `parts` and `name` arguments.'),(u=c.call(this,t,n)).data.name=e,u}return r(d[5])(o,[{key:"name",get:function(){return r(d[4])(null!=this.data.name,'Files must have a name set.'),this.data.name}},{key:"lastModified",get:function(){return this.data.lastModified||0}}]),o})(r(d[6]));m.exports=e},512,[422,419,417,402,425,403,493]); +__d(function(g,r,i,a,m,_e,d){var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),s=r(d[0])(r(d[5])),u=r(d[0])(r(d[6]));function l(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var c=0,f=1,h=2,y=(function(y){(0,n.default)(b,y);var _,p,v=(_=b,p=l(),function(){var t,e=(0,s.default)(_);if(p){var n=(0,s.default)(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return(0,o.default)(this,t)});function b(){var e;return(0,t.default)(this,b),(e=v.call(this)).EMPTY=c,e.LOADING=f,e.DONE=h,e._aborted=!1,e._subscriptions=[],e._reset(),e}return(0,e.default)(b,[{key:"_reset",value:function(){this._readyState=c,this._error=null,this._result=null}},{key:"_clearSubscriptions",value:function(){this._subscriptions.forEach(function(t){return t.remove()}),this._subscriptions=[]}},{key:"_setReadyState",value:function(t){this._readyState=t,this.dispatchEvent({type:'readystatechange'}),t===h&&(this._aborted?this.dispatchEvent({type:'abort'}):this._error?this.dispatchEvent({type:'error'}):this.dispatchEvent({type:'load'}),this.dispatchEvent({type:'loadend'}))}},{key:"readAsArrayBuffer",value:function(){throw new Error('FileReader.readAsArrayBuffer is not implemented')}},{key:"readAsDataURL",value:function(t){var e=this;if(this._aborted=!1,null==t)throw new TypeError("Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob'");u.default.readAsDataURL(t.data).then(function(t){e._aborted||(e._result=t,e._setReadyState(h))},function(t){e._aborted||(e._error=t,e._setReadyState(h))})}},{key:"readAsText",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'UTF-8';if(this._aborted=!1,null==t)throw new TypeError("Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'");u.default.readAsText(t.data,n).then(function(t){e._aborted||(e._result=t,e._setReadyState(h))},function(t){e._aborted||(e._error=t,e._setReadyState(h))})}},{key:"abort",value:function(){this._aborted=!0,this._readyState!==c&&this._readyState!==h&&(this._reset(),this._setReadyState(h)),this._reset()}},{key:"readyState",get:function(){return this._readyState}},{key:"error",get:function(){return this._error}},{key:"result",get:function(){return this._result}}]),b})(r(d[7]).apply(void 0,['abort','error','load','loadstart','loadend','progress']));y.EMPTY=c,y.LOADING=f,y.DONE=h,m.exports=y},513,[407,402,403,417,419,422,514,495]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).getEnforcing('FileReaderModule');e.default=n},514,[428]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.URLSearchParams=e.URL=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),s=null;if(o.default&&'string'==typeof o.default.getConstants().BLOB_URI_SCHEME){var u=o.default.getConstants();s=u.BLOB_URI_SCHEME+':','string'==typeof u.BLOB_URI_HOST&&(s+="//"+u.BLOB_URI_HOST+"/")}var h=(function(o){function s(n){var o=this;(0,t.default)(this,s),this._searchParams=[],'object'==typeof n&&Object.keys(n).forEach(function(t){return o.append(t,n[t])})}return(0,n.default)(s,[{key:"append",value:function(t,n){this._searchParams.push([t,n])}},{key:"delete",value:function(t){throw new Error('URLSearchParams.delete is not implemented')}},{key:"get",value:function(t){throw new Error('URLSearchParams.get is not implemented')}},{key:"getAll",value:function(t){throw new Error('URLSearchParams.getAll is not implemented')}},{key:"has",value:function(t){throw new Error('URLSearchParams.has is not implemented')}},{key:"set",value:function(t,n){throw new Error('URLSearchParams.set is not implemented')}},{key:"sort",value:function(){throw new Error('URLSearchParams.sort is not implemented')}},{key:o,value:function(){return this._searchParams[Symbol.iterator]()}},{key:"toString",value:function(){if(0===this._searchParams.length)return'';var t=this._searchParams.length-1;return this._searchParams.reduce(function(n,o,s){return n+o.join('=')+(s===t?'':'&')},'')}}]),s})(Symbol.iterator);function f(t){return/^(?:(?:(?:https?|ftp):)?\/\/)(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)*(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/.test(t)}e.URLSearchParams=h;var l=(function(){function o(n,s){(0,t.default)(this,o),this._searchParamsInstance=null;var u=null;if(!s||f(n))this._url=n,this._url.endsWith('/')||(this._url+='/');else{if('string'==typeof s){if(!f(u=s))throw new TypeError("Invalid base URL: "+u)}else'object'==typeof s&&(u=s.toString());u.endsWith('/')&&(u=u.slice(0,u.length-1)),n.startsWith('/')||(n="/"+n),u.endsWith(n)&&(n=''),this._url=""+u+n}}return(0,n.default)(o,[{key:"hash",get:function(){throw new Error('URL.hash is not implemented')}},{key:"host",get:function(){throw new Error('URL.host is not implemented')}},{key:"hostname",get:function(){throw new Error('URL.hostname is not implemented')}},{key:"href",get:function(){return this.toString()}},{key:"origin",get:function(){throw new Error('URL.origin is not implemented')}},{key:"password",get:function(){throw new Error('URL.password is not implemented')}},{key:"pathname",get:function(){throw new Error('URL.pathname not implemented')}},{key:"port",get:function(){throw new Error('URL.port is not implemented')}},{key:"protocol",get:function(){throw new Error('URL.protocol is not implemented')}},{key:"search",get:function(){throw new Error('URL.search is not implemented')}},{key:"searchParams",get:function(){return null==this._searchParamsInstance&&(this._searchParamsInstance=new h),this._searchParamsInstance}},{key:"toJSON",value:function(){return this.toString()}},{key:"toString",value:function(){if(null===this._searchParamsInstance)return this._url;var t=this._url.indexOf('?')>-1?'&':'?';return this._url+t+this._searchParamsInstance.toString()}},{key:"username",get:function(){throw new Error('URL.username is not implemented')}}],[{key:"createObjectURL",value:function(t){if(null===s)throw new Error('Cannot create URL for blob!');return""+s+t.data.blobId+"?offset="+t.data.offset+"&size="+t.size}},{key:"revokeObjectURL",value:function(t){}}]),o})();e.URL=l},515,[407,402,403,492]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}Object.defineProperty(_e,'__esModule',{value:!0});var e=(function(e){r(d[2])(c,e);var n,l,u=(n=c,l=t(),function(){var t,e=r(d[0])(n);if(l){var o=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,o)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function c(){throw r(d[3])(this,c),u.call(this),new TypeError("AbortSignal cannot be constructed directly")}return r(d[4])(c,[{key:"aborted",get:function(){var t=o.get(this);if("boolean"!=typeof t)throw new TypeError("Expected 'this' to be an 'AbortSignal' object, but got "+(null===this?"null":typeof this));return t}}]),c})(r(d[5]).EventTarget);r(d[5]).defineEventAttribute(e.prototype,"abort");var o=new WeakMap;Object.defineProperties(e.prototype,{aborted:{enumerable:!0}}),"function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag&&Object.defineProperty(e.prototype,Symbol.toStringTag,{configurable:!0,value:"AbortSignal"});var n=(function(){function t(){var n;r(d[3])(this,t),l.set(this,(n=Object.create(e.prototype),r(d[5]).EventTarget.call(n),o.set(n,!1),n))}return r(d[4])(t,[{key:"signal",get:function(){return u(this)}},{key:"abort",value:function(){var t;t=u(this),!1===o.get(t)&&(o.set(t,!0),t.dispatchEvent({type:"abort"}))}}]),t})(),l=new WeakMap;function u(t){var e=l.get(t);if(null==e)throw new TypeError("Expected 'this' to be an 'AbortController' object, but got "+(null===t?"null":typeof t));return e}Object.defineProperties(n.prototype,{signal:{enumerable:!0},abort:{enumerable:!0}}),"function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag&&Object.defineProperty(n.prototype,Symbol.toStringTag,{configurable:!0,value:"AbortController"}),_e.AbortController=n,_e.AbortSignal=e,_e.default=n,m.exports=n,m.exports.AbortController=m.exports.default=n,m.exports.AbortSignal=e},516,[422,419,417,402,403,495]); +__d(function(g,r,i,a,m,e,d){'use strict';g.alert||(g.alert=function(t){r(d[0]).alert('Alert',''+t)})},517,[518]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),l=(function(){function l(){(0,t.default)(this,l)}return(0,n.default)(l,null,[{key:"alert",value:function(t,n,s,u){if('ios'===o.default.OS)l.prompt(t,n,s,'default');else if('android'===o.default.OS){var c=r(d[5]).default;if(!c)return;var f=c.getConstants(),v={title:t||'',message:n||'',cancelable:!1};u&&u.cancelable&&(v.cancelable=u.cancelable);var p=s?s.slice(0,3):[{text:"OK"}],b=p.pop(),y=p.pop(),h=p.pop();h&&(v.buttonNeutral=h.text||''),y&&(v.buttonNegative=y.text||''),b&&(v.buttonPositive=b.text||"OK");c.showAlert(v,function(t){return console.warn(t)},function(t,n){t===f.buttonClicked?n===f.buttonNeutral?h.onPress&&h.onPress():n===f.buttonNegative?y.onPress&&y.onPress():n===f.buttonPositive&&b.onPress&&b.onPress():t===f.dismissed&&u&&u.onDismiss&&u.onDismiss()})}}},{key:"prompt",value:function(t,n,l){var u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:'plain-text',c=arguments.length>4?arguments[4]:void 0,f=arguments.length>5?arguments[5]:void 0;if('ios'===o.default.OS){var v,p,b=[],y=[];'function'==typeof l?b=[l]:Array.isArray(l)&&l.forEach(function(t,n){if(b[n]=t.onPress,'cancel'===t.style?v=String(n):'destructive'===t.style&&(p=String(n)),t.text||n<(l||[]).length-1){var o={};o[n]=t.text||'',y.push(o)}}),s.default.alertWithArgs({title:t||'',message:n||void 0,buttons:y,type:u||void 0,defaultValue:c,cancelButtonKey:v,destructiveButtonKey:p,keyboardType:f},function(t,n){var o=b[t];o&&o(n)})}}}]),l})();m.exports=l},518,[407,402,403,426,519,520]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));function n(){}m.exports={alertWithArgs:function(f,o){t.default&&t.default.showAlert(f,n,o||n)}}},519,[407,520]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('DialogManagerAndroid');e.default=n},520,[428]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=g.navigator;void 0===t&&(g.navigator=t={}),r(d[0]).polyfillObjectProperty(t,'product',function(){return'ReactNative'})},521,[474]); +__d(function(g,r,i,a,m,e,d){'use strict';var n;if(g.RN$Bridgeless&&g.RN$registerCallableModule)n=g.RN$registerCallableModule;else{var t=r(d[0]);n=function(n,u){return t.registerLazyCallableModule(n,u)}}n('Systrace',function(){return r(d[1])}),n('JSTimers',function(){return r(d[2])}),n('HeapCapture',function(){return r(d[3])}),n('SamplingProfiler',function(){return r(d[4])}),n('RCTLog',function(){return r(d[5])}),n('RCTDeviceEventEmitter',function(){return r(d[6]).default}),n('RCTNativeAppEventEmitter',function(){return r(d[7])}),n('GlobalPerformanceLogger',function(){return r(d[8])}),n('JSDevSupportModule',function(){return r(d[9])}),n('HMRClient',function(){return r(d[10])})},522,[437,439,483,523,525,527,413,528,496,529,531]); +__d(function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t={captureHeap:function(t){var p=null;try{g.nativeCaptureHeap(t),console.log('HeapCapture.captureHeap succeeded: '+t)}catch(e){console.log('HeapCapture.captureHeap error: '+e.toString()),p=e.toString()}e.default&&e.default.captureComplete(t,p)}};m.exports=t},523,[407,524]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var u=new WeakMap,o=new WeakMap;return(t=function(t){return t?o:u})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,u){if(!u&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var o=t(u);if(o&&o.has(n))return o.get(n);var f={},p=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var l=p?Object.getOwnPropertyDescriptor(n,c):null;l&&(l.get||l.set)?Object.defineProperty(f,c,l):f[c]=n[c]}f.default=n,o&&o.set(n,f);return f})(r(d[0])).get('JSCHeapCapture');e.default=n},524,[428]); +__d(function(g,r,i,a,m,_e,d){'use strict';var o={poke:function(o){var e=null,l=null;try{null===(l=g.pokeSamplingProfiler())?console.log('The JSC Sampling Profiler has started'):console.log('The JSC Sampling Profiler has stopped')}catch(o){console.log('Error occurred when restarting Sampling Profiler: '+o.toString()),e=o.toString()}var n=r(d[0]).default;n&&n.operationComplete(o,l,e)}};m.exports=o},525,[526]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in n)if("default"!==p&&Object.prototype.hasOwnProperty.call(n,p)){var c=l?Object.getOwnPropertyDescriptor(n,p):null;c&&(c.get||c.set)?Object.defineProperty(u,p,c):u[p]=n[p]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).get('JSCSamplingProfiler');e.default=n},526,[428]); +__d(function(g,r,i,a,m,e,d){'use strict';var o={log:'log',info:'info',warn:'warn',error:'error',fatal:'error'},n=null,l={logIfNoNativeHook:function(o){for(var t=arguments.length,f=new Array(t>1?t-1:0),c=1;c1?f-1:0),v=1;v1?t-1:0),f=1;f>>8)>>>0,t|=0)}}},546,[547,549]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));m.exports=function(n){if('object'==typeof n&&null!=n&&null!=(0,r(d[2]).normalizeColorObject)(n))return n;if('string'==typeof n||'number'==typeof n)return(0,t.default)(n)}},547,[407,548,549]); +__d(function(_g,_r,i,a,m,e,d){'use strict';function r(r,l,n){return n<0&&(n+=1),n>1&&(n-=1),n<.16666666666666666?r+6*(l-r)*n:n<.5?l:n<.6666666666666666?r+(l-r)*(.6666666666666666-n)*6:r}function l(l,n,t){var o=t<.5?t*(1+n):t+n-t*n,u=2*t-o,g=r(u,o,l+.3333333333333333),s=r(u,o,l),h=r(u,o,l-.3333333333333333);return Math.round(255*g)<<24|Math.round(255*s)<<16|Math.round(255*h)<<8}var n,t='[-+]?\\d*\\.?\\d+',o="[-+]?\\d*\\.?\\d+%";function u(){for(var r=arguments.length,l=new Array(r),n=0;n255?255:l}function s(r){return(parseFloat(r)%360+360)%360/360}function h(r){var l=parseFloat(r);return l<0?0:l>1?255:Math.round(255*l)}function c(r){var l=parseFloat(r);return l<0?0:l>100?1:l/100}var p={transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199};m.exports=function(r){var b,y=(void 0===n&&(n={rgb:new RegExp('rgb'+u(t,t,t)),rgba:new RegExp('rgba'+u(t,t,t,t)),hsl:new RegExp('hsl'+u(t,o,o)),hsla:new RegExp('hsla'+u(t,o,o,t)),hex3:/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex4:/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#([0-9a-fA-F]{6})$/,hex8:/^#([0-9a-fA-F]{8})$/}),n);return'number'==typeof r?r>>>0===r&&r>=0&&r<=4294967295?r:null:'string'!=typeof r?null:(b=y.hex6.exec(r))?parseInt(b[1]+'ff',16)>>>0:p.hasOwnProperty(r)?p[r]:(b=y.rgb.exec(r))?(g(b[1])<<24|g(b[2])<<16|g(b[3])<<8|255)>>>0:(b=y.rgba.exec(r))?(g(b[1])<<24|g(b[2])<<16|g(b[3])<<8|h(b[4]))>>>0:(b=y.hex3.exec(r))?parseInt(b[1]+b[1]+b[2]+b[2]+b[3]+b[3]+'ff',16)>>>0:(b=y.hex8.exec(r))?parseInt(b[1],16)>>>0:(b=y.hex4.exec(r))?parseInt(b[1]+b[1]+b[2]+b[2]+b[3]+b[3]+b[4]+b[4],16)>>>0:(b=y.hsl.exec(r))?(255|l(s(b[1]),c(b[2]),c(b[3])))>>>0:(b=y.hsla.exec(r))?(l(s(b[1]),c(b[2]),c(b[3]))|h(b[4]))>>>0:null}},548,[]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.processColorObject=e.normalizeColorObject=e.PlatformColor=void 0;e.PlatformColor=function(){for(var o=arguments.length,n=new Array(o),t=0;t.49999*l?[0,2*Math.atan2(u,m)*C,90]:M<-.49999*l?[0,-2*Math.atan2(u,m)*C,-90]:[t.roundTo3Places(Math.atan2(2*u*m-2*s*c,1-2*v-2*h)*C),t.roundTo3Places(Math.atan2(2*s*m-2*u*c,1-2*f-2*h)*C),t.roundTo3Places(Math.asin(2*u*s+2*c*m)*C)]},roundTo3Places:function(t){var n=t.toString().split('e');return.001*Math.round(n[0]+'e'+(n[1]?+n[1]-3:3))},decomposeMatrix:function(n){r(d[1])(16===n.length,'Matrix decomposition needs a list of 3d matrix values, received %s',n);var a=[],o=[],i=[],u=[],s=[];if(n[15]){for(var c=[],m=[],v=0;v<4;v++){c.push([]);for(var f=0;f<4;f++){var h=n[4*v+f]/n[15];c[v].push(h),m.push(3===f?0:h)}}if(m[15]=1,t.determinant(m)){if(0!==c[0][3]||0!==c[1][3]||0!==c[2][3]){var M=[c[0][3],c[1][3],c[2][3],c[3][3]],l=t.inverse(m),C=t.transpose(l);a=t.multiplyVectorByMatrix(M,C)}else a[0]=a[1]=a[2]=0,a[3]=1;for(var p=0;p<3;p++)s[p]=c[3][p];for(var x=[],T=0;T<3;T++)x[T]=[c[T][0],c[T][1],c[T][2]];i[0]=t.v3Length(x[0]),x[0]=t.v3Normalize(x[0],i[0]),u[0]=t.v3Dot(x[0],x[1]),x[1]=t.v3Combine(x[1],x[0],1,-u[0]),i[1]=t.v3Length(x[1]),x[1]=t.v3Normalize(x[1],i[1]),u[0]/=i[1],u[1]=t.v3Dot(x[0],x[2]),x[2]=t.v3Combine(x[2],x[0],1,-u[1]),u[2]=t.v3Dot(x[1],x[2]),x[2]=t.v3Combine(x[2],x[1],1,-u[2]),i[2]=t.v3Length(x[2]),x[2]=t.v3Normalize(x[2],i[2]),u[1]/=i[2],u[2]/=i[2];var y,S=t.v3Cross(x[1],x[2]);if(t.v3Dot(x[0],S)<0)for(var P=0;P<3;P++)i[P]*=-1,x[P][0]*=-1,x[P][1]*=-1,x[P][2]*=-1;return o[0]=.5*Math.sqrt(Math.max(1+x[0][0]-x[1][1]-x[2][2],0)),o[1]=.5*Math.sqrt(Math.max(1-x[0][0]+x[1][1]-x[2][2],0)),o[2]=.5*Math.sqrt(Math.max(1-x[0][0]-x[1][1]+x[2][2],0)),o[3]=.5*Math.sqrt(Math.max(1+x[0][0]+x[1][1]+x[2][2],0)),x[2][1]>x[1][2]&&(o[0]=-o[0]),x[0][2]>x[2][0]&&(o[1]=-o[1]),x[1][0]>x[0][1]&&(o[2]=-o[2]),{rotationDegrees:y=o[0]<.001&&o[0]>=0&&o[1]<.001&&o[1]>=0?[0,0,t.roundTo3Places(180*Math.atan2(x[0][1],x[0][0])/Math.PI)]:t.quaternionToDegreesXYZ(o,c,x),perspective:a,quaternion:o,scale:i,skew:u,translation:s,rotate:y[2],rotateX:y[0],rotateY:y[1],scaleX:i[0],scaleY:i[1],translateX:s[0],translateY:s[1]}}}}};_m.exports=t},554,[430,425]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.get=p,e.getWithFallback_DEPRECATED=function(n,o){if(null==t){if(v(n))return p(n,o)}else if(null!=t(n))return p(n,o);var u=function(t){return null};return u.displayName="Fallback("+n+")",u},e.setRuntimeConfigProvider=function(n){(0,f.default)(null==t,'NativeComponentRegistry.setRuntimeConfigProvider() called more than once.'),t=n},e.unstable_hasComponent=function(t){var n=s.get(t);if(null==n){if(!g.__nativeComponentRegistry__hasComponent)throw"unstable_hasComponent('"+t+"'): Global function is not registered";n=g.__nativeComponentRegistry__hasComponent(t),s.set(t,n)}return n},e.unstable_hasStaticViewConfig=function(n){var o;return!(null!=(o=null==t?void 0:t(n))?o:{native:!0}).native};var t,n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),f=r(d[0])(r(d[5]));!(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=c(n);if(o&&o.has(t))return o.get(t);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var s=l?Object.getOwnPropertyDescriptor(t,f):null;s&&(s.get||s.set)?Object.defineProperty(u,f,s):u[f]=t[f]}u.default=t,o&&o.set(t,u)})(r(d[6]));function c(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(c=function(t){return t?o:n})(t)}var s=new Map;function p(n,f){return o.default.register(n,function(){var o,c=null!=(o=null==t?void 0:t(n))?o:{native:!0,verify:!1},s=c.native,p=c.verify,v=s?(0,u.default)(n):(0,r(d[7]).createViewConfig)(f());return p&&(s?(0,l.default)(v,(0,r(d[7]).createViewConfig)(f())):(0,l.default)((0,u.default)(n),v)),v}),n}function v(o){return(0,f.default)(null==t,'Unexpected invocation!'),null!=n.default.getViewManagerConfig(o)}},555,[407,450,539,556,569,425,534,570]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=!1;function t(n){var t=r(d[0]).getConstants();t.ViewManagerNames||t.LazyViewManagersEnabled?n=s(n,r(d[0]).getDefaultEventTypes()):(n.bubblingEventTypes=s(n.bubblingEventTypes,t.genericBubblingEventTypes),n.directEventTypes=s(n.directEventTypes,t.genericDirectEventTypes))}function s(n,t){if(!t)return n;if(!n)return t;for(var o in t)if(t.hasOwnProperty(o)){var u=t[o];if(n.hasOwnProperty(o)){var c=n[o];'object'==typeof u&&'object'==typeof c&&(u=s(c,u))}n[o]=u}return n}function o(n){switch(n){case'CATransform3D':return r(d[4]);case'CGPoint':return r(d[5]);case'CGSize':return r(d[6]);case'UIEdgeInsets':return r(d[7]);case'Point':return r(d[5])}return null}function u(n){switch(n){case'CGColor':case'UIColor':return r(d[8]);case'CGColorArray':case'UIColorArray':return r(d[9]);case'CGImage':case'UIImage':case'RCTImageSource':return r(d[10]);case'Color':return r(d[8]);case'ColorArray':return r(d[9])}return null}m.exports=function(s){var c=r(d[0]).getViewManagerConfig(s);r(d[1])(null!=c&&null!=c.NativeProps,'requireNativeComponent: "%s" was not found in the UIManager.',s);for(var l=c.baseModuleName,v=c.bubblingEventTypes,b=c.directEventTypes,p=c.NativeProps;l;){var f=r(d[0]).getViewManagerConfig(l);f?(v=r(d[2])({},f.bubblingEventTypes,v),b=r(d[2])({},f.directEventTypes,b),p=r(d[2])({},f.NativeProps,p),l=f.baseModuleName):l=null}var y={};for(var C in p){var E=p[C],T=o(E),w=u(E);y[C]=null==T&&null==w||{diff:T,process:w}}return y.style=r(d[3]),r(d[2])(c,{uiViewClassName:s,validAttributes:y,bubblingEventTypes:v,directEventTypes:b}),n||(t(c),n=!0),c}},556,[450,425,436,557,552,558,551,550,546,559,560]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),l={process:t.default},s={alignContent:!0,alignItems:!0,alignSelf:!0,aspectRatio:!0,borderBottomWidth:!0,borderEndWidth:!0,borderLeftWidth:!0,borderRightWidth:!0,borderStartWidth:!0,borderTopWidth:!0,borderWidth:!0,bottom:!0,direction:!0,display:!0,end:!0,flex:!0,flexBasis:!0,flexDirection:!0,flexGrow:!0,flexShrink:!0,flexWrap:!0,height:!0,justifyContent:!0,left:!0,margin:!0,marginBottom:!0,marginEnd:!0,marginHorizontal:!0,marginLeft:!0,marginRight:!0,marginStart:!0,marginTop:!0,marginVertical:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,overflow:!0,padding:!0,paddingBottom:!0,paddingEnd:!0,paddingHorizontal:!0,paddingLeft:!0,paddingRight:!0,paddingStart:!0,paddingTop:!0,paddingVertical:!0,position:!0,right:!0,start:!0,top:!0,width:!0,zIndex:!0,elevation:!0,shadowColor:l,shadowOffset:{diff:n.default},shadowOpacity:!0,shadowRadius:!0,decomposedMatrix:!0,rotation:!0,scaleX:!0,scaleY:!0,transform:{process:o.default},transformMatrix:!0,translateX:!0,translateY:!0,backfaceVisibility:!0,backgroundColor:l,borderBottomColor:l,borderBottomEndRadius:!0,borderBottomLeftRadius:!0,borderBottomRightRadius:!0,borderBottomStartRadius:!0,borderColor:l,borderEndColor:l,borderLeftColor:l,borderRadius:!0,borderRightColor:l,borderStartColor:l,borderStyle:!0,borderTopColor:l,borderTopEndRadius:!0,borderTopLeftRadius:!0,borderTopRightRadius:!0,borderTopStartRadius:!0,opacity:!0,color:l,fontFamily:!0,fontSize:!0,fontStyle:!0,fontVariant:!0,fontWeight:!0,includeFontPadding:!0,letterSpacing:!0,lineHeight:!0,textAlign:!0,textAlignVertical:!0,textDecorationColor:l,textDecorationLine:!0,textDecorationStyle:!0,textShadowColor:l,textShadowOffset:!0,textShadowRadius:!0,textTransform:!0,writingDirection:!0,overlayColor:l,resizeMode:!0,tintColor:l};m.exports=s},557,[407,546,553,551]); +__d(function(g,r,i,a,m,e,d){'use strict';var t={x:void 0,y:void 0};m.exports=function(n,o){return(n=n||t)!==(o=o||t)&&(n.x!==o.x||n.y!==o.y)}},558,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=r(d[0])(r(d[1])),l=0;function u(u){var o=(0,n.default)(u);return null==o?(console.error('Invalid value in color array:',u),l):o}m.exports=function(n){return null==n?null:n.map(u)}},559,[407,546]); +__d(function(g,r,i,a,m,e,d){'use strict';var t,n,s,u;function o(){if(u)return u;var t=g.nativeExtensions&&g.nativeExtensions.SourceCode;return t||(t=r(d[0]).default),u=t.getConstants().scriptURL}function f(){if(void 0===n){var t=o(),s=t&&t.match(/^https?:\/\/.*?\//);n=s?s[0]:null}return n}function c(t){if(t){if(t.startsWith('assets://'))return null;(t=t.substring(0,t.lastIndexOf('/')+1)).includes('://')||(t='file://'+t)}return t}m.exports=function(n){if('object'==typeof n)return n;var u=r(d[1]).getAssetByID(n);if(!u)return null;var l=new(r(d[2]))(f(),(void 0===s&&(s=c(o())),s),u);return t?t(l):l.defaultAsset()},m.exports.pickScale=r(d[3]).pickScale,m.exports.setCustomSourceTransformer=function(n){t=n}},560,[561,562,563,564]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).getEnforcing('SourceCode'),o=null,u={getConstants:function(){return null==o&&(o=n.getConstants()),o}};e.default=u},561,[428]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=[];m.exports={registerAsset:function(s){return t.push(s)},getAssetByID:function(s){return t[s-1]}}},562,[]); +__d(function(g,r,i,a,m,e,d){'use strict';function t(t){var s=r(d[0]).pickScale(t.scales,r(d[1]).get()),n=1===s?'':'@'+s+'x';return r(d[2]).getBasePath(t)+'/'+t.name+n+'.'+t.type}var s=(function(){function s(t,n,u){r(d[3])(this,s),this.serverUrl=t,this.jsbundleUrl=n,this.asset=u}return r(d[4])(s,[{key:"isLoadedFromServer",value:function(){return!!this.serverUrl}},{key:"isLoadedFromFileSystem",value:function(){return!(!this.jsbundleUrl||!this.jsbundleUrl.startsWith('file://'))}},{key:"defaultAsset",value:function(){return this.isLoadedFromServer()?this.assetServerURL():this.isLoadedFromFileSystem()?this.drawableFolderInBundle():this.resourceIdentifierWithoutScale()}},{key:"assetServerURL",value:function(){return r(d[5])(!!this.serverUrl,'need server to load from'),this.fromSource(this.serverUrl+t(this.asset)+"?platform=android&hash="+this.asset.hash)}},{key:"scaledAssetPath",value:function(){return this.fromSource(t(this.asset))}},{key:"scaledAssetURLNearBundle",value:function(){var s=this.jsbundleUrl||'file://';return this.fromSource(s+t(this.asset).replace(/\.\.\//g,'_'))}},{key:"resourceIdentifierWithoutScale",value:function(){return r(d[5])(!0,'resource identifiers work on Android'),this.fromSource(r(d[2]).getAndroidResourceIdentifier(this.asset))}},{key:"drawableFolderInBundle",value:function(){var t,s,n=this.jsbundleUrl||'file://';return this.fromSource(n+(t=this.asset,s=r(d[0]).pickScale(t.scales,r(d[1]).get()),r(d[2]).getAndroidResourceFolderName(t,s)+'/'+r(d[2]).getAndroidResourceIdentifier(t)+'.'+t.type))}},{key:"fromSource",value:function(t){return{__packager_asset:!0,width:this.asset.width,height:this.asset.height,uri:t,scale:r(d[0]).pickScale(this.asset.scales,r(d[1]).get())}}}]),s})();s.pickScale=r(d[0]).pickScale,m.exports=s},563,[564,565,568,402,403,425]); +__d(function(g,r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.getUrlCacheBreaker=function(){if(null==n)return'';return n},e.pickScale=function(n,u){null==u&&(u=t.default.get());for(var l=0;l=u)return n[l];return n[n.length-1]||1},e.setUrlCacheBreaker=function(t){n=t};var n,t=r(d[0])(r(d[1]))},564,[407,565]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=(function(){function t(){r(d[0])(this,t)}return r(d[1])(t,null,[{key:"get",value:function(){return r(d[2]).get('window').scale}},{key:"getFontScale",value:function(){return r(d[2]).get('window').fontScale||t.get()}},{key:"getPixelSizeForLayoutSize",value:function(n){return Math.round(n*t.get())}},{key:"roundToNearestPixel",value:function(n){var u=t.get();return Math.round(n*u)/u}},{key:"startDetecting",value:function(){}}]),t})();m.exports=t},565,[402,403,566]); +__d(function(g,r,i,a,m,e,d){var n,t=r(d[0])(r(d[1])),s=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),c=r(d[0])(r(d[5])),u=r(d[0])(r(d[6])),f=new o.default,v=!1,h=(function(){function o(){(0,t.default)(this,o)}return(0,s.default)(o,null,[{key:"get",value:function(t){return(0,u.default)(n[t],'No dimension set for key '+t),n[t]}},{key:"set",value:function(t){var s=t.screen,o=t.window,l=t.windowPhysicalPixels;l&&(o={width:l.width/l.scale,height:l.height/l.scale,scale:l.scale,fontScale:l.fontScale});var c=t.screenPhysicalPixels;c?s={width:c.width/c.scale,height:c.height/c.scale,scale:c.scale,fontScale:c.fontScale}:null==s&&(s=o),n={window:o,screen:s},v?f.emit('change',n):v=!0}},{key:"addEventListener",value:function(n,t){return(0,u.default)('change'===n,'Trying to subscribe to unknown event: "%s"',n),f.addListener(n,t)}},{key:"removeEventListener",value:function(n,t){(0,u.default)('change'===n,'Trying to remove listener for unknown event: "%s"',n),f.removeListener(n,t)}}]),o})(),w=g.nativeExtensions&&g.nativeExtensions.DeviceInfo&&g.nativeExtensions.DeviceInfo.Dimensions;w||(l.default.addListener('didUpdateDimensions',function(n){h.set(n)}),w=c.default.getConstants().Dimensions),h.set(w),m.exports=h},566,[407,402,403,414,413,567,425]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).getEnforcing('DeviceInfo'),o=null,u={getConstants:function(){return null==o&&(o=n.getConstants()),o}};e.default=u},567,[428]); +__d(function(g,r,i,a,m,e,d){'use strict';var t={.75:'ldpi',1:'mdpi',1.5:'hdpi',2:'xhdpi',3:'xxhdpi',4:'xxxhdpi'};function n(n){if(n.toString()in t)return t[n.toString()];throw new Error('no such scale '+n.toString())}var o=new Set(['gif','jpeg','jpg','png','svg','webp','xml']);function s(t){var n=t.httpServerLocation;return n.startsWith('/')?n.substr(1):n}m.exports={getAndroidResourceFolderName:function(s,u){if(!o.has(s.type))return'raw';var c=n(u);if(!c)throw new Error("Don't know which android drawable suffix to use for scale: "+u+'\nAsset: '+JSON.stringify(s,null,'\t')+'\nPossible scales are:'+JSON.stringify(t,null,'\t'));return'drawable-'+c},getAndroidResourceIdentifier:function(t){return(s(t)+'/'+t.name).toLowerCase().replace(/\//g,'_').replace(/([^a-z0-9_])/g,'').replace(/^assets_/,'')},getBasePath:s}},568,[]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,n){for(var o=0,u=['validAttributes','bubblingEventTypes','directEventTypes'];o0){var l,v=null!=(l=n.uiViewClassName)?l:t.uiViewClassName;console.error("'"+v+"' has a view config that does not match native. '"+s+"' is missing: "+c.join(', '))}}},e.getConfigWithoutViewProps=function(n,f){if(!n[f])return{};return Object.keys(n[f]).filter(function(n){return!t.default[f][n]}).reduce(function(t,o){return t[o]=n[f][o],t},{})},e.lefthandObjectDiff=f,e.stringifyViewConfig=function(t){return JSON.stringify(t,function(t,n){return'function'==typeof n?"\u0192 "+n.name:n},2)};var t=r(d[0])(r(d[1])),n=['transform','hitSlop'];function f(t,o){var u={};function s(t,n,o){if(typeof t==typeof n||null==t)if('object'!=typeof t)t===n||(u[o]=n);else{var s=f(t,n);Object.keys(s).length>1&&(u[o]=s)}else u[o]=n}for(var c in t)n.includes(c)||(o?t.hasOwnProperty(c)&&s(t[c],o[c],c):u[c]={});return u}},569,[407,544]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.createViewConfig=function(t){return{uiViewClassName:t.uiViewClassName,Commands:{},bubblingEventTypes:u(n.default.bubblingEventTypes,t.bubblingEventTypes),directEventTypes:u(n.default.directEventTypes,t.directEventTypes),validAttributes:u(n.default.validAttributes,t.validAttributes)}};var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2]));function u(n,u){var l;return null==n||null==u?null!=(l=null!=n?n:u)?l:{}:(0,t.default)({},n,u)}},570,[407,436,544]); +__d(function(g,r,i,a,m,e,d){'use strict';var n;m.exports=function t(o,u){var f=arguments.length>2&&void 0!==arguments[2]?arguments[2]:-1,s=arguments.length>3?arguments[3]:void 0,c='number'==typeof f?s:f,l='number'==typeof f?f:-1;if(0===l)return!0;if(o===u)return!1;if('function'==typeof o&&'function'==typeof u){var v=null==c?void 0:c.unsafelyIgnoreFunctions;return null==v&&(!n||!n.onDifferentFunctionsIgnored||c&&'unsafelyIgnoreFunctions'in c||n.onDifferentFunctionsIgnored(o.name,u.name),v=!0),!v}if('object'!=typeof o||null===o)return o!==u;if('object'!=typeof u||null===u)return!0;if(o.constructor!==u.constructor)return!0;if(Array.isArray(o)){var y=o.length;if(u.length!==y)return!0;for(var p=0;p=w},r=function(){},_e.unstable_forceFrameRate=function(e){0>e||125>>1,a=e[r];if(!(void 0!==a&&0x(l,t))void 0!==s&&0>x(s,l)?(e[r]=s,e[u]=t,r=u):(e[r]=l,e[o]=t,r=o);else{if(!(void 0!==s&&0>x(s,t)))break e;e[r]=s,e[u]=t,r=u}}}return n}return null}function x(e,n){var t=e.sortIndex-n.sortIndex;return 0!==t?t:e.id-n.id}var P=[],F=[],I=1,M=null,C=3,j=!1,A=!1,L=!1;function q(e){for(var n=T(F);null!==n;){if(null===n.callback)g(F);else{if(!(n.startTime<=e))break;g(F),n.sortIndex=n.expirationTime,k(P,n)}n=T(F)}}function R(t){if(L=!1,q(t),!A)if(null!==T(P))A=!0,e(Y);else{var r=T(F);null!==r&&n(R,r.startTime-t)}}function Y(e,r){A=!1,L&&(L=!1,t()),j=!0;var a=C;try{for(q(r),M=T(P);null!==M&&(!(M.expirationTime>r)||e&&!_e.unstable_shouldYield());){var o=M.callback;if("function"==typeof o){M.callback=null,C=M.priorityLevel;var l=o(M.expirationTime<=r);r=_e.unstable_now(),"function"==typeof l?M.callback=l:M===T(P)&&g(P),q(r)}else g(P);M=T(P)}if(null!==M)var u=!0;else{var s=T(F);null!==s&&n(R,s.startTime-r),u=!1}return u}finally{M=null,C=a,j=!1}}var E=r;_e.unstable_IdlePriority=5,_e.unstable_ImmediatePriority=1,_e.unstable_LowPriority=4,_e.unstable_NormalPriority=3,_e.unstable_Profiling=null,_e.unstable_UserBlockingPriority=2,_e.unstable_cancelCallback=function(e){e.callback=null},_e.unstable_continueExecution=function(){A||j||(A=!0,e(Y))},_e.unstable_getCurrentPriorityLevel=function(){return C},_e.unstable_getFirstCallbackNode=function(){return T(P)},_e.unstable_next=function(e){switch(C){case 1:case 2:case 3:var n=3;break;default:n=C}var t=C;C=n;try{return e()}finally{C=t}},_e.unstable_pauseExecution=function(){},_e.unstable_requestPaint=E,_e.unstable_runWithPriority=function(e,n){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var t=C;C=e;try{return n()}finally{C=t}},_e.unstable_scheduleCallback=function(r,a,o){var l=_e.unstable_now();switch("object"==typeof o&&null!==o?o="number"==typeof(o=o.delay)&&0l?(r.sortIndex=o,k(F,r),null===T(P)&&r===T(F)&&(L?t():L=!0,n(R,o-l))):(r.sortIndex=u,k(P,r),A||j||(A=!0,e(Y))),r},_e.unstable_wrapCallback=function(e){var n=C;return function(){var t=C;C=n;try{return e.apply(this,arguments)}finally{C=t}}}},576,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=c(n);if(o&&o.has(t))return o.get(t);var l={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var s=u?Object.getOwnPropertyDescriptor(t,f):null;s&&(s.get||s.set)?Object.defineProperty(l,f,s):l[f]=t[f]}l.default=t,o&&o.set(t,l);return l})(r(d[3])),l=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),f=r(d[0])(r(d[6])),s=["animating","color","hidesWhenStopped","onLayout","size","style"];function c(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(c=function(t){return t?o:n})(t)}var p='android'===l.default.OS?r(d[7]):r(d[8]).default,y=o.forwardRef(function(c,y){var v,O,w=c.animating,b=void 0===w||w,S=c.color,j=void 0===S?'ios'===l.default.OS?"#999999":null:S,z=c.hidesWhenStopped,W=void 0===z||z,k=c.onLayout,L=c.size,P=void 0===L?'small':L,M=c.style,_=(0,n.default)(c,s);switch(P){case'small':v=h.sizeSmall,O='small';break;case'large':v=h.sizeLarge,O='large';break;default:v={height:P,width:P}}var E=(0,t.default)({animating:b,color:j,hidesWhenStopped:W},_,{ref:y,style:v,size:O});return o.createElement(f.default,{onLayout:k,style:u.default.compose(h.container,M)},'android'===l.default.OS?o.createElement(p,(0,t.default)({},E,{styleAttr:'Normal',indeterminate:!0})):o.createElement(p,E))});y.displayName='ActivityIndicator';var h=u.default.create({container:{alignItems:'center',justifyContent:'center'},sizeSmall:{width:20,height:20},sizeLarge:{width:36,height:36}});m.exports=y},577,[407,436,508,534,426,578,579,582,587]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0]).roundToNearestPixel(.4);0===t&&(t=1/r(d[0]).get());var o={position:'absolute',left:0,right:0,top:0,bottom:0};m.exports={hairlineWidth:t,absoluteFill:o,absoluteFillObject:o,compose:function(t,o){return null!=t&&null!=o?[t,o]:null!=t?t:o},flatten:r(d[1]),setStyleAttributePreprocessor:function(t,o){var l;if(!0===r(d[2])[t])l={process:o};else{if('object'!=typeof r(d[2])[t])return void console.error(t+" is not a valid style attribute");l=r(d[3])({},r(d[2])[t],{process:o})}r(d[2])[t]=l},create:function(t){return t}}},578,[565,573,557,436]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),f=r(d[0])(r(d[3])),u=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var f=o(n);if(f&&f.has(t))return f.get(t);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var p=l?Object.getOwnPropertyDescriptor(t,c):null;p&&(p.get||p.set)?Object.defineProperty(u,c,p):u[c]=t[c]}u.default=t,f&&f.set(t,u);return u})(r(d[4]));function o(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,f=new WeakMap;return(o=function(t){return t?f:n})(t)}var l=u.forwardRef(function(o,l){return u.createElement(f.default.Provider,{value:!1},u.createElement(n.default,(0,t.default)({},o,{ref:l})))});l.displayName='View',m.exports=l},579,[407,436,580,581,534]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Commands=void 0;var t=l(r(d[0])),n=r(d[1])(r(d[2])),o=r(d[1])(r(d[3])),u=r(d[1])(r(d[4]));l(r(d[5]));function f(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(f=function(t){return t?o:n})(t)}function l(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=f(n);if(o&&o.has(t))return o.get(t);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in t)if("default"!==p&&Object.prototype.hasOwnProperty.call(t,p)){var s=l?Object.getOwnPropertyDescriptor(t,p):null;s&&(s.get||s.set)?Object.defineProperty(u,p,s):u[p]=t[p]}return u.default=t,o&&o.set(t,u),u}var p=t.get('RCTView',function(){return'android'===n.default.OS?u.default:{uiViewClassName:'RCTView'}}),s=(0,o.default)({supportedCommands:['hotspotUpdate','setPressed']});e.Commands=s;var c=p;e.default=c},580,[555,407,426,542,545,534]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0]).createContext(!1);m.exports=t},581,[534]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),f=r(d[0])(r(d[3])),l=["styleAttr","indeterminate","animating"],o=r(d[4]),u=o.forwardRef(function(u,v){var s=u.styleAttr,c=void 0===s?'Normal':s,y=u.indeterminate,A=void 0===y||y,_=u.animating,p=void 0===_||_,w=(0,n.default)(u,l);return o.createElement(f.default,(0,t.default)({styleAttr:c,indeterminate:A,animating:p},w,{ref:v}))});m.exports=u},582,[407,436,508,583,534]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=(0,r(d[0])(r(d[1])).default)('AndroidProgressBar',{interfaceOnly:!0});e.default=t},583,[407,584]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2]));var t=function(t,p){var l=p&&null!=p.paperComponentName?p.paperComponentName:t;if(null!=p&&null!=p.paperComponentNameDeprecated)if(o.default.getViewManagerConfig(t))l=t;else{var u;if(null==p.paperComponentNameDeprecated||!o.default.getViewManagerConfig(p.paperComponentNameDeprecated))throw new Error("Failed to find native component for either "+t+" or "+(null!=(u=p.paperComponentNameDeprecated)?u:'(unknown)'));l=p.paperComponentNameDeprecated}return(0,n.default)(l)};e.default=t},584,[407,585,450]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=function(n){return r(d[0])(n,function(){return r(d[1])(n)})}},585,[586,556]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0]).ReactNativeViewConfigRegistry.register;m.exports=function(n,s){return t(n,s)}},586,[537]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=(0,r(d[0])(r(d[1])).default)('ActivityIndicatorView',{paperComponentName:'RCTActivityIndicatorView'});e.default=t},587,[407,584]); +__d(function(g,r,i,a,m,_e,d){'use strict';var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),n=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),l=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=x(e);if(o&&o.has(t))return o.get(t);var s={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var l=n?Object.getOwnPropertyDescriptor(t,c):null;l&&(l.get||l.set)?Object.defineProperty(s,c,l):s[c]=t[c]}s.default=t,o&&o.set(t,s);return s})(r(d[7])),u=r(d[0])(r(d[8])),f=r(d[0])(r(d[9])),p=r(d[0])(r(d[10])),b=r(d[0])(r(d[11])),y=r(d[0])(r(d[12])),h=r(d[0])(r(d[13])),v=r(d[0])(r(d[14]));function x(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,o=new WeakMap;return(x=function(t){return t?o:e})(t)}function F(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var D=(function(f){(0,s.default)(w,f);var x,D,S=(x=w,D=F(),function(){var t,e=(0,c.default)(x);if(D){var o=(0,c.default)(this).constructor;t=Reflect.construct(e,arguments,o)}else t=e.apply(this,arguments);return(0,n.default)(this,t)});function w(){return(0,e.default)(this,w),S.apply(this,arguments)}return(0,o.default)(w,[{key:"render",value:function(){var e,o,s=this.props,n=s.accessibilityLabel,c=s.color,f=s.onPress,x=s.touchSoundDisabled,F=s.title,D=s.hasTVPreferredFocus,S=s.nextFocusDown,w=s.nextFocusForward,P=s.nextFocusLeft,R=s.nextFocusRight,A=s.nextFocusUp,k=s.testID,j=s.accessible,C=s.accessibilityActions,L=s.onAccessibilityAction,M=[O.button],W=[O.text];c&&('ios'===u.default.OS?W.push({color:c}):M.push({backgroundColor:c}));var _=null!=this.props.disabled?this.props.disabled:null==(e=this.props.accessibilityState)?void 0:e.disabled,B=_!==(null==(o=this.props.accessibilityState)?void 0:o.disabled)?(0,t.default)({},this.props.accessibilityState,{disabled:_}):this.props.accessibilityState;_&&(M.push(O.buttonDisabled),W.push(O.textDisabled)),(0,v.default)('string'==typeof F,'The title prop of a Button must be a string');var E='android'===u.default.OS?F.toUpperCase():F,T='android'===u.default.OS?b.default:y.default;return l.createElement(T,{accessible:j,accessibilityActions:C,onAccessibilityAction:L,accessibilityLabel:n,accessibilityRole:"button",accessibilityState:B,hasTVPreferredFocus:D,nextFocusDown:S,nextFocusForward:w,nextFocusLeft:P,nextFocusRight:R,nextFocusUp:A,testID:k,disabled:_,onPress:f,touchSoundDisabled:x},l.createElement(h.default,{style:M},l.createElement(p.default,{style:W,disabled:_},E)))}}]),w})(l.Component),O=f.default.create({button:u.default.select({ios:{},android:{elevation:4,backgroundColor:'#2196F3',borderRadius:2}}),text:(0,t.default)({textAlign:'center',margin:8},u.default.select({ios:{color:'#007AFF',fontSize:18},android:{color:'white',fontWeight:'500'}})),buttonDisabled:u.default.select({ios:{},android:{elevation:0,backgroundColor:'#dfdfdf'}}),textDisabled:u.default.select({ios:{color:'#cdcdcd'},android:{color:'#a1a1a1'}})});m.exports=D},588,[407,436,402,403,417,419,422,534,426,578,589,614,615,579,425]); +__d(function(g,r,i,a,m,e,d){var n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),t=r(d[0])(r(d[3])),s=r(d[0])(r(d[4])),l=(v(r(d[5])),r(d[0])(r(d[6]))),u=(r(d[0])(r(d[7])),r(d[0])(r(d[8]))),p=r(d[0])(r(d[9])),f=v(r(d[10])),c=(r(d[0])(r(d[11])),["accessible","allowFontScaling","ellipsizeMode","onLongPress","onPress","onPressIn","onPressOut","onResponderGrant","onResponderMove","onResponderRelease","onResponderTerminate","onResponderTerminationRequest","onStartShouldSetResponder","pressRetentionOffset","suppressHighlighting"]);function R(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,t=new WeakMap;return(R=function(n){return n?t:o})(n)}function v(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var t=R(o);if(t&&t.has(n))return t.get(n);var s={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in n)if("default"!==u&&Object.prototype.hasOwnProperty.call(n,u)){var p=l?Object.getOwnPropertyDescriptor(n,u):null;p&&(p.get||p.set)?Object.defineProperty(s,u,p):s[u]=n[u]}return s.default=n,t&&t.set(n,s),s}var P=f.forwardRef(function(s,R){var v=s.accessible,P=s.allowFontScaling,b=s.ellipsizeMode,O=s.onLongPress,T=s.onPress,h=s.onPressIn,y=s.onPressOut,M=s.onResponderGrant,w=s.onResponderMove,E=s.onResponderRelease,C=s.onResponderTerminate,L=s.onResponderTerminationRequest,j=s.onStartShouldSetResponder,x=s.pressRetentionOffset,D=s.suppressHighlighting,_=(0,t.default)(s,c),q=(0,f.useState)(!1),G=(0,o.default)(q,2),H=G[0],k=G[1],z=(null!=T||null!=O||null!=j)&&!0!==_.disabled,F=S(z),I=(0,f.useMemo)(function(){return F?{disabled:!z,pressRectOffset:x,onLongPress:O,onPress:T,onPressIn:function(n){k(!D),null==h||h(n)},onPressOut:function(n){k(!1),null==y||y(n)},onResponderTerminationRequest_DEPRECATED:L,onStartShouldSetResponder_DEPRECATED:j}:null},[F,z,x,O,T,h,y,L,j,D]),N=(0,l.default)(I),W=(0,f.useMemo)(function(){return null==N?null:{onResponderGrant:function(n){N.onResponderGrant(n),null!=M&&M(n)},onResponderMove:function(n){N.onResponderMove(n),null!=w&&w(n)},onResponderRelease:function(n){N.onResponderRelease(n),null!=E&&E(n)},onResponderTerminate:function(n){N.onResponderTerminate(n),null!=C&&C(n)},onResponderTerminationRequest:N.onResponderTerminationRequest,onStartShouldSetResponder:N.onStartShouldSetResponder}},[N,M,w,E,C]),A=null==_.selectionColor?null:(0,u.default)(_.selectionColor),V=_.style,B=_.numberOfLines;return null==B||B>=0||(console.error("'numberOfLines' in must be a non-negative number, received: "+B+". The value will be set to 0."),B=0),(0,f.useContext)(p.default)?f.createElement(r(d[12]).NativeVirtualText,(0,n.default)({},_,W,{isHighlighted:H,numberOfLines:B,selectionColor:A,style:V,ref:R})):f.createElement(p.default.Provider,{value:!0},f.createElement(r(d[12]).NativeText,(0,n.default)({},_,W,{accessible:!1!==v,allowFontScaling:!1!==P,ellipsizeMode:null!=b?b:'tail',isHighlighted:H,numberOfLines:B,selectionColor:A,style:V,ref:R})))});function S(n){var t=(0,f.useState)(n),s=(0,o.default)(t,2),l=s[0],u=s[1];return!l&&n&&u(n),l}P.displayName='Text',P.propTypes=s.default,m.exports=P},589,[407,436,430,508,590,604,605,578,546,581,534,425,612]); +__d(function(g,r,i,a,m,e,d){'use strict';var o=r(d[0])(r(d[1]));m.exports={ellipsizeMode:r(d[2]).oneOf(['head','middle','tail','clip']),numberOfLines:r(d[2]).number,textBreakStrategy:r(d[2]).oneOf(['simple','highQuality','balanced']),onLayout:r(d[2]).func,onPress:r(d[2]).func,onLongPress:r(d[2]).func,pressRetentionOffset:r(d[3]),selectable:r(d[2]).bool,selectionColor:r(d[4]),suppressHighlighting:r(d[2]).bool,style:o,testID:r(d[2]).string,nativeID:r(d[2]).string,allowFontScaling:r(d[2]).bool,maxFontSizeMultiplier:r(d[2]).number,accessible:r(d[2]).bool,adjustsFontSizeToFit:r(d[2]).bool,minimumFontScale:r(d[2]).number,disabled:r(d[2]).bool,dataDetectorType:r(d[2]).oneOf(['phoneNumber','link','email','none','all'])}},590,[591,593,596,603,600]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=function(n){var t=r(d[0])(n);return function(n,o,c,u){var f=n;n[o]&&((f={})[o]=r(d[1])(n[o]));for(var v=arguments.length,p=new Array(v>4?v-4:0),s=4;s5?v-5:0),j=5;j4?s-4:0),p=4;p3?f-3:0),p=3;p0?t._pressDelayTimeout=setTimeout(function(){t._receiveSignal('DELAY',E)},n):t._receiveSignal('DELAY',E);var R=I(t._config.delayLongPress,10,500-n);t._longPressDelayTimeout=setTimeout(function(){t._handleLongPress(E)},R+n)},onResponderMove:function(E){var n=t._config.onPressMove;null!=n&&n(E);var R=t._responderRegion;if(null!=R){var _=A(E);if(null==_)return t._cancelLongPressDelayTimeout(),void t._receiveSignal('LEAVE_PRESS_RECT',E);if(null!=t._touchActivatePosition){var o=t._touchActivatePosition.pageX-_.pageX,l=t._touchActivatePosition.pageY-_.pageY;Math.hypot(o,l)>10&&t._cancelLongPressDelayTimeout()}t._isTouchWithinResponderRegion(_,R)?t._receiveSignal('ENTER_PRESS_RECT',E):(t._cancelLongPressDelayTimeout(),t._receiveSignal('LEAVE_PRESS_RECT',E))}},onResponderRelease:function(E){t._receiveSignal('RESPONDER_RELEASE',E)},onResponderTerminate:function(E){t._receiveSignal('RESPONDER_TERMINATED',E)},onResponderTerminationRequest:function(){var E=t._config.cancelable;if(null==E){var n=t._config.onResponderTerminationRequest_DEPRECATED;return null==n||n()}return E},onClick:function(E){var n=t._config,R=n.onPress,_=n.disabled;null!=R&&!0!==_&&R(E)}},_='ios'===l.default.OS||'android'===l.default.OS?null:{onMouseEnter:function(E){if((0,r(d[10]).isHoverEnabled)()){t._isHovered=!0,t._cancelHoverOutDelayTimeout();var n=t._config.onHoverIn;if(null!=n){var R=I(t._config.delayHoverIn);R>0?(E.persist(),t._hoverInDelayTimeout=setTimeout(function(){n(E)},R)):n(E)}}},onMouseLeave:function(E){if(t._isHovered){t._isHovered=!1,t._cancelHoverInDelayTimeout();var n=t._config.onHoverOut;if(null!=n){var R=I(t._config.delayHoverOut);R>0?(E.persist(),t._hoverInDelayTimeout=setTimeout(function(){n(E)},R)):n(E)}}}};return(0,E.default)({},n,R,_)}},{key:"_receiveSignal",value:function(E,t){var n,_=this._touchState,l=null==(n=S[_])?void 0:n[E];null==this._responderID&&'RESPONDER_RELEASE'===E||((0,R.default)(null!=l&&'ERROR'!==l,'Pressability: Invalid signal `%s` for state `%s` on responder: %s',E,_,'number'==typeof this._responderID?this._responderID:'<>'),_!==l&&(null!=t.nativeEvent.timestamp&&o.default.emitEvent(function(){return{signal:E,touchDelayMs:Date.now()-t.nativeEvent.timestamp}}),this._performTransitionSideEffects(_,l,E,t),this._touchState=l))}},{key:"_performTransitionSideEffects",value:function(E,t,n,R){c(n)&&(this._touchActivatePosition=null,this._cancelLongPressDelayTimeout());var o='NOT_RESPONDER'===E&&'RESPONDER_INACTIVE_PRESS_IN'===t,u=!P(E)&&P(t);if((o||u)&&this._measureResponderRegion(),O(E)&&'LONG_PRESS_DETECTED'===n){var s=this._config.onLongPress;null!=s&&s(R)}var S=T(E),D=T(t);if(!S&&D?this._activate(R):S&&!D&&this._deactivate(R),O(E)&&'RESPONDER_RELEASE'===n){D||S||(this._activate(R),this._deactivate(R));var N=this._config,h=N.onLongPress,f=N.onPress,v=N.android_disableSound;if(null!=f)null!=h&&'RESPONDER_ACTIVE_LONG_PRESS_IN'===E&&this._shouldLongPressCancelPress()||('android'===l.default.OS&&!0!==v&&_.default.playTouchSound(),f(R))}this._cancelPressDelayTimeout()}},{key:"_activate",value:function(E){var t=this._config.onPressIn,n=A(E),R=n.pageX,_=n.pageY;this._touchActivatePosition={pageX:R,pageY:_},this._touchActivateTime=Date.now(),null!=t&&t(E)}},{key:"_deactivate",value:function(E){var t=this._config.onPressOut;if(null!=t){var n,R=I(this._config.minPressDuration,0,130),_=Date.now()-(null!=(n=this._touchActivateTime)?n:0),o=Math.max(R-_,I(this._config.delayPressOut));o>0?(E.persist(),this._pressOutDelayTimeout=setTimeout(function(){t(E)},o)):t(E)}this._touchActivateTime=null}},{key:"_measureResponderRegion",value:function(){null!=this._responderID&&('number'==typeof this._responderID?u.default.measure(this._responderID,this._measureCallback):this._responderID.measure(this._measureCallback))}},{key:"_isTouchWithinResponderRegion",value:function(E,t){var n,R,_,o,l=(0,r(d[11]).normalizeRect)(this._config.hitSlop),u=(0,r(d[11]).normalizeRect)(this._config.pressRectOffset),s=t.bottom,S=t.left,T=t.right,P=t.top;return null!=l&&(null!=l.bottom&&(s+=l.bottom),null!=l.left&&(S-=l.left),null!=l.right&&(T+=l.right),null!=l.top&&(P-=l.top)),s+=null!=(n=null==u?void 0:u.bottom)?n:D,S-=null!=(R=null==u?void 0:u.left)?R:N,T+=null!=(_=null==u?void 0:u.right)?_:h,P-=null!=(o=null==u?void 0:u.top)?o:f,E.pageX>S&&E.pageXP&&E.pageY1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return Math.max(t,null!=E?E:n)}e.default=v;var A=function(E){var t=E.nativeEvent,n=t.changedTouches,R=t.touches;return null!=R&&R.length>0?R[0]:null!=n&&n.length>0?n[0]:E.nativeEvent}},606,[407,436,402,403,425,607,609,426,450,534,610,611]); +__d(function(g,r,i,a,m,e,d){var u=r(d[0])(r(d[1])),o={playTouchSound:function(){u.default&&u.default.playTouchSound()}};m.exports=o},607,[407,608]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('SoundManager');e.default=n},608,[428]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),s=new((function(){function s(){(0,t.default)(this,s),this._listeners=[]}return(0,n.default)(s,[{key:"addListener",value:function(t){this._listeners.push(t)}},{key:"removeListener",value:function(t){var n=this._listeners.indexOf(t);n>-1&&this._listeners.splice(n,1)}},{key:"emitEvent",value:function(t){if(0!==this._listeners.length){var n=t();this._listeners.forEach(function(t){return t(n)})}}}]),s})());e.default=s},609,[407,402,403]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.isHoverEnabled=function(){return n};var n=!1;if('web'===r(d[0])(r(d[1])).default.OS&&Boolean('undefined'!=typeof window&&window.document&&window.document.createElement)){var t=0,o=function(){t=Date.now(),n&&(n=!1)};document.addEventListener('touchstart',o,!0),document.addEventListener('touchmove',o,!0),document.addEventListener('mousemove',function(){n||Date.now()-t<1e3||(n=!0)},!0)}},610,[407,426]); +__d(function(g,r,i,a,m,e,d){function t(t){return{bottom:t,left:t,right:t,top:t}}Object.defineProperty(e,"__esModule",{value:!0}),e.createSquare=t,e.normalizeRect=function(n){return'number'==typeof n?t(n):n}},611,[]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.NativeVirtualText=e.NativeText=void 0;var t=r(d[0])(r(d[1])),l=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=(0,o.default)('RCTText',function(){return{validAttributes:(0,t.default)({},l.default.UIView,{isHighlighted:!0,numberOfLines:!0,ellipsizeMode:!0,allowFontScaling:!0,maxFontSizeMultiplier:!0,disabled:!0,selectable:!0,selectionColor:!0,adjustsFontSizeToFit:!0,minimumFontScale:!0,textBreakStrategy:!0,onTextLayout:!0,onInlineViewLayout:!0,dataDetectorType:!0,android_hyphenationFrequency:!0}),directEventTypes:{topTextLayout:{registrationName:'onTextLayout'},topInlineViewLayout:{registrationName:'onInlineViewLayout'}},uiViewClassName:'RCTText'}});e.NativeText=u;var s=g.RN$Bridgeless||n.default.hasViewManagerConfig('RCTVirtualText')?(0,o.default)('RCTVirtualText',function(){return{validAttributes:(0,t.default)({},l.default.UIView,{isHighlighted:!0,maxFontSizeMultiplier:!0}),uiViewClassName:'RCTVirtualText'}}):u;e.NativeVirtualText=s},612,[407,436,613,450,586]); +__d(function(g,r,i,a,m,e,d){'use strict';var s=r(d[0])(r(d[1])),t={pointerEvents:!0,accessible:!0,accessibilityActions:!0,accessibilityLabel:!0,accessibilityLiveRegion:!0,accessibilityRole:!0,accessibilityState:!0,accessibilityValue:!0,accessibilityHint:!0,importantForAccessibility:!0,nativeID:!0,testID:!0,renderToHardwareTextureAndroid:!0,shouldRasterizeIOS:!0,onLayout:!0,onAccessibilityAction:!0,onAccessibilityTap:!0,onMagicTap:!0,onAccessibilityEscape:!0,collapsable:!0,needsOffscreenAlphaCompositing:!0,style:r(d[0])(r(d[2])).default},c={UIView:t,RCTView:(0,s.default)({},t,{removeClippedSubviews:!0})};m.exports=c},613,[407,436,557]); +__d(function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),s=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),n=r(d[0])(r(d[5])),l=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),p=r(d[0])(r(d[8])),u=r(d[0])(r(d[9])),f=r(d[0])(r(d[10])),h=(r(d[0])(r(d[11])),r(d[0])(r(d[12]))),b=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var s=P(t);if(s&&s.has(e))return s.get(e);var o={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in e)if("default"!==l&&Object.prototype.hasOwnProperty.call(e,l)){var c=n?Object.getOwnPropertyDescriptor(e,l):null;c&&(c.get||c.set)?Object.defineProperty(o,l,c):o[l]=e[l]}o.default=e,s&&s.set(e,o);return o})(r(d[13])),y=r(d[0])(r(d[14])),v=["onBlur","onFocus"];function P(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,s=new WeakMap;return(P=function(e){return e?s:t})(e)}function F(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var O=(function(h){(0,n.default)(R,h);var y,P,O=(y=R,P=F(),function(){var e,t=(0,c.default)(y);if(P){var s=(0,c.default)(this).constructor;e=Reflect.construct(t,arguments,s)}else e=t.apply(this,arguments);return(0,l.default)(this,e)});function R(){var e;(0,s.default)(this,R);for(var t=arguments.length,o=new Array(t),n=0;n=23};var S='android'===f.default.OS?function(e,t){return t&&O.canUseNativeForeground()?{nativeForegroundAndroid:e}:{nativeBackgroundAndroid:e}}:function(e,t){return null};O.displayName='TouchableNativeFeedback',m.exports=O},614,[407,436,508,402,403,417,419,422,606,456,426,579,546,534,425,580]); +__d(function(g,r,i,a,m,_e,d){var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),s=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),n=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),p=r(d[0])(r(d[8])),u=r(d[0])(r(d[9])),f=r(d[0])(r(d[10])),y=r(d[0])(r(d[11])),h=r(d[0])(r(d[12])),b=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var s=P(e);if(s&&s.has(t))return s.get(t);var o={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var l=n?Object.getOwnPropertyDescriptor(t,c):null;l&&(l.get||l.set)?Object.defineProperty(o,c,l):o[c]=t[c]}o.default=t,s&&s.set(t,o);return o})(r(d[13])),v=["onBlur","onFocus"];function P(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,s=new WeakMap;return(P=function(t){return t?s:e})(t)}function O(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var F=(function(P){(0,n.default)(w,P);var F,_,R=(F=w,_=O(),function(){var t,e=(0,l.default)(F);if(_){var s=(0,l.default)(this).constructor;t=Reflect.construct(e,arguments,s)}else t=e.apply(this,arguments);return(0,c.default)(this,t)});function w(){var t;(0,s.default)(this,w);for(var e=arguments.length,o=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{}).iterations;return t},event:r(d[5]).event,createAnimatedComponent:r(d[6]),attachNativeEvent:r(d[7]).attachNativeEvent,forkEvent:r(d[5]).forkEvent,unforkEvent:r(d[5]).unforkEvent,Event:r(d[7]).AnimatedEvent}},617,[436,618,627,622,624,628,644,643]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}function e(t){var e=new Set;!(function t(n){'function'==typeof n.update?e.add(n):n.__getChildren().forEach(t)})(t),e.forEach(function(t){return t.update()})}var n=(function(n){r(d[3])(_,n);var s,u,o=(s=_,u=t(),function(){var t,e=r(d[0])(s);if(u){var n=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function _(t){var e;if(r(d[4])(this,_),e=o.call(this),'number'!=typeof t)throw new Error('AnimatedValue: Attempting to set value to undefined');return e._startingValue=e._value=t,e._offset=0,e._animation=null,e}return r(d[5])(_,[{key:"__detach",value:function(){var t=this;this.__isNative&&r(d[2]).API.getValue(this.__getNativeTag(),function(e){t._value=e}),this.stopAnimation(),r(d[6])(r(d[0])(_.prototype),"__detach",this).call(this)}},{key:"__getValue",value:function(){return this._value+this._offset}},{key:"setValue",value:function(t){var e,n,s=this;this._animation&&(this._animation.stop(),this._animation=null),this._updateValue(t,!this.__isNative),this.__isNative&&(e=this.__getNativeTag().toString(),n=function(){r(d[2]).API.setAnimatedNodeValue(s.__getNativeTag(),t)},r(d[2]).API.setWaitingForIdentifier(e),n(),r(d[2]).API.unsetWaitingForIdentifier(e))}},{key:"setOffset",value:function(t){this._offset=t,this.__isNative&&r(d[2]).API.setAnimatedNodeOffset(this.__getNativeTag(),t)}},{key:"flattenOffset",value:function(){this._value+=this._offset,this._offset=0,this.__isNative&&r(d[2]).API.flattenAnimatedNodeOffset(this.__getNativeTag())}},{key:"extractOffset",value:function(){this._offset+=this._value,this._value=0,this.__isNative&&r(d[2]).API.extractAnimatedNodeOffset(this.__getNativeTag())}},{key:"stopAnimation",value:function(t){this.stopTracking(),this._animation&&this._animation.stop(),this._animation=null,t&&t(this.__getValue())}},{key:"resetAnimation",value:function(t){this.stopAnimation(t),this._value=this._startingValue,this.__isNative&&r(d[2]).API.setAnimatedNodeValue(this.__getNativeTag(),this._startingValue)}},{key:"_onAnimatedValueUpdateReceived",value:function(t){this._updateValue(t,!1)}},{key:"interpolate",value:function(t){return new(r(d[7]))(this,t)}},{key:"animate",value:function(t,e){var n=this,s=null;t.__isInteraction&&(s=r(d[8]).createInteractionHandle());var u=this._animation;this._animation&&this._animation.stop(),this._animation=t,t.start(this._value,function(t){n._updateValue(t,!0)},function(t){n._animation=null,null!==s&&r(d[8]).clearInteractionHandle(s),e&&e(t)},u,this)}},{key:"stopTracking",value:function(){this._tracking&&this._tracking.__detach(),this._tracking=null}},{key:"track",value:function(t){this.stopTracking(),this._tracking=t}},{key:"_updateValue",value:function(t,n){if(void 0===t)throw new Error('AnimatedValue: Attempting to set value to undefined');this._value=t,n&&e(this),r(d[6])(r(d[0])(_.prototype),"__callListeners",this).call(this,this.__getValue())}},{key:"__getNativeConfig",value:function(){return{type:'value',value:this._value,offset:this._offset}}}]),_})(r(d[9]));m.exports=n},618,[422,419,619,417,402,403,489,622,625,623]); +__d(function(g,r,i,a,m,e,d){var t,n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),s=r(d[0])(r(d[5])),f='ios'===l.default.OS&&g.RN$Bridgeless?o.default:n.default,c=1,v=1,p=new Set,N=!1,b=[],A={getValue:function(t,n){(0,s.default)(f,'Native animated module is not available'),A.queueOperation(function(){f.getValue(t,n)})},setWaitingForIdentifier:function(t){p.add(t),N=!0},unsetWaitingForIdentifier:function(t){p.delete(t),0===p.size&&(N=!1,A.disableQueue())},disableQueue:function(){(0,s.default)(f,'Native animated module is not available'),'android'===l.default.OS&&f.startOperationBatch();for(var t=0,n=b.length;tn){if('identity'===u)return c;'clamp'===u&&(c=n)}return a===r?a:e===n?t<=e?a:r:(e===-1/0?c=-c:n===1/0?c-=e:c=(c-e)/(n-e),c=i(c),a===-1/0?c=-c:r===1/0?c+=a:c=c*(r-a)+a,c)}function r(t){var e=_r(d[3])(t);return null===e||'number'!=typeof e?t:"rgba("+((4278190080&(e=e||0))>>>24)+", "+((16711680&e)>>>16)+", "+((65280&e)>>>8)+", "+(255&e)/255+")"}var i=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g;function o(t){var e=t.outputRange;_r(d[2])(e.length>=2,'Bad output range'),u(e=e.map(r));var a=e[0].match(i).map(function(){return[]});e.forEach(function(t){t.match(i).forEach(function(t,e){a[e].push(+t)})});var o,c=e[0].match(i).map(function(e,r){return n(_r(d[4])({},t,{outputRange:a[r]}))}),l='string'==typeof(o=e[0])&&o.startsWith('rgb');return function(t){var n=0;return e[0].replace(i,function(){var e=+c[n++](t);return l&&(e=n<4?Math.round(e):Math.round(1e3*e)/1e3),String(e)})}}function u(t){for(var e=t[0].replace(i,''),n=1;n=t);++n);return n-1}function l(t){_r(d[2])(t.length>=2,'inputRange must have at least 2 elements');for(var e=1;e=t[e-1],'inputRange must be monotonically non-decreasing '+t)}function p(t,e){_r(d[2])(e.length>=2,t+' must have at least 2 elements'),_r(d[2])(2!==e.length||e[0]!==-1/0||e[1]!==1/0,t+'cannot be ]-infinity;+infinity[ '+e)}var f=(function(e){_r(d[5])(o,e);var a,r,i=(a=o,r=t(),function(){var t,e=_r(d[0])(a);if(r){var n=_r(d[0])(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return _r(d[1])(this,t)});function o(t,e){var a;return _r(d[6])(this,o),(a=i.call(this))._parent=t,a._config=e,a._interpolation=n(e),a}return _r(d[7])(o,[{key:"__makeNative",value:function(){this._parent.__makeNative(),_r(d[8])(_r(d[0])(o.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){var t=this._parent.__getValue();return _r(d[2])('number'==typeof t,'Cannot interpolate an input which is not a number.'),this._interpolation(t)}},{key:"interpolate",value:function(t){return new o(this,t)}},{key:"__attach",value:function(){this._parent.__addChild(this)}},{key:"__detach",value:function(){this._parent.__removeChild(this),_r(d[8])(_r(d[0])(o.prototype),"__detach",this).call(this)}},{key:"__transformDataType",value:function(t){return t.map(_r(d[9]).transformDataType)}},{key:"__getNativeConfig",value:function(){return{inputRange:this._config.inputRange,outputRange:this.__transformDataType(this._config.outputRange),extrapolateLeft:this._config.extrapolateLeft||this._config.extrapolate||'extend',extrapolateRight:this._config.extrapolateRight||this._config.extrapolate||'extend',type:'interpolation'}}}]),o})(_r(d[10]));f.__createInterpolation=n,m.exports=f},622,[422,419,425,547,436,417,402,403,489,619,623]); +__d(function(g,r,_i,a,m,_e,d){'use strict';function t(t,i){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(n)return(n=n.call(t)).next.bind(n);if(Array.isArray(t)||(n=e(t))||i&&t&&"number"==typeof t.length){n&&(t=n);var o=0;return function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function e(t,e){if(t){if("string"==typeof t)return i(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(t,e):void 0}}function i(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i0?setTimeout(h,0):setImmediate(h))}function h(){l=0;var f=o.size;c.forEach(function(n){return o.add(n)}),s.forEach(function(n){return o.delete(n)});var h=o.size;if(0!==f&&0===h?n.emit(t.Events.interactionComplete):0===f&&0!==h&&n.emit(t.Events.interactionStart),0===h)for(;u.hasTasksToProcess();)if(u.processNext(),p>0&&r(d[4]).getEventLoopRunningTime()>=p){v();break}c.clear(),s.clear()}m.exports=t},625,[407,414,425,626,437]); +__d(function(g,r,i,a,m,_e,d){'use strict';var e=(function(){function e(t){var u=t.onMoreTasks;r(d[0])(this,e),this._onMoreTasks=u,this._queueStack=[{tasks:[],popable:!1}]}return r(d[1])(e,[{key:"enqueue",value:function(e){this._getCurrentQueue().push(e)}},{key:"enqueueTasks",value:function(e){var t=this;e.forEach(function(e){return t.enqueue(e)})}},{key:"cancelTasks",value:function(e){this._queueStack=this._queueStack.map(function(t){return r(d[2])({},t,{tasks:t.tasks.filter(function(t){return-1===e.indexOf(t)})})}).filter(function(e,t){return e.tasks.length>0||0===t})}},{key:"hasTasksToProcess",value:function(){return this._getCurrentQueue().length>0}},{key:"processNext",value:function(){var e=this._getCurrentQueue();if(e.length){var t=e.shift();try{'object'==typeof t&&t.gen?this._genPromise(t):'object'==typeof t&&t.run?t.run():(r(d[3])('function'==typeof t,'Expected Function, SimpleTask, or PromiseTask, but got:\n'+JSON.stringify(t,null,2)),t())}catch(e){throw e.message='TaskQueue: Error with task '+(t.name||'')+': '+e.message,e}}}},{key:"_getCurrentQueue",value:function(){var e=this._queueStack.length-1,t=this._queueStack[e];return t.popable&&0===t.tasks.length&&this._queueStack.length>1?(this._queueStack.pop(),this._getCurrentQueue()):t.tasks}},{key:"_genPromise",value:function(e){var t=this;this._queueStack.push({tasks:[],popable:!1});var u=this._queueStack.length-1,s=this._queueStack[u];e.gen().then(function(){s.popable=!0,t.hasTasksToProcess()&&t._onMoreTasks()}).catch(function(t){throw t.message="TaskQueue: Error resolving Promise in task "+e.name+": "+t.message,t}).done()}}]),e})();m.exports=e},626,[402,403,436,425]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=1,n=(function(n){r(d[2])(o,n);var s,u,f=(s=o,u=t(),function(){var t,e=r(d[0])(s);if(u){var n=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function o(t){var e;r(d[3])(this,o),e=f.call(this);var n=t||{x:0,y:0};return'number'==typeof n.x&&'number'==typeof n.y?(e.x=new(r(d[4]))(n.x),e.y=new(r(d[4]))(n.y)):(r(d[5])(n.x instanceof r(d[4])&&n.y instanceof r(d[4]),"AnimatedValueXY must be initialized with an object of numbers or AnimatedValues."),e.x=n.x,e.y=n.y),e._listeners={},e}return r(d[6])(o,[{key:"setValue",value:function(t){this.x.setValue(t.x),this.y.setValue(t.y)}},{key:"setOffset",value:function(t){this.x.setOffset(t.x),this.y.setOffset(t.y)}},{key:"flattenOffset",value:function(){this.x.flattenOffset(),this.y.flattenOffset()}},{key:"extractOffset",value:function(){this.x.extractOffset(),this.y.extractOffset()}},{key:"__getValue",value:function(){return{x:this.x.__getValue(),y:this.y.__getValue()}}},{key:"resetAnimation",value:function(t){this.x.resetAnimation(),this.y.resetAnimation(),t&&t(this.__getValue())}},{key:"stopAnimation",value:function(t){this.x.stopAnimation(),this.y.stopAnimation(),t&&t(this.__getValue())}},{key:"addListener",value:function(t){var n=this,s=String(e++),u=function(e){e.value;t(n.__getValue())};return this._listeners[s]={x:this.x.addListener(u),y:this.y.addListener(u)},s}},{key:"removeListener",value:function(t){this.x.removeListener(this._listeners[t].x),this.y.removeListener(this._listeners[t].y),delete this._listeners[t]}},{key:"removeAllListeners",value:function(){this.x.removeAllListeners(),this.y.removeAllListeners(),this._listeners={}}},{key:"getLayout",value:function(){return{left:this.x,top:this.y}}},{key:"getTranslateTransform",value:function(){return[{translateX:this.x},{translateY:this.y}]}}]),o})(r(d[7]));m.exports=n},627,[422,419,417,402,618,425,403,623]); +__d(function(g,r,_i,_a,m,e,d){'use strict';var n=function(n,t){return n&&t.onComplete?function(){t.onComplete&&t.onComplete.apply(t,arguments),n&&n.apply(void 0,arguments)}:n||t.onComplete},t=function(n,t,i){if(n instanceof r(d[6])){var o=r(d[7])({},t),u=r(d[7])({},t);for(var s in t){var c=t[s],f=c.x,v=c.y;void 0!==f&&void 0!==v&&(o[s]=f,u[s]=v)}var p=i(n.x,o),l=i(n.y,u);return a([p,l],{stopTogether:!1})}return null},i=function i(o,a){var u=function(t,i,o){o=n(o,i);var a=t,u=i;a.stopTracking(),i.toValue instanceof r(d[8])?a.track(new(r(d[9]))(a,i.toValue,r(d[11]),u,o)):a.animate(new(r(d[11]))(u),o)};return t(o,a,i)||{start:function(n){u(o,a,n)},stop:function(){o.stopAnimation()},reset:function(){o.resetAnimation()},_startNativeLoop:function(n){var t=r(d[7])({},a,{iterations:n});u(o,t)},_isUsingNativeDriver:function(){return a.useNativeDriver||!1}}},o=function(n){var t=0;return{start:function(i){0===n.length?i&&i({finished:!0}):n[t].start(function o(a){a.finished&&++t!==n.length?n[t].start(o):i&&i(a)})},stop:function(){t1&&void 0!==arguments[1]?arguments[1]:{},i=t.iterations,o=void 0===i?-1:i,a=t.resetBeforeIteration,u=void 0===a||a,s=!1,c=0;return{start:function(t){n&&0!==o?n._isUsingNativeDriver()?n._startNativeLoop(o):(function i(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{finished:!0};s||c===o||!1===a.finished?t&&t(a):(c++,u&&n.reset(),n.start(i))})():t&&t({finished:!0})},stop:function(){s=!0,n.stop()},reset:function(){c=0,s=!1,n.reset()},_startNativeLoop:function(){throw new Error('Loops run using the native driver cannot contain Animated.loop animations')},_isUsingNativeDriver:function(){return n._isUsingNativeDriver()}}},event:function(n,t){var i=new(r(d[14]).AnimatedEvent)(n,t);return i.__isNative?i:i.__getHandler()},createAnimatedComponent:r(d[16]),attachNativeEvent:r(d[14]).attachNativeEvent,forkEvent:function(n,t){return n?n instanceof r(d[14]).AnimatedEvent?(n.__addListener(t),n):function(){'function'==typeof n&&n.apply(void 0,arguments),t.apply(void 0,arguments)}:t},unforkEvent:function(n,t){n&&n instanceof r(d[14]).AnimatedEvent&&n.__removeListener(t)},Event:r(d[14]).AnimatedEvent}},628,[629,630,631,632,633,634,627,436,624,635,636,639,642,618,643,622,644]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(u,e);var n,a,_=(n=u,a=t(),function(){var t,e=r(d[0])(n);if(a){var _=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,_)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function u(t,e){var n;return r(d[3])(this,u),(n=_.call(this))._a='number'==typeof t?new(r(d[4]))(t):t,n._b='number'==typeof e?new(r(d[4]))(e):e,n}return r(d[5])(u,[{key:"__makeNative",value:function(){this._a.__makeNative(),this._b.__makeNative(),r(d[6])(r(d[0])(u.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){return this._a.__getValue()+this._b.__getValue()}},{key:"interpolate",value:function(t){return new(r(d[7]))(this,t)}},{key:"__attach",value:function(){this._a.__addChild(this),this._b.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),this._b.__removeChild(this),r(d[6])(r(d[0])(u.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'addition',input:[this._a.__getNativeTag(),this._b.__getNativeTag()]}}}]),u})(r(d[8]));m.exports=e},629,[422,419,417,402,618,403,489,622,623]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(u,e);var n,a,_=(n=u,a=t(),function(){var t,e=r(d[0])(n);if(a){var _=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,_)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function u(t,e){var n;return r(d[3])(this,u),(n=_.call(this))._a='number'==typeof t?new(r(d[4]))(t):t,n._b='number'==typeof e?new(r(d[4]))(e):e,n}return r(d[5])(u,[{key:"__makeNative",value:function(){this._a.__makeNative(),this._b.__makeNative(),r(d[6])(r(d[0])(u.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){return this._a.__getValue()-this._b.__getValue()}},{key:"interpolate",value:function(t){return new(r(d[7]))(this,t)}},{key:"__attach",value:function(){this._a.__addChild(this),this._b.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),this._b.__removeChild(this),r(d[6])(r(d[0])(u.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'subtraction',input:[this._a.__getNativeTag(),this._b.__getNativeTag()]}}}]),u})(r(d[8]));m.exports=e},630,[422,419,417,402,618,403,489,622,623]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(_,e);var n,o,a=(n=_,o=t(),function(){var t,e=r(d[0])(n);if(o){var a=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,a)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function _(t,e){var n;return r(d[3])(this,_),(n=a.call(this))._warnedAboutDivideByZero=!1,(0===e||e instanceof r(d[4])&&0===e.__getValue())&&console.error('Detected potential division by zero in AnimatedDivision'),n._a='number'==typeof t?new(r(d[5]))(t):t,n._b='number'==typeof e?new(r(d[5]))(e):e,n}return r(d[6])(_,[{key:"__makeNative",value:function(){this._a.__makeNative(),this._b.__makeNative(),r(d[7])(r(d[0])(_.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){var t=this._a.__getValue(),e=this._b.__getValue();return 0===e?(this._warnedAboutDivideByZero||(console.error('Detected division by zero in AnimatedDivision'),this._warnedAboutDivideByZero=!0),0):(this._warnedAboutDivideByZero=!1,t/e)}},{key:"interpolate",value:function(t){return new(r(d[8]))(this,t)}},{key:"__attach",value:function(){this._a.__addChild(this),this._b.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),this._b.__removeChild(this),r(d[7])(r(d[0])(_.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'division',input:[this._a.__getNativeTag(),this._b.__getNativeTag()]}}}]),_})(r(d[9]));m.exports=e},631,[422,419,417,402,624,618,403,489,622,623]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(u,e);var n,a,_=(n=u,a=t(),function(){var t,e=r(d[0])(n);if(a){var _=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,_)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function u(t,e){var n;return r(d[3])(this,u),(n=_.call(this))._a='number'==typeof t?new(r(d[4]))(t):t,n._b='number'==typeof e?new(r(d[4]))(e):e,n}return r(d[5])(u,[{key:"__makeNative",value:function(){this._a.__makeNative(),this._b.__makeNative(),r(d[6])(r(d[0])(u.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){return this._a.__getValue()*this._b.__getValue()}},{key:"interpolate",value:function(t){return new(r(d[7]))(this,t)}},{key:"__attach",value:function(){this._a.__addChild(this),this._b.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),this._b.__removeChild(this),r(d[6])(r(d[0])(u.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'multiplication',input:[this._a.__getNativeTag(),this._b.__getNativeTag()]}}}]),u})(r(d[8]));m.exports=e},632,[422,419,417,402,618,403,489,622,623]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(o,e);var u,n,a=(u=o,n=t(),function(){var t,e=r(d[0])(u);if(n){var a=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,a)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function o(t,e){var u;return r(d[3])(this,o),(u=a.call(this))._a=t,u._modulus=e,u}return r(d[4])(o,[{key:"__makeNative",value:function(){this._a.__makeNative(),r(d[5])(r(d[0])(o.prototype),"__makeNative",this).call(this)}},{key:"__getValue",value:function(){return(this._a.__getValue()%this._modulus+this._modulus)%this._modulus}},{key:"interpolate",value:function(t){return new(r(d[6]))(this,t)}},{key:"__attach",value:function(){this._a.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),r(d[5])(r(d[0])(o.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'modulus',input:this._a.__getNativeTag(),modulus:this._modulus}}}]),o})(r(d[7]));m.exports=e},633,[422,419,417,402,403,489,622,623]); +__d(function(g,r,i,_a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(_,e);var a,n,u=(a=_,n=t(),function(){var t,e=r(d[0])(a);if(n){var u=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,u)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function _(t,e,a){var n;return r(d[3])(this,_),(n=u.call(this))._a=t,n._min=e,n._max=a,n._value=n._lastValue=n._a.__getValue(),n}return r(d[4])(_,[{key:"__makeNative",value:function(){this._a.__makeNative(),r(d[5])(r(d[0])(_.prototype),"__makeNative",this).call(this)}},{key:"interpolate",value:function(t){return new(r(d[6]))(this,t)}},{key:"__getValue",value:function(){var t=this._a.__getValue(),e=t-this._lastValue;return this._lastValue=t,this._value=Math.min(Math.max(this._value+e,this._min),this._max),this._value}},{key:"__attach",value:function(){this._a.__addChild(this)}},{key:"__detach",value:function(){this._a.__removeChild(this),r(d[5])(r(d[0])(_.prototype),"__detach",this).call(this)}},{key:"__getNativeConfig",value:function(){return{type:'diffclamp',input:this._a.__getNativeTag(),min:this._min,max:this._max}}}]),_})(r(d[7]));m.exports=e},634,[422,419,417,402,403,489,622,623]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(u,e);var n,_,o=(n=u,_=t(),function(){var t,e=r(d[0])(n);if(_){var o=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,o)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function u(t,e,n,_,s){var l;return r(d[3])(this,u),(l=o.call(this))._value=t,l._parent=e,l._animationClass=n,l._animationConfig=_,l._useNativeDriver=r(d[4]).shouldUseNativeDriver(_),l._callback=s,l.__attach(),l}return r(d[5])(u,[{key:"__makeNative",value:function(){this.__isNative=!0,this._parent.__makeNative(),r(d[6])(r(d[0])(u.prototype),"__makeNative",this).call(this),this._value.__makeNative()}},{key:"__getValue",value:function(){return this._parent.__getValue()}},{key:"__attach",value:function(){this._parent.__addChild(this),this._useNativeDriver&&this.__makeNative()}},{key:"__detach",value:function(){this._parent.__removeChild(this),r(d[6])(r(d[0])(u.prototype),"__detach",this).call(this)}},{key:"update",value:function(){this._value.animate(new this._animationClass(r(d[7])({},this._animationConfig,{toValue:this._animationConfig.toValue.__getValue()})),this._callback)}},{key:"__getNativeConfig",value:function(){var t=new this._animationClass(r(d[7])({},this._animationConfig,{toValue:void 0})).__getNativeAnimationConfig();return{type:'tracking',animationId:r(d[4]).generateNewAnimationId(),animationConfig:t,toValue:this._parent.__getNativeTag(),value:this._value.__getNativeTag()}}}]),u})(r(d[8]));m.exports=e},635,[422,419,417,402,619,403,489,436,624]); +__d(function(g,r,i,a,_m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var s=(function(s){r(d[2])(l,s);var e,n,o=(e=l,n=t(),function(){var t,s=r(d[0])(e);if(n){var o=r(d[0])(this).constructor;t=Reflect.construct(s,arguments,o)}else t=s.apply(this,arguments);return r(d[1])(this,t)});function l(t){var s,e,n,h,_,u,f,c,m,v,p,y;if(r(d[3])(this,l),(m=o.call(this))._overshootClamping=null!=(s=t.overshootClamping)&&s,m._restDisplacementThreshold=null!=(e=t.restDisplacementThreshold)?e:.001,m._restSpeedThreshold=null!=(n=t.restSpeedThreshold)?n:.001,m._initialVelocity=null!=(h=t.velocity)?h:0,m._lastVelocity=null!=(_=t.velocity)?_:0,m._toValue=t.toValue,m._delay=null!=(u=t.delay)?u:0,m._useNativeDriver=r(d[4]).shouldUseNativeDriver(t),m.__isInteraction=null!=(f=t.isInteraction)?f:!m._useNativeDriver,m.__iterations=null!=(c=t.iterations)?c:1,void 0!==t.stiffness||void 0!==t.damping||void 0!==t.mass)r(d[5])(void 0===t.bounciness&&void 0===t.speed&&void 0===t.tension&&void 0===t.friction,'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one'),m._stiffness=null!=(v=t.stiffness)?v:100,m._damping=null!=(p=t.damping)?p:10,m._mass=null!=(y=t.mass)?y:1;else if(void 0!==t.bounciness||void 0!==t.speed){var V,T;r(d[5])(void 0===t.tension&&void 0===t.friction&&void 0===t.stiffness&&void 0===t.damping&&void 0===t.mass,'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one');var b=r(d[6]).fromBouncinessAndSpeed(null!=(V=t.bounciness)?V:8,null!=(T=t.speed)?T:12);m._stiffness=b.stiffness,m._damping=b.damping,m._mass=1}else{var M,D,P=r(d[6]).fromOrigamiTensionAndFriction(null!=(M=t.tension)?M:40,null!=(D=t.friction)?D:7);m._stiffness=P.stiffness,m._damping=P.damping,m._mass=1}return r(d[5])(m._stiffness>0,'Stiffness value must be greater than 0'),r(d[5])(m._damping>0,'Damping value must be greater than 0'),r(d[5])(m._mass>0,'Mass value must be greater than 0'),m}return r(d[7])(l,[{key:"__getNativeAnimationConfig",value:function(){var t;return{type:'spring',overshootClamping:this._overshootClamping,restDisplacementThreshold:this._restDisplacementThreshold,restSpeedThreshold:this._restSpeedThreshold,stiffness:this._stiffness,damping:this._damping,mass:this._mass,initialVelocity:null!=(t=this._initialVelocity)?t:this._lastVelocity,toValue:this._toValue,iterations:this.__iterations}}},{key:"start",value:function(t,s,e,n,o){var h=this;if(this.__active=!0,this._startPosition=t,this._lastPosition=this._startPosition,this._onUpdate=s,this.__onEnd=e,this._lastTime=Date.now(),this._frameTime=0,n instanceof l){var _=n.getInternalState();this._lastPosition=_.lastPosition,this._lastVelocity=_.lastVelocity,this._initialVelocity=this._lastVelocity,this._lastTime=_.lastTime}var u=function(){h._useNativeDriver?h.__startNativeAnimation(o):h.onUpdate()};this._delay?this._timeout=setTimeout(u,this._delay):u()}},{key:"getInternalState",value:function(){return{lastPosition:this._lastPosition,lastVelocity:this._lastVelocity,lastTime:this._lastTime}}},{key:"onUpdate",value:function(){var t=Date.now();t>this._lastTime+64&&(t=this._lastTime+64);var s=(t-this._lastTime)/1e3;this._frameTime+=s;var e=this._damping,n=this._mass,o=this._stiffness,l=-this._initialVelocity,h=e/(2*Math.sqrt(o*n)),_=Math.sqrt(o/n),u=_*Math.sqrt(1-h*h),f=this._toValue-this._startPosition,c=0,m=0,v=this._frameTime;if(h<1){var p=Math.exp(-h*_*v);c=this._toValue-p*((l+h*_*f)/u*Math.sin(u*v)+f*Math.cos(u*v)),m=h*_*p*(Math.sin(u*v)*(l+h*_*f)/u+f*Math.cos(u*v))-p*(Math.cos(u*v)*(l+h*_*f)-u*f*Math.sin(u*v))}else{var y=Math.exp(-_*v);c=this._toValue-y*(f+(l+_*f)*v),m=y*(l*(v*_-1)+v*f*(_*_))}if(this._lastTime=t,this._lastPosition=c,this._lastVelocity=m,this._onUpdate(c),this.__active){var V=!1;this._overshootClamping&&0!==this._stiffness&&(V=this._startPositionthis._toValue:c18&&A<=44?p(A):h(A),s(2*M-M*M,v,.01));return{stiffness:n(x),damping:t(B)}}}},637,[]); +__d(function(g,r,i,a,m,_e,d){'use strict';var t=1,n=(function(){function n(){r(d[0])(this,n)}return r(d[1])(n,[{key:"start",value:function(t,n,e,o,_){}},{key:"stop",value:function(){this.__nativeId&&r(d[2]).API.stopAnimation(this.__nativeId)}},{key:"__getNativeAnimationConfig",value:function(){throw new Error('This animation type cannot be offloaded to native')}},{key:"__debouncedOnEnd",value:function(t){var n=this.__onEnd;this.__onEnd=null,n&&n(t)}},{key:"__startNativeAnimation",value:function(n){var e=t+":startAnimation";t+=1,r(d[2]).API.setWaitingForIdentifier(e);try{n.__makeNative(),this.__nativeId=r(d[2]).generateNewAnimationId(),r(d[2]).API.startAnimatingNode(this.__nativeId,n.__getNativeTag(),this.__getNativeAnimationConfig(),this.__debouncedOnEnd.bind(this))}catch(t){throw t}finally{r(d[2]).API.unsetWaitingForIdentifier(e)}}}]),n})();m.exports=n},638,[402,403,619]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e;function n(){if(!e){var t=r(d[2]);e=t.inOut(t.ease)}return e}var s=(function(e){r(d[3])(_,e);var s,o,u=(s=_,o=t(),function(){var t,e=r(d[0])(s);if(o){var n=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function _(t){var e,s,o,h,l,c;return r(d[4])(this,_),(c=u.call(this))._toValue=t.toValue,c._easing=null!=(e=t.easing)?e:n(),c._duration=null!=(s=t.duration)?s:500,c._delay=null!=(o=t.delay)?o:0,c.__iterations=null!=(h=t.iterations)?h:1,c._useNativeDriver=r(d[5]).shouldUseNativeDriver(t),c.__isInteraction=null!=(l=t.isInteraction)?l:!c._useNativeDriver,c}return r(d[6])(_,[{key:"__getNativeAnimationConfig",value:function(){for(var t=[],e=Math.round(this._duration/16.666666666666668),n=0;n=this._startTime+this._duration)return 0===this._duration?this._onUpdate(this._toValue):this._onUpdate(this._fromValue+this._easing(1)*(this._toValue-this._fromValue)),void this.__debouncedOnEnd({finished:!0});this._onUpdate(this._fromValue+this._easing((t-this._startTime)/this._duration)*(this._toValue-this._fromValue)),this.__active&&(this._animationFrame=requestAnimationFrame(this.onUpdate.bind(this)))}},{key:"stop",value:function(){r(d[7])(r(d[0])(_.prototype),"stop",this).call(this),this.__active=!1,clearTimeout(this._timeout),g.cancelAnimationFrame(this._animationFrame),this.__debouncedOnEnd({finished:!1})}}]),_})(r(d[8]));m.exports=s},639,[422,419,640,417,402,619,403,489,638]); +__d(function(g,r,i,a,m,e,d){'use strict';var n,u=(function(){function u(){r(d[0])(this,u)}return r(d[1])(u,null,[{key:"step0",value:function(n){return n>0?1:0}},{key:"step1",value:function(n){return n>=1?1:0}},{key:"linear",value:function(n){return n}},{key:"ease",value:function(t){return n||(n=u.bezier(.42,0,1,1)),n(t)}},{key:"quad",value:function(n){return n*n}},{key:"cubic",value:function(n){return n*n*n}},{key:"poly",value:function(n){return function(u){return Math.pow(u,n)}}},{key:"sin",value:function(n){return 1-Math.cos(n*Math.PI/2)}},{key:"circle",value:function(n){return 1-Math.sqrt(1-n*n)}},{key:"exp",value:function(n){return Math.pow(2,10*(n-1))}},{key:"elastic",value:function(){var n=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:1)*Math.PI;return function(u){return 1-Math.pow(Math.cos(u*Math.PI/2),3)*Math.cos(u*n)}}},{key:"back",value:function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1.70158;return function(u){return u*u*((n+1)*u-n)}}},{key:"bounce",value:function(n){if(n<.36363636363636365)return 7.5625*n*n;if(n<.7272727272727273){var u=n-.5454545454545454;return 7.5625*u*u+.75}if(n<.9090909090909091){var t=n-.8181818181818182;return 7.5625*t*t+.9375}var o=n-.9545454545454546;return 7.5625*o*o+.984375}},{key:"bezier",value:function(n,u,t,o){return r(d[2])(n,u,t,o)}},{key:"in",value:function(n){return n}},{key:"out",value:function(n){return function(u){return 1-n(1-u)}}},{key:"inOut",value:function(n){return function(u){return u<.5?n(2*u)/2:1-n(2*(1-u))/2}}}]),u})();m.exports=u},640,[402,403,641]); +__d(function(g,r,_i,a,m,e,d){'use strict';var n=4,t=.001,u=1e-7,o=10,f=.1,i='function'==typeof Float32Array;function c(n,t){return 1-3*t+3*n}function v(n,t){return 3*t-6*n}function s(n){return 3*n}function w(n,t,u){return((c(t,u)*n+v(t,u))*n+s(t))*n}function l(n,t,u){return 3*c(t,u)*n*n+2*v(t,u)*n+s(t)}function y(n,t,f,i,c){var v,s,l=0,y=t,b=f;do{(v=w(s=y+(b-y)/2,i,c)-n)>0?b=s:y=s}while(Math.abs(v)>u&&++l=0&&n<=1&&o>=0&&o<=1))throw new Error('bezier x values must be in [0, 1] range');var v=i?new Float32Array(11):new Array(11);if(n!==u||o!==c)for(var s=0;s<11;++s)v[s]=w(s*f,n,o);function h(u){for(var i=0,c=1;10!==c&&v[c]<=u;++c)i+=f;var s=i+(u-v[--c])/(v[c+1]-v[c])*f,w=l(s,n,o);return w>=t?b(u,s,n,o):0===w?s:y(u,i,i+f,n,o)}return function(t){return n===u&&o===c?t:0===t?0:1===t?1:w(h(t),u,c)}}},641,[]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e=(function(e){r(d[2])(c,e);var n,s,o=(n=c,s=t(),function(){var t,e=r(d[0])(n);if(s){var o=r(d[0])(this).constructor;t=Reflect.construct(e,arguments,o)}else t=e.apply(this,arguments);return r(d[1])(this,t)});function c(t){var e,n,s,u;return r(d[3])(this,c),(u=o.call(this))._deceleration=null!=(e=t.deceleration)?e:.998,u._velocity=t.velocity,u._useNativeDriver=r(d[4]).shouldUseNativeDriver(t),u.__isInteraction=null!=(n=t.isInteraction)?n:!u._useNativeDriver,u.__iterations=null!=(s=t.iterations)?s:1,u}return r(d[5])(c,[{key:"__getNativeAnimationConfig",value:function(){return{type:'decay',deceleration:this._deceleration,velocity:this._velocity,iterations:this.__iterations}}},{key:"start",value:function(t,e,n,s,o){this.__active=!0,this._lastValue=t,this._fromValue=t,this._onUpdate=e,this.__onEnd=n,this._startTime=Date.now(),this._useNativeDriver?this.__startNativeAnimation(o):this._animationFrame=requestAnimationFrame(this.onUpdate.bind(this))}},{key:"onUpdate",value:function(){var t=Date.now(),e=this._fromValue+this._velocity/(1-this._deceleration)*(1-Math.exp(-(1-this._deceleration)*(t-this._startTime)));this._onUpdate(e),Math.abs(this._lastValue-e)<.1?this.__debouncedOnEnd({finished:!0}):(this._lastValue=e,this.__active&&(this._animationFrame=requestAnimationFrame(this.onUpdate.bind(this))))}},{key:"stop",value:function(){r(d[6])(r(d[0])(c.prototype),"stop",this).call(this),this.__active=!1,g.cancelAnimationFrame(this._animationFrame),this.__debouncedOnEnd({finished:!1})}}]),c})(r(d[7]));m.exports=e},642,[422,419,417,402,619,403,489,638]); +__d(function(g,r,i,a,m,e,d){'use strict';function t(t,n,s){var v=[];r(d[1])(s[0]&&s[0].nativeEvent,'Native driven events only support animated values contained inside `nativeEvent`.'),(function t(n,s){if(n instanceof r(d[0]))n.__makeNative(),v.push({nativeEventPath:s,animatedValueTag:n.__getNativeTag()});else if('object'==typeof n)for(var o in n)t(n[o],s.concat(o))})(s[0].nativeEvent,[]);var o=r(d[2]).findNodeHandle(t);return null!=o&&v.forEach(function(t){r(d[3]).API.addAnimatedEventToView(o,n,t)}),{detach:function(){null!=o&&v.forEach(function(t){r(d[3]).API.removeAnimatedEventFromView(o,n,t.animatedValueTag)})}}}var n=(function(){function n(t,s){r(d[4])(this,n),this._listeners=[],this._argMapping=t,null==s&&(console.warn('Animated.event now requires a second argument for options'),s={useNativeDriver:!1}),s.listener&&this.__addListener(s.listener),this._callListeners=this._callListeners.bind(this),this._attachedEvent=null,this.__isNative=r(d[3]).shouldUseNativeDriver(s)}return r(d[5])(n,[{key:"__addListener",value:function(t){this._listeners.push(t)}},{key:"__removeListener",value:function(t){this._listeners=this._listeners.filter(function(n){return n!==t})}},{key:"__attach",value:function(n,s){r(d[1])(this.__isNative,'Only native driven events need to be attached.'),this._attachedEvent=t(n,s,this._argMapping)}},{key:"__detach",value:function(t,n){r(d[1])(this.__isNative,'Only native driven events need to be detached.'),this._attachedEvent&&this._attachedEvent.detach()}},{key:"__getHandler",value:function(){var t=this;if(this.__isNative)return this._callListeners;return function(){for(var n=arguments.length,s=new Array(n),v=0;v1){for(var l=[],s=0;s1?Math.ceil(e.length/n):e.length}return 0},t._keyExtractor=function(e,n){var o,l=v(t.props.numColumns),s=null!=(o=t.props.keyExtractor)?o:r(d[10]).keyExtractor;return l>1?Array.isArray(e)?e.map(function(e,t){return s(e,n*l+t)}).join(':'):void r(d[11])(Array.isArray(e),"FlatList: Encountered internal consistency error, expected each item to consist of an array with 1-%s columns; instead, received a single item.",l):s(e,n)},t._renderer=function(){var e=t.props,o=e.ListItemComponent,l=e.renderItem,s=e.columnWrapperStyle,u=v(t.props.numColumns),c=o?'ListItemComponent':'renderItem',f=function(e){return o?h.createElement(o,e):l?l(e):null};return(0,n.default)({},c,function(e){if(u>1){var t=e.item,n=e.index;return r(d[11])(Array.isArray(t),'Expected array of items with numColumns > 1'),h.createElement(r(d[12]),{style:r(d[13]).compose(y.row,s)},t.map(function(t,o){var l=f({item:t,index:n*u+o,separators:e.separators});return null!=l?h.createElement(h.Fragment,{key:o},l):null}))}return f(e)})},t._checkProps(t.props),t.props.viewabilityConfigCallbackPairs?t._virtualizedListPairs=t.props.viewabilityConfigCallbackPairs.map(function(e){return{viewabilityConfig:e.viewabilityConfig,onViewableItemsChanged:t._createOnViewableItemsChanged(e.onViewableItemsChanged)}}):t.props.onViewableItemsChanged&&t._virtualizedListPairs.push({viewabilityConfig:t.props.viewabilityConfig,onViewableItemsChanged:t._createOnViewableItemsChanged(t.props.onViewableItemsChanged)}),t}return(0,l.default)(k,[{key:"scrollToEnd",value:function(e){this._listRef&&this._listRef.scrollToEnd(e)}},{key:"scrollToIndex",value:function(e){this._listRef&&this._listRef.scrollToIndex(e)}},{key:"scrollToItem",value:function(e){this._listRef&&this._listRef.scrollToItem(e)}},{key:"scrollToOffset",value:function(e){this._listRef&&this._listRef.scrollToOffset(e)}},{key:"recordInteraction",value:function(){this._listRef&&this._listRef.recordInteraction()}},{key:"flashScrollIndicators",value:function(){this._listRef&&this._listRef.flashScrollIndicators()}},{key:"getScrollResponder",value:function(){if(this._listRef)return this._listRef.getScrollResponder()}},{key:"getNativeScrollRef",value:function(){if(this._listRef)return this._listRef.getScrollRef()}},{key:"getScrollableNode",value:function(){if(this._listRef)return this._listRef.getScrollableNode()}},{key:"setNativeProps",value:function(e){this._listRef&&this._listRef.setNativeProps(e)}},{key:"componentDidUpdate",value:function(e){r(d[11])(e.numColumns===this.props.numColumns,"Changing numColumns on the fly is not supported. Change the key prop on FlatList when changing the number of columns to force a fresh render of the component."),r(d[11])(e.onViewableItemsChanged===this.props.onViewableItemsChanged,'Changing onViewableItemsChanged on the fly is not supported'),r(d[11])(!r(d[14])(e.viewabilityConfig,this.props.viewabilityConfig),'Changing viewabilityConfig on the fly is not supported'),r(d[11])(e.viewabilityConfigCallbackPairs===this.props.viewabilityConfigCallbackPairs,'Changing viewabilityConfigCallbackPairs on the fly is not supported'),this._checkProps(this.props)}},{key:"_checkProps",value:function(e){var t=e.getItem,n=e.getItemCount,o=e.horizontal,l=e.columnWrapperStyle,s=e.onViewableItemsChanged,u=e.viewabilityConfigCallbackPairs,c=v(this.props.numColumns);r(d[11])(!t&&!n,'FlatList does not support custom data formats.'),c>1?r(d[11])(!o,'numColumns does not support horizontal.'):r(d[11])(!l,'columnWrapperStyle not supported for single column lists'),r(d[11])(!(s&&u),"FlatList does not support setting both onViewableItemsChanged and viewabilityConfigCallbackPairs.")}},{key:"_pushMultiColumnViewable",value:function(e,n){var o,l=v(this.props.numColumns),s=null!=(o=this.props.keyExtractor)?o:r(d[10]).keyExtractor;n.item.forEach(function(o,u){r(d[11])(null!=n.index,'Missing index!');var c=n.index*l+u;e.push((0,t.default)({},n,{item:o,key:s(o,c),index:c}))})}},{key:"_createOnViewableItemsChanged",value:function(e){var t=this;return function(n){var o=v(t.props.numColumns);if(e)if(o>1){var l=[],s=[];n.viewableItems.forEach(function(e){return t._pushMultiColumnViewable(s,e)}),n.changed.forEach(function(e){return t._pushMultiColumnViewable(l,e)}),e({viewableItems:s,changed:l})}else e(n)}}},{key:"render",value:function(){var n,o=this.props,l=(o.numColumns,o.columnWrapperStyle,o.removeClippedSubviews),s=(0,e.default)(o,f);return h.createElement(r(d[15]),(0,t.default)({},s,{getItem:this._getItem,getItemCount:this._getItemCount,keyExtractor:this._keyExtractor,ref:this._captureRef,viewabilityConfigCallbackPairs:this._virtualizedListPairs,removeClippedSubviews:(n=l,null==n||n)},this._renderer()))}}]),k})(h.PureComponent),y=r(d[13]).create({row:{flexDirection:'row'}});m.exports=C},651,[407,508,436,652,402,403,417,419,422,534,653,425,579,578,571,654]); +__d(function(g,r,i,a,m,e,d){m.exports=function(t,n,o){return n in t?Object.defineProperty(t,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[n]=o,t},m.exports.__esModule=!0,m.exports.default=m.exports},652,[]); +__d(function(g,r,i,a,m,e,d){'use strict';Object.defineProperty(e,"__esModule",{value:!0}),e.computeWindowedRenderLimits=function(n,s,o,u,c,h,v){var b=s(n);if(0===b)return c;var M=v.offset,y=v.velocity,x=v.visibleLength,p=Math.max(0,M),w=p+x,O=(u-1)*x,k=y>1?'after':y<-1?'before':'none',_=Math.max(0,p-.5*O),j=Math.max(0,w+.5*O);if(h(b-1).offset<_)return{first:Math.max(0,b-1-o),last:b-1};var L=f([_,p,w,j],b,h),S=(0,t.default)(L,4),C=S[0],E=S[1],J=S[2],N=S[3];C=null==C?0:C,E=null==E?Math.max(0,C):E,N=null==N?b-1:N,J=null==J?Math.min(N,E+o-1):J;var R={first:E,last:J},B=l(c,R);for(;!(E<=C&&J>=N);){var F=B>=o,P=E<=c.first||E>c.last,T=E>C&&(!F||!P),W=J>=c.last||J=E&&E>=0&&J=C&&J<=N&&E<=R.first&&J>=R.last))throw new Error('Bad window calculation '+JSON.stringify({first:E,last:J,itemCount:b,overscanFirst:C,overscanLast:N,visible:R}));return{first:E,last:J}},e.elementsThatOverlapOffsets=f,e.keyExtractor=function(t,n){if('object'==typeof t&&null!=(null==t?void 0:t.key))return t.key;if('object'==typeof t&&null!=(null==t?void 0:t.id))return t.id;return String(n)},e.newRangeCount=l;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2]));function f(t,f,l){for(var s=[],o=0,u=0;u=t[v]&&(s[v]=u,o++,v===t.length-1))return(0,n.default)(o===t.length,'bad offsets input, should be in increasing order: %s',JSON.stringify(t)),s;return s}function l(t,n){return n.last-n.first+1-Math.max(0,1+Math.min(n.last,t.last)-Math.max(n.first,t.first))}},653,[407,430,425]); +__d(function(g,r,_i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),n=r(d[0])(r(d[4])),s=r(d[0])(r(d[5])),i=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),c=r(d[0])(r(d[8])),h=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var o=u(t);if(o&&o.has(e))return o.get(e);var n={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var l=s?Object.getOwnPropertyDescriptor(e,i):null;l&&(l.get||l.set)?Object.defineProperty(n,i,l):n[i]=e[i]}n.default=e,o&&o.set(e,n);return n})(r(d[9]));function u(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(u=function(e){return e?o:t})(e)}function p(e,t){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(o)return(o=o.call(e)).next.bind(o);if(Array.isArray(e)||(o=f(e))||t&&e&&"number"==typeof e.length){o&&(e=o);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(e,t){if(e){if("string"==typeof e)return _(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);return"Object"===o&&e.constructor&&(o=e.constructor.name),"Map"===o||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?_(e,t):void 0}}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,n=new Array(t);o0&&t>0&&null!=i.props.initialScrollIndex&&i.props.initialScrollIndex>0&&!i._hasDoneInitialScroll&&(null==i.props.contentOffset&&i.scrollToIndex({animated:!1,index:i.props.initialScrollIndex}),i._hasDoneInitialScroll=!0),i.props.onContentSizeChange&&i.props.onContentSizeChange(e,t),i._scrollMetrics.contentLength=i._selectLength({height:t,width:e}),i._scheduleCellsToRenderUpdate(),i._maybeCallOnEndReached()},i._convertParentScrollMetrics=function(e){var t=e.offset-i._offsetFromParentVirtualizedList,o=e.visibleLength,n=t-i._scrollMetrics.offset;return{visibleLength:o,contentLength:i._scrollMetrics.contentLength,offset:t,dOffset:n}},i._onScroll=function(e){i._nestedChildLists.forEach(function(t){t.ref&&t.ref._onScroll(e)}),i.props.onScroll&&i.props.onScroll(e);var t=e.timeStamp,o=i._selectLength(e.nativeEvent.layoutMeasurement),n=i._selectLength(e.nativeEvent.contentSize),s=i._selectOffset(e.nativeEvent.contentOffset),l=s-i._scrollMetrics.offset;if(i._isNestedWithSameOrientation()){if(0===i._scrollMetrics.contentLength)return;var c=i._convertParentScrollMetrics({visibleLength:o,offset:s});o=c.visibleLength,n=c.contentLength,s=c.offset,l=c.dOffset}var h=i._scrollMetrics.timestamp?Math.max(1,t-i._scrollMetrics.timestamp):1,u=l/h;h>500&&i._scrollMetrics.dt>500&&n>5*o&&!i._hasWarned.perf&&(r(d[14])("VirtualizedList: You have a large list that is slow to update - make sure your renderItem function renders components that follow React performance best practices like PureComponent, shouldComponentUpdate, etc.",{dt:h,prevDt:i._scrollMetrics.dt,contentLength:n}),i._hasWarned.perf=!0),i._scrollMetrics={contentLength:n,dt:h,dOffset:l,offset:s,timestamp:t,velocity:u,visibleLength:o},i._updateViewableItems(i.props.data),i.props&&(i._maybeCallOnEndReached(),0!==u&&i._fillRateHelper.activate(),i._computeBlankness(),i._scheduleCellsToRenderUpdate())},i._onScrollBeginDrag=function(e){i._nestedChildLists.forEach(function(t){t.ref&&t.ref._onScrollBeginDrag(e)}),i._viewabilityTuples.forEach(function(e){e.viewabilityHelper.recordInteraction()}),i._hasInteracted=!0,i.props.onScrollBeginDrag&&i.props.onScrollBeginDrag(e)},i._onScrollEndDrag=function(e){i._nestedChildLists.forEach(function(t){t.ref&&t.ref._onScrollEndDrag(e)});var t=e.nativeEvent.velocity;t&&(i._scrollMetrics.velocity=i._selectOffset(t)),i._computeBlankness(),i.props.onScrollEndDrag&&i.props.onScrollEndDrag(e)},i._onMomentumScrollBegin=function(e){i._nestedChildLists.forEach(function(t){t.ref&&t.ref._onMomentumScrollBegin(e)}),i.props.onMomentumScrollBegin&&i.props.onMomentumScrollBegin(e)},i._onMomentumScrollEnd=function(e){i._nestedChildLists.forEach(function(t){t.ref&&t.ref._onMomentumScrollEnd(e)}),i._scrollMetrics.velocity=0,i._computeBlankness(),i.props.onMomentumScrollEnd&&i.props.onMomentumScrollEnd(e)},i._updateCellsToRender=function(){var e=i.props,t=e.data,o=e.getItemCount,n=M(e.onEndReachedThreshold),s=i._isVirtualizationDisabled();i._updateViewableItems(t),t&&i.setState(function(e){var l,c=i._scrollMetrics,h=c.contentLength,u=c.offset,f=c.visibleLength;if(s){var _=h-f-u0&&h>0&&(i.props.initialScrollIndex&&!i._scrollMetrics.offset||(l=(0,r(d[15]).computeWindowedRenderLimits)(i.props.data,i.props.getItemCount,I(i.props.maxToRenderPerBatch),R(i.props.windowSize),e,i._getFrameMetricsApprox,i._scrollMetrics)));if(l&&i._nestedChildLists.size>0)for(var y=l.first,v=l.last,C=y;C<=v;C++){var L=i._indicesToKeys.get(C),b=L&&i._cellKeysToChildListKeys.get(L);if(b){for(var S,M=!1,x=p(b);!(S=x()).done;){var w=S.value,k=i._nestedChildLists.get(w);if(k&&k.ref&&k.ref.hasMore()){M=!0;break}}if(M){l.last=C;break}}}return null!=l&&l.first===e.first&&l.last===e.last&&(l=null),l})},i._createViewToken=function(e,t){var o=i.props,n=o.data,s=(0,o.getItem)(n,e);return{index:e,item:s,key:i._keyExtractor(s,e),isViewable:t}},i._getFrameMetricsApprox=function(e){var t=i._getFrameMetrics(e);if(t&&t.index===e)return t;var o=i.props.getItemLayout;return r(d[11])(!o,'Should not have to estimate frames when a measurement metrics function is provided'),{length:i._averageCellLength,offset:i._averageCellLength*e}},i._getFrameMetrics=function(e){var t=i.props,o=t.data,n=t.getItem,s=t.getItemCount,l=t.getItemLayout;r(d[11])(s(o)>e,'Tried to get frame for out of range index '+e);var c=n(o,e),h=c&&i._frames[i._keyExtractor(c,e)];return h&&h.index===e||l&&(h=l(o,e)),h},r(d[11])(!e.onScroll||!e.onScroll.__isNative,"Components based on VirtualizedList must be wrapped with Animated.createAnimatedComponent to support native onScroll events with useNativeDriver"),r(d[11])(R(e.windowSize)>0,'VirtualizedList: The windowSize prop must be present and set to a value greater than 0.'),i._fillRateHelper=new(r(d[16]))(i._getFrameMetrics),i._updateCellsToRenderBatcher=new(r(d[17]))(i._updateCellsToRender,null!=(n=i.props.updateCellsBatchingPeriod)?n:50),i.props.viewabilityConfigCallbackPairs?i._viewabilityTuples=i.props.viewabilityConfigCallbackPairs.map(function(e){return{viewabilityHelper:new(r(d[18]))(e.viewabilityConfig),onViewableItemsChanged:e.onViewableItemsChanged}}):i.props.onViewableItemsChanged&&i._viewabilityTuples.push({viewabilityHelper:new(r(d[18]))(i.props.viewabilityConfig),onViewableItemsChanged:i.props.onViewableItemsChanged});var l={first:i.props.initialScrollIndex||0,last:Math.min(i.props.getItemCount(i.props.data),(i.props.initialScrollIndex||0)+S(i.props.initialNumToRender))-1};if(i._isNestedWithSameOrientation()){var f=i.context.getNestedChildState(i._getListKey());f&&(l=f,i.state=f,i._frames=f.frames)}return i.state=l,i}return(0,n.default)(u,[{key:"scrollToEnd",value:function(e){var t=!e||e.animated,o=this.props.getItemCount(this.props.data)-1,n=this._getFrameMetricsApprox(o),s=Math.max(0,n.offset+n.length+this._footerLength-this._scrollMetrics.visibleLength);null!=this._scrollRef&&(null!=this._scrollRef.scrollTo?this._scrollRef.scrollTo(b(this.props.horizontal)?{x:s,animated:t}:{y:s,animated:t}):console.warn("No scrollTo method provided. This may be because you have two nested VirtualizedLists with the same orientation, or because you are using a custom component that does not implement scrollTo."))}},{key:"scrollToIndex",value:function(e){var t=this.props,o=t.data,n=t.horizontal,s=t.getItemCount,i=t.getItemLayout,l=t.onScrollToIndexFailed,c=e.animated,h=e.index,u=e.viewOffset,p=e.viewPosition;if(r(d[11])(h>=0,"scrollToIndex out of range: requested index "+h+" but minimum is 0"),r(d[11])(s(o)>=1,"scrollToIndex out of range: item length "+s(o)+" but minimum is 1"),r(d[11])(hthis._highestMeasuredFrameIndex)return r(d[11])(!!l,"scrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed, otherwise there is no way to know the location of offscreen indices or handle failures."),void l({averageItemLength:this._averageCellLength,highestMeasuredFrameIndex:this._highestMeasuredFrameIndex,index:h});var f=this._getFrameMetricsApprox(h),_=Math.max(0,f.offset-(p||0)*(this._scrollMetrics.visibleLength-f.length))-(u||0);null!=this._scrollRef&&(null!=this._scrollRef.scrollTo?this._scrollRef.scrollTo(n?{x:_,animated:c}:{y:_,animated:c}):console.warn("No scrollTo method provided. This may be because you have two nested VirtualizedLists with the same orientation, or because you are using a custom component that does not implement scrollTo."))}},{key:"scrollToItem",value:function(e){for(var o=e.item,n=this.props,s=n.data,i=n.getItem,l=(0,n.getItemCount)(s),c=0;c0){C=!1,L='';var x=this._getSpacerKey(!p),w=this.props.initialScrollIndex?-1:S(this.props.initialNumToRender)-1,k=this.state,T=k.first,z=k.last;this._pushCells(y,I,v,0,w,_);var K=Math.max(w+1,T);if(!f&&T>w+1){var O=!1;if(v.size>0)for(var P=l?1:0,F=K-1;F>w;F--)if(v.has(F+P)){var V=this._getFrameMetricsApprox(w),D=this._getFrameMetricsApprox(F),N=D.offset-V.offset-(this.props.initialScrollIndex?0:V.length);y.push(h.createElement(r(d[10]),{key:"$sticky_lead",style:(0,e.default)({},x,N)})),this._pushCells(y,I,v,F,F,_);var A=this._getFrameMetricsApprox(T).offset-(D.offset+D.length);y.push(h.createElement(r(d[10]),{key:"$sticky_trail",style:(0,e.default)({},x,A)})),O=!0;break}if(!O){var B=this._getFrameMetricsApprox(w),H=this._getFrameMetricsApprox(T).offset-(B.offset+B.length);y.push(h.createElement(r(d[10]),{key:"$lead_spacer",style:(0,e.default)({},x,H)}))}}if(this._pushCells(y,I,v,K,z,_),!this._hasWarned.keys&&C&&(console.warn("VirtualizedList: missing keys for items, make sure to specify a key or id property on each item or provide a custom keyExtractor.",L),this._hasWarned.keys=!0),!f&&zu&&(this._sentEndForContentLength=0)}},{key:"_scheduleCellsToRenderUpdate",value:function(){var e=this.state,t=e.first,o=e.last,n=this._scrollMetrics,s=n.offset,i=n.visibleLength,l=n.velocity,c=this.props.getItemCount(this.props.data),h=!1,u=M(this.props.onEndReachedThreshold)*i/2;if(t>0){var p=s-this._getFrameMetricsApprox(t).offset;h=h||p<0||l<-2&&p2&&f0&&(this._scrollAnimatedValueAttachment=p.default.attachNativeEvent(this._scrollViewRef,'onScroll',[{nativeEvent:{contentOffset:{y:this._scrollAnimatedValue}}}]))}},{key:"_setStickyHeaderRef",value:function(e,o){o?this._stickyHeaderRefs.set(e,o):this._stickyHeaderRefs.delete(e)}},{key:"_onStickyHeaderLayout",value:function(e,o,t){var n=this.props.stickyHeaderIndices;if(n){var l=y.Children.toArray(this.props.children);if(t===this._getKeyForIndex(e,l)){var s=o.nativeEvent.layout.y;this._headerLayoutYs.set(t,s);var u=n[n.indexOf(e)-1];if(null!=u){var c=this._stickyHeaderRefs.get(this._getKeyForIndex(u,l));c&&c.setNextHeaderY&&c.setNextHeaderY(s)}}}}},{key:"render",value:function(){var t=this,n=!0===this.props.horizontal?P:F,l=(0,o.default)(n,2),s=l[0],u=l[1],c=[!0===this.props.horizontal&&Y.contentContainerHorizontal,this.props.contentContainerStyle],p=null==this.props.onContentSizeChange?null:{onLayout:this._handleContentOnLayout},f=this.props.stickyHeaderIndices,S=this.props.children;if(null!=f&&f.length>0){var b=y.Children.toArray(this.props.children);S=b.map(function(e,o){var n=e?f.indexOf(o):-1;if(n>-1){var l=e.key,s=f[n+1],u=t.props.StickyHeaderComponent||_.default;return y.createElement(u,{key:l,nativeID:'StickyHeader-'+l,ref:function(e){return t._setStickyHeaderRef(l,e)},nextHeaderLayoutY:t._headerLayoutYs.get(t._getKeyForIndex(s,b)),onLayout:function(e){return t._onStickyHeaderLayout(o,e,l)},scrollAnimatedValue:t._scrollAnimatedValue,inverted:t.props.invertStickyHeaders,hiddenOnScroll:t.props.stickyHeaderHiddenOnScroll,scrollViewHeight:t.state.layoutHeight},e)}return e})}S=y.createElement(D.default.Provider,{value:!0===this.props.horizontal?D.HORIZONTAL:D.VERTICAL},S);var R=Array.isArray(f)&&f.length>0,T=y.createElement(u,(0,e.default)({},p,{ref:this._setInnerViewRef,style:c,removeClippedSubviews:('android'!==h.default.OS||!R)&&this.props.removeClippedSubviews,collapsable:!1}),S),w=void 0!==this.props.alwaysBounceHorizontal?this.props.alwaysBounceHorizontal:this.props.horizontal,V=void 0!==this.props.alwaysBounceVertical?this.props.alwaysBounceVertical:!this.props.horizontal,k=!0===this.props.horizontal?Y.baseHorizontal:Y.baseVertical,E=(0,e.default)({},this.props,{alwaysBounceHorizontal:w,alwaysBounceVertical:V,style:v.default.compose(k,this.props.style),onContentSizeChange:null,onLayout:this._handleLayout,onMomentumScrollBegin:this._handleMomentumScrollBegin,onMomentumScrollEnd:this._handleMomentumScrollEnd,onResponderGrant:this._handleResponderGrant,onResponderReject:this._handleResponderReject,onResponderRelease:this._handleResponderRelease,onResponderTerminationRequest:this._handleResponderTerminationRequest,onScrollBeginDrag:this._handleScrollBeginDrag,onScrollEndDrag:this._handleScrollEndDrag,onScrollShouldSetResponder:this._handleScrollShouldSetResponder,onStartShouldSetResponder:this._handleStartShouldSetResponder,onStartShouldSetResponderCapture:this._handleStartShouldSetResponderCapture,onTouchEnd:this._handleTouchEnd,onTouchMove:this._handleTouchMove,onTouchStart:this._handleTouchStart,onTouchCancel:this._handleTouchCancel,onScroll:this._handleScroll,scrollEventThrottle:R?1:this.props.scrollEventThrottle,sendMomentumEvents:!(!this.props.onMomentumScrollBegin&&!this.props.onMomentumScrollEnd),snapToStart:!1!==this.props.snapToStart,snapToEnd:!1!==this.props.snapToEnd,pagingEnabled:h.default.select({ios:!0===this.props.pagingEnabled&&null==this.props.snapToInterval&&null==this.props.snapToOffsets,android:!0===this.props.pagingEnabled||null!=this.props.snapToInterval||null!=this.props.snapToOffsets})}),K=this.props.decelerationRate;null!=K&&(E.decelerationRate=(0,O.default)(K));var A=this.props.refreshControl;if(A){if('ios'===h.default.OS)return y.createElement(s,(0,e.default)({},E,{ref:this._setNativeRef}),A,T);if('android'===h.default.OS){var N=(0,I.default)((0,H.default)(E.style)),M=N.outer,W=N.inner;return y.cloneElement(A,{style:v.default.compose(k,M)},y.createElement(s,(0,e.default)({},E,{style:v.default.compose(k,W),ref:this._setNativeRef}),T))}}return y.createElement(s,(0,e.default)({},E,{ref:this._setNativeRef}),T)}}]),x})(y.Component);G.Context=D.default;var Y=v.default.create({baseVertical:{flexGrow:1,flexShrink:1,flexDirection:'column',overflow:'scroll'},baseHorizontal:{flexGrow:1,flexShrink:1,flexDirection:'row',overflow:'scroll'},contentContainerHorizontal:{flexDirection:'row'}});function U(o,t){return y.createElement(G,(0,e.default)({},o,{scrollViewRef:t}))}U.displayName='ScrollView';var Z=y.forwardRef(U);Z.Context=D.default,Z.displayName='ScrollView',m.exports=Z},655,[407,436,430,402,403,421,417,419,422,628,566,426,534,456,656,578,579,450,657,661,540,659,573,425,663,664,646,665,666,667,668,669,670]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),f=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var u=s(n);if(u&&u.has(t))return u.get(t);var l={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var c=o?Object.getOwnPropertyDescriptor(t,f):null;c&&(c.get||c.set)?Object.defineProperty(l,f,c):l[f]=t[f]}l.default=t,u&&u.set(t,l);return l})(r(d[6]));function s(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,u=new WeakMap;return(s=function(t){return t?u:n})(t)}var c=o.default.View,p=f.forwardRef(function(l,s){var p=l.inverted,h=l.scrollViewHeight,y=l.hiddenOnScroll,R=l.scrollAnimatedValue,O=l.nextHeaderLayoutY,L=f.useState(!1),b=(0,t.default)(L,2),w=b[0],S=b[1],j=f.useState(0),E=(0,t.default)(j,2),P=E[0],_=E[1],x=f.useState(0),M=(0,t.default)(x,2),k=M[0],C=M[1],D=f.useState(null),H=(0,t.default)(D,2),I=H[0],V=H[1],Y=f.useState(O),T=(0,t.default)(Y,2),W=T[0],A=T[1],N=f.useState(!1),z=(0,t.default)(N,2),F=z[0],q=z[1],B=f.useRef(),G=(0,n.default)({getForwardedRef:function(){return s},setLocalRef:function(t){var n,u;(B.current=t,t)&&(t.setNextHeaderY=function(t){A(t)},q(!(null==(n=t._internalInstanceHandle)||null==(u=n.stateNode)||!u.canonical)))}}),J=(0,f.useMemo)(function(){return!0===y?o.default.diffClamp(R.interpolate({extrapolateLeft:'clamp',inputRange:[P,P+1],outputRange:[0,1]}).interpolate({inputRange:[0,1],outputRange:[0,-1]}),-k,0):null},[R,k,P,y]),K=f.useState(function(){var t=R.interpolate({inputRange:[-1,0],outputRange:[0,0]});return null!=J?o.default.add(t,J):t}),Q=(0,t.default)(K,2),U=Q[0],X=Q[1],Z=(0,f.useRef)(!0),$=(0,f.useRef)(null);(0,f.useEffect)(function(){0!==I&&null!=I&&(Z.current=!1)},[I]);var ee=(0,f.useCallback)(function(t){var n=t.value,l='android'===u.default.OS?15:64;0!==n||Z.current?(null!=$.current&&clearTimeout($.current),$.current=setTimeout(function(){n!==I&&V(n)},l)):Z.current=!0},[I]);(0,f.useEffect)(function(){var t=[-1,0],n=[0,0];if(w)if(!0===p){if(null!=h){var u=P+k-h;if(u>0){t.push(u),n.push(0),t.push(u+1),n.push(1);var l=(W||0)-k-h;l>u&&(t.push(l,l+1),n.push(l-u,l-u))}}}else{t.push(P),n.push(0);var f=(W||0)-k;f>=P?(t.push(f,f+1),n.push(f-P,f-P)):(t.push(P+1),n.push(1))}var s,c=R.interpolate({inputRange:t,outputRange:n});return null!=J&&(c=o.default.add(c,J)),F&&(s=c.addListener(ee)),X(c),function(){s&&c.removeListener(s),null!=$.current&&clearTimeout($.current)}},[W,w,k,P,h,R,p,J,ee,F]);var te=f.Children.only(l.children),ne=F&&null!=I?{style:{transform:[{translateY:I}]}}:null;return f.createElement(c,{collapsable:!1,nativeID:l.nativeID,onLayout:function(t){_(t.nativeEvent.layout.y),C(t.nativeEvent.layout.height),S(!0),l.onLayout(t);var n=f.Children.only(l.children);n.props.onLayout&&n.props.onLayout(t)},ref:G,style:[te.props.style,v.header,{transform:[{translateY:U}]}],passthroughAnimatedPropExplicitValues:ne},f.cloneElement(te,{style:v.fill,onLayout:void 0}))}),v=l.default.create({header:{zIndex:10,position:'relative'},fill:{flex:1}}),h=p;e.default=h},656,[407,430,646,426,578,616,534]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),s=r(d[0])(r(d[6])),f=r(d[0])(r(d[7])),v=(function(){function v(){(0,t.default)(this,v),this._emitter=new u.default('ios'!==s.default.OS?null:f.default)}return(0,n.default)(v,[{key:"addListener",value:function(t,n,u){return this._emitter.addListener(t,n)}},{key:"removeListener",value:function(t,n){this._emitter.removeListener(t,n)}},{key:"removeAllListeners",value:function(t){this._emitter.removeAllListeners(t)}},{key:"dismiss",value:function(){(0,o.default)()}},{key:"scheduleLayoutAnimation",value:function(t){var n=t.duration,u=t.easing;null!=n&&0!==n&&l.default.configureNext({duration:n,update:{duration:n,type:null!=u&&l.default.Types[u]||'keyboard'}})}}]),v})();m.exports=new v},657,[407,402,403,500,658,659,426,660]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=r(d[0])(r(d[1]));function t(t,u,o){var l,s;if(!n.default.isTesting){var c,p,y=!1,f=function(){y||(y=!0,clearTimeout(b),null==u||u())},b=setTimeout(f,(null!=(l=t.duration)?l:0)+17),I=null==(s=g)?void 0:s.nativeFabricUIManager;if(null!=I&&I.configureNextLayoutAnimation)null==(c=g)||null==(p=c.nativeFabricUIManager)||p.configureNextLayoutAnimation(t,f,null!=o?o:function(){});else null!=r(d[2])&&r(d[2]).configureNextLayoutAnimation&&r(d[2]).configureNextLayoutAnimation(t,null!=f?f:function(){},null!=o?o:function(){})}}function u(n,t,u){return{duration:n,create:{type:t,property:u},update:{type:t},delete:{type:t,property:u}}}var o={easeInEaseOut:u(300,'easeInEaseOut','opacity'),linear:u(500,'linear','opacity'),spring:{duration:700,create:{type:'linear',property:'opacity'},update:{type:'spring',springDamping:.4},delete:{type:'linear',property:'opacity'}}},l={configureNext:t,create:u,Types:Object.freeze({spring:'spring',linear:'linear',easeInEaseOut:'easeInEaseOut',easeIn:'easeIn',easeOut:'easeOut',keyboard:'keyboard'}),Properties:Object.freeze({opacity:'opacity',scaleX:'scaleX',scaleY:'scaleY',scaleXY:'scaleXY'}),checkConfig:function(){console.error('LayoutAnimation.checkConfig(...) has been disabled.')},Presets:o,easeInEaseOut:t.bind(null,o.easeInEaseOut),linear:t.bind(null,o.linear),spring:t.bind(null,o.spring)};m.exports=l},658,[407,426,450]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=function(){r(d[0]).blurTextInput(r(d[0]).currentlyFocusedInput())}},659,[540]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('KeyboardObserver');e.default=n},660,[428]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),o={setGlobalOptions:function(o){if(void 0!==o.debug&&r(d[2])(t.default,'Trying to debug FrameRateLogger without the native module!'),t.default){var l={debug:!!o.debug,reportStackTraces:!!o.reportStackTraces};t.default.setGlobalOptions(l)}},setContext:function(o){t.default&&t.default.setContext(o)},beginScroll:function(){t.default&&t.default.beginScroll()},endScroll:function(){t.default&&t.default.endScroll()}};m.exports=o},661,[407,662,425]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('FrameRateLogger');e.default=n},662,[428]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1]));m.exports=function(n){return'normal'===n?t.default.select({ios:.998,android:.985}):'fast'===n?t.default.select({ios:.99,android:.9}):n}},663,[407,426]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(s){var c=null,t=null;if(null!=s){c={},t={};for(var n=0,l=Object.keys(s);nMath.random(),this._resetData()}return r(d[0])(_,[{key:"activate",value:function(){this._enabled&&null==this._samplesStartTime&&(this._samplesStartTime=g.performance.now())}},{key:"deactivateAndFlush",value:function(){if(this._enabled){var t=this._samplesStartTime;if(null!=t)if(this._info.sample_count0&&(c=Math.min(h,Math.max(0,y.offset-_)));for(var p=0,b=n.last,v=this._getFrameMetrics(b);b>=n.first&&(!v||!v.inLayout);)v=this._getFrameMetrics(b),b--;if(v&&b0?(this._anyBlankStartTime=f,this._info.any_blank_speed_sum+=u,this._info.any_blank_count++,this._info.pixels_blank+=M,T>.5&&(this._mostlyBlankStartTime=f,this._info.mostly_blank_count++)):(u<.01||Math.abs(l)<1)&&this.deactivateAndFlush(),T}},{key:"enabled",value:function(){return this._enabled}},{key:"_resetData",value:function(){this._anyBlankStartTime=null,this._info=new t,this._mostlyBlankStartTime=null,this._samplesStartTime=null}}],[{key:"addListener",value:function(t){return null===l&&console.warn('Call `FillRateHelper.setSampleRate` before `addListener`.'),n.push(t),{remove:function(){n=n.filter(function(n){return t!==n})}}}},{key:"setSampleRate",value:function(t){l=t}},{key:"setMinSampleCount",value:function(t){s=t}}]),_})();m.exports=_},675,[403,402,436]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=(function(){function t(n,l){r(d[0])(this,t),this._delay=l,this._callback=n}return r(d[1])(t,[{key:"dispose",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{abort:!1};this._taskHandle&&(this._taskHandle.cancel(),t.abort||this._callback(),this._taskHandle=null)}},{key:"schedule",value:function(){var t=this;if(!this._taskHandle){var n=setTimeout(function(){t._taskHandle=r(d[2]).runAfterInteractions(function(){t._taskHandle=null,t._callback()})},this._delay);this._taskHandle={cancel:function(){return clearTimeout(n)}}}}}]),t})();m.exports=t},676,[402,403,625]); +__d(function(g,r,_i,a,m,e,d){'use strict';function t(t,i){var o="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(o)return(o=o.call(t)).next.bind(o);if(Array.isArray(t)||(o=n(t))||i&&t&&"number"==typeof t.length){o&&(t=o);var s=0;return function(){return s>=t.length?{done:!0}:{done:!1,value:t[s++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function n(t,n){if(t){if("string"==typeof t)return i(t,n);var o=Object.prototype.toString.call(t).slice(8,-1);return"Object"===o&&t.constructor&&(o=t.constructor.name),"Map"===o||"Set"===o?Array.from(t):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?i(t,n):void 0}}function i(t,n){(null==n||n>t.length)&&(n=t.length);for(var i=0,o=new Array(n);i0&&void 0!==arguments[0]?arguments[0]:{viewAreaCoveragePercentThreshold:0};r(d[0])(this,n),this._hasInteracted=!1,this._timers=new Set,this._viewableIndices=[],this._viewableItems=new Map,this._config=t}return r(d[1])(n,[{key:"dispose",value:function(){this._timers.forEach(clearTimeout)}},{key:"computeViewableItems",value:function(t,n,i,o,l){var u=this._config,c=u.itemVisiblePercentThreshold,h=u.viewAreaCoveragePercentThreshold,f=null!=h,v=f?h:c;r(d[2])(null!=v&&null!=c!=(null!=h),'Must set exactly one of itemVisiblePercentThreshold or viewAreaCoveragePercentThreshold');var b=[];if(0===t)return b;var y=-1,w=l||{first:0,last:t-1},_=w.first,p=w.last;if(p>=t)return console.warn('Invalid render range computing viewability '+JSON.stringify({renderRange:l,itemCount:t})),[];for(var I=_;I<=p;I++){var A=o(I);if(A){var S=A.offset-n,T=S+A.length;if(S0)y=I,s(f,v,S,T,i,A.length)&&b.push(I);else if(y>=0)break}}return b}},{key:"onUpdate",value:function(t,n,i,o,s,l,u){var c=this;if((!this._config.waitForInteraction||this._hasInteracted)&&0!==t&&o(0)){var h=[];if(t&&(h=this.computeViewableItems(t,n,i,o,u)),this._viewableIndices.length!==h.length||!this._viewableIndices.every(function(t,n){return t===h[n]}))if(this._viewableIndices=h,this._config.minimumViewTime){var f=setTimeout(function(){c._timers.delete(f),c._onUpdateSync(h,l,s)},this._config.minimumViewTime);this._timers.add(f)}else this._onUpdateSync(h,l,s)}}},{key:"resetViewableIndices",value:function(){this._viewableIndices=[]}},{key:"recordInteraction",value:function(){this._hasInteracted=!0}},{key:"_onUpdateSync",value:function(n,i,o){var s=this;n=n.filter(function(t){return s._viewableIndices.includes(t)});for(var l,u=this._viewableItems,c=new Map(n.map(function(t){var n=o(t,!0);return[n.key,n]})),h=[],f=t(c);!(l=f()).done;){var v=l.value,b=r(d[3])(v,2),y=b[0],w=b[1];u.has(y)||h.push(w)}for(var _,p=t(u);!(_=p()).done;){var I=_.value,A=r(d[3])(I,2),S=A[0],T=A[1];c.has(S)||h.push(r(d[4])({},T,{isViewable:!1}))}h.length>0&&(this._viewableItems=c,i({viewableItems:Array.from(c.values()),changed:h,viewabilityConfig:this._config}))}}]),n})();function s(t,n,i,o,s,c){if(u(i,o,s))return!0;var h=l(i,o,s);return 100*(t?h/s:h/c)>=n}function l(t,n,i){var o=Math.min(n,i)-Math.max(t,0);return Math.max(0,o)}function u(t,n,i){return t>=0&&n<=i&&n>t}m.exports=o},677,[402,403,425,430,436]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.VirtualizedListCellContextProvider=function(l){var u=l.cellKey,s=l.children,c=(0,n.useContext)(o);return n.createElement(o.Provider,{value:null==c?null:(0,t.default)({},c,{cellKey:u})},s)},e.VirtualizedListContext=void 0,e.VirtualizedListContextProvider=function(t){var l=t.children,u=t.value,s=(0,n.useMemo)(function(){return{cellKey:null,getScrollMetrics:u.getScrollMetrics,horizontal:u.horizontal,getOutermostParentListRef:u.getOutermostParentListRef,getNestedChildState:u.getNestedChildState,registerAsNestedChild:u.registerAsNestedChild,unregisterAsNestedChild:u.unregisterAsNestedChild,debugInfo:{cellKey:u.debugInfo.cellKey,horizontal:u.debugInfo.horizontal,listKey:u.debugInfo.listKey,parent:u.debugInfo.parent}}},[u.getScrollMetrics,u.horizontal,u.getOutermostParentListRef,u.getNestedChildState,u.registerAsNestedChild,u.unregisterAsNestedChild,u.debugInfo.cellKey,u.debugInfo.horizontal,u.debugInfo.listKey,u.debugInfo.parent]);return n.createElement(o.Provider,{value:s},l)},e.VirtualizedListContextResetter=function(t){var l=t.children;return n.createElement(o.Provider,{value:null},l)};var t=r(d[0])(r(d[1])),n=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=l(n);if(o&&o.has(t))return o.get(t);var u={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var f=s?Object.getOwnPropertyDescriptor(t,c):null;f&&(f.get||f.set)?Object.defineProperty(u,c,f):u[c]=t[c]}u.default=t,o&&o.set(t,u);return u})(r(d[2]));function l(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(l=function(t){return t?o:n})(t)}var o=n.createContext(null);e.VirtualizedListContext=o},678,[407,436,534]); +__d(function(g,r,i,a,m,e,d){!(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},p=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var l=p?Object.getOwnPropertyDescriptor(n,c):null;l&&(l.get||l.set)?Object.defineProperty(u,c,l):u[c]=n[c]}u.default=n,f&&f.set(n,u)})(r(d[0]));function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}m.exports=r(d[1])(r(d[2]),{collapsable:!1})},679,[534,644,680]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),l=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=b(n);if(o&&o.has(t))return o.get(t);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var f=l?Object.getOwnPropertyDescriptor(t,c):null;f&&(f.get||f.set)?Object.defineProperty(u,c,f):u[c]=t[c]}u.default=t,o&&o.set(t,u);return u})(r(d[5])),c=r(d[0])(r(d[6])),f=r(d[0])(r(d[7])),s=r(d[0])(r(d[8])),h=r(d[0])(r(d[9])),p=r(d[0])(r(d[10])),y=r(d[0])(r(d[11])),w=r(d[0])(r(d[12])),v=r(d[0])(r(d[13]));function b(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(b=function(t){return t?o:n})(t)}var S=1;function I(t,n){var o=S++;return n&&n(o),w.default.prefetchImage(t,o)}var E=function(n,o){var c,s,w,b,S=(0,y.default)(n.source),I=(0,y.default)(n.defaultSource),E=(0,y.default)(n.loadingIndicatorSource);S&&(''===S.uri&&console.warn('source.uri should not be an empty string'));if(n.src&&console.warn('The component requires a `source` property rather than `src`.'),n.children)throw new Error('The component cannot contain children. If you want to render content on top of the image, consider using the component or absolute positioning.');if(n.defaultSource&&n.loadingIndicatorSource)throw new Error('The component cannot have defaultSource and loadingIndicatorSource at the same time. Please use either defaultSource or loadingIndicatorSource.');if(!S||S.uri||Array.isArray(S)||(S=null),null!=(null==(c=S)?void 0:c.uri)){var P=S,_=P.width,j=P.height;w=(0,p.default)([{width:_,height:j},O.base,n.style]),b=[{uri:S.uri}]}else w=(0,p.default)([O.base,n.style]),b=S;var z=n.onLoadStart,C=n.onLoad,W=n.onLoadEnd,M=n.onError,T=(0,t.default)({},n,{style:w,shouldNotifyLoadEvents:!!(z||C||W||M),src:b,headers:null==(s=S)?void 0:s.headers,defaultSrc:I?I.uri:null,loadingIndicatorSrc:E?E.uri:null,ref:o});return l.createElement(h.default.Consumer,null,function(n){var o=null!==n?(0,t.default)({},T,{internal_analyticTag:n}):T;return l.createElement(f.default.Consumer,null,function(t){return t?l.createElement(v.default,o):l.createElement(u.default,o)})})};E=l.forwardRef(E),null!=s.default.unstable_createImageComponent&&(E=s.default.unstable_createImageComponent(E)),E.displayName='Image',E.getSize=function(t,n,o){return w.default.getSize(t).then(function(t){n(t.width,t.height)}).catch(o||function(){console.warn('Failed to get size for image: '+t)})},E.getSizeWithHeaders=function(t,n,o,u){return w.default.getSizeWithHeaders(t,n).then(function(t){o(t.width,t.height)}).catch(u||function(){console.warn('Failed to get size for image: '+t)})},E.prefetch=I,E.prefetchWithMetadata=function(t,n,o,u){I(t,u)},E.abortPrefetch=function(t){w.default.abortRequest(t)},E.queryCache=function(t){return n.default.async(function(o){for(;;)switch(o.prev=o.next){case 0:return o.next=2,n.default.awrap(w.default.queryCache(t));case 2:return o.abrupt("return",o.sent);case 3:case"end":return o.stop()}},null,null,null,Promise)},E.resolveAssetSource=y.default,E.propTypes=o.default;var O=c.default.create({base:{overflow:'hidden'}});m.exports=E},680,[407,436,404,681,685,534,578,581,686,688,573,560,689,687]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=r(d[0])({},r(d[1]),{style:r(d[2])(r(d[3])),source:r(d[4]).oneOfType([r(d[4]).shape({uri:r(d[4]).string,headers:r(d[4]).objectOf(r(d[4]).string)}),r(d[4]).number,r(d[4]).arrayOf(r(d[4]).shape({uri:r(d[4]).string,width:r(d[4]).number,height:r(d[4]).number,headers:r(d[4]).objectOf(r(d[4]).string)}))]),blurRadius:r(d[4]).number,defaultSource:r(d[4]).number,loadingIndicatorSource:r(d[4]).oneOfType([r(d[4]).shape({uri:r(d[4]).string}),r(d[4]).number]),progressiveRenderingEnabled:r(d[4]).bool,fadeDuration:r(d[4]).number,internal_analyticTag:r(d[4]).string,onLoadStart:r(d[4]).func,onError:r(d[4]).func,onLoad:r(d[4]).func,onLoadEnd:r(d[4]).func,testID:r(d[4]).string,resizeMethod:r(d[4]).oneOf(['auto','resize','scale']),resizeMode:r(d[4]).oneOf(['cover','contain','stretch','repeat','center'])});m.exports=n},681,[436,682,591,684,596]); +__d(function(g,r,i,a,m,e,d){'use strict';var o=r(d[0])(r(d[1]));m.exports={accessible:r(d[2]).bool,accessibilityLabel:r(d[2]).node,accessibilityHint:r(d[2]).string,accessibilityActions:r(d[2]).arrayOf(r(d[2]).string),accessibilityIgnoresInvertColors:r(d[2]).bool,accessibilityRole:r(d[2]).oneOf(r(d[3]).DeprecatedAccessibilityRoles),accessibilityState:r(d[2]).object,accessibilityValue:r(d[2]).object,accessibilityLiveRegion:r(d[2]).oneOf(['none','polite','assertive']),importantForAccessibility:r(d[2]).oneOf(['auto','yes','no','no-hide-descendants']),accessibilityViewIsModal:r(d[2]).bool,accessibilityElementsHidden:r(d[2]).bool,onAccessibilityAction:r(d[2]).func,onAccessibilityTap:r(d[2]).func,onMagicTap:r(d[2]).func,testID:r(d[2]).string,nativeID:r(d[2]).string,onResponderGrant:r(d[2]).func,onResponderMove:r(d[2]).func,onResponderReject:r(d[2]).func,onResponderRelease:r(d[2]).func,onResponderTerminate:r(d[2]).func,onResponderTerminationRequest:r(d[2]).func,onStartShouldSetResponder:r(d[2]).func,onStartShouldSetResponderCapture:r(d[2]).func,onMoveShouldSetResponder:r(d[2]).func,onMoveShouldSetResponderCapture:r(d[2]).func,hitSlop:r(d[4]),onLayout:r(d[2]).func,pointerEvents:r(d[2]).oneOf(['box-none','none','box-only','auto']),style:o,removeClippedSubviews:r(d[2]).bool,renderToHardwareTextureAndroid:r(d[2]).bool,shouldRasterizeIOS:r(d[2]).bool,collapsable:r(d[2]).bool,needsOffscreenAlphaCompositing:r(d[2]).bool}},682,[591,594,596,683,603]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports={DeprecatedAccessibilityRoles:['none','button','togglebutton','link','search','image','keyboardkey','text','adjustable','imagebutton','header','summary','alert','checkbox','combobox','menu','menubar','menuitem','progressbar','radio','radiogroup','scrollbar','spinbutton','switch','tab','tablist','timer','list','toolbar']}},683,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var o=r(d[0])({},r(d[1]),r(d[2]),r(d[3]),{resizeMode:r(d[4]).oneOf(['center','contain','cover','repeat','stretch']),backfaceVisibility:r(d[4]).oneOf(['visible','hidden']),backgroundColor:r(d[5]),borderColor:r(d[5]),borderWidth:r(d[4]).number,borderRadius:r(d[4]).number,overflow:r(d[4]).oneOf(['visible','hidden']),tintColor:r(d[5]),opacity:r(d[4]).number,overlayColor:r(d[4]).string,borderTopLeftRadius:r(d[4]).number,borderTopRightRadius:r(d[4]).number,borderBottomLeftRadius:r(d[4]).number,borderBottomRightRadius:r(d[4]).number});m.exports=o},684,[436,595,599,601,596,600]); +__d(function(g,r,i,a,m,e,d){function t(o){if("function"!=typeof WeakMap)return null;var n=new WeakMap,s=new WeakMap;return(t=function(t){return t?s:n})(o)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o=(function(o,n){if(!n&&o&&o.__esModule)return o;if(null===o||"object"!=typeof o&&"function"!=typeof o)return{default:o};var s=t(n);if(s&&s.has(o))return s.get(o);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in o)if("default"!==f&&Object.prototype.hasOwnProperty.call(o,f)){var c=l?Object.getOwnPropertyDescriptor(o,f):null;c&&(c.get||c.set)?Object.defineProperty(u,f,c):u[f]=o[f]}u.default=o,s&&s.set(o,u);return u})(r(d[0])).get('RCTImageView',function(){return{uiViewClassName:'RCTImageView',bubblingEventTypes:{},directEventTypes:{topLoadStart:{registrationName:'onLoadStart'},topProgress:{registrationName:'onProgress'},topError:{registrationName:'onError'},topPartialLoad:{registrationName:'onPartialLoad'},topLoad:{registrationName:'onLoad'},topLoadEnd:{registrationName:'onLoadEnd'}},validAttributes:{blurRadius:!0,capInsets:{diff:r(d[1])},defaultSource:{process:r(d[2])},defaultSrc:!0,fadeDuration:!0,headers:!0,internal_analyticTag:!0,loadingIndicatorSrc:!0,onError:!0,onLoad:!0,onLoadEnd:!0,onLoadStart:!0,onPartialLoad:!0,onProgress:!0,overlayColor:{process:r(d[3])},progressiveRenderingEnabled:!0,resizeMethod:!0,resizeMode:!0,shouldNotifyLoadEvents:!0,source:!0,src:!0,tintColor:{process:r(d[3])}}}});e.default=o},685,[555,550,560,546]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f)})(r(d[0])),r(d[1])(r(d[2])),r(d[1])(r(d[3]));function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}e.default={unstable_createImageComponent:null}},686,[534,407,685,687]); +__d(function(g,r,i,a,m,e,d){'use strict';function t(o){if("function"!=typeof WeakMap)return null;var n=new WeakMap,s=new WeakMap;return(t=function(t){return t?s:n})(o)}var o=(function(o,n){if(!n&&o&&o.__esModule)return o;if(null===o||"object"!=typeof o&&"function"!=typeof o)return{default:o};var s=t(n);if(s&&s.has(o))return s.get(o);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in o)if("default"!==c&&Object.prototype.hasOwnProperty.call(o,c)){var p=l?Object.getOwnPropertyDescriptor(o,c):null;p&&(p.get||p.set)?Object.defineProperty(u,c,p):u[c]=o[c]}u.default=o,s&&s.set(o,u);return u})(r(d[0])).get('RCTTextInlineImage',function(){return{uiViewClassName:'RCTImageView',bubblingEventTypes:{},directEventTypes:{topLoadStart:{registrationName:'onLoadStart'},topProgress:{registrationName:'onProgress'},topError:{registrationName:'onError'},topPartialLoad:{registrationName:'onPartialLoad'},topLoad:{registrationName:'onLoad'},topLoadEnd:{registrationName:'onLoadEnd'}},validAttributes:{blurRadius:!0,capInsets:{diff:r(d[1])},defaultSource:{process:r(d[2])},defaultSrc:!0,fadeDuration:!0,headers:!0,internal_analyticTag:!0,loadingIndicatorSrc:!0,onError:!0,onLoad:!0,onLoadEnd:!0,onLoadStart:!0,onPartialLoad:!0,onProgress:!0,overlayColor:{process:r(d[3])},progressiveRenderingEnabled:!0,resizeMethod:!0,resizeMode:!0,shouldNotifyLoadEvents:!0,source:!0,src:!0,tintColor:{process:r(d[3])}}}});m.exports=o},687,[555,550,560,546]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).createContext(null);e.default=n},688,[534]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=n[l]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).getEnforcing('ImageLoader');e.default=n},689,[428]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var f=o(n);if(f&&f.has(t))return f.get(t);var u={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var p=l?Object.getOwnPropertyDescriptor(t,c):null;p&&(p.get||p.set)?Object.defineProperty(u,c,p):u[c]=t[c]}u.default=t,f&&f.set(t,u);return u})(r(d[2]));function o(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,f=new WeakMap;return(o=function(t){return t?f:n})(t)}var f=n.forwardRef(function(o,f){return n.createElement(r(d[3]),(0,t.default)({scrollEventThrottle:1e-4},o,{ref:f}))});m.exports=r(d[4])(f,{collapsable:!1})},690,[407,436,534,655,644]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var f=o(n);if(f&&f.has(t))return f.get(t);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in t)if("default"!==l&&Object.prototype.hasOwnProperty.call(t,l)){var p=c?Object.getOwnPropertyDescriptor(t,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=t[l]}u.default=t,f&&f.set(t,u);return u})(r(d[2])),f=r(d[0])(r(d[3]));function o(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,f=new WeakMap;return(o=function(t){return t?f:n})(t)}var u=n.forwardRef(function(o,u){return n.createElement(f.default,(0,t.default)({scrollEventThrottle:1e-4},o,{ref:u}))});m.exports=r(d[4])(u)},691,[407,436,534,692,644]); +__d(function(g,r,i,a,m,_e,d){'use strict';Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),f=r(d[0])(r(d[5])),u=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),s=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=y(t);if(n&&n.has(e))return n.get(e);var o={},f=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&Object.prototype.hasOwnProperty.call(e,u)){var c=f?Object.getOwnPropertyDescriptor(e,u):null;c&&(c.get||c.set)?Object.defineProperty(o,u,c):o[u]=e[u]}o.default=e,n&&n.set(e,o);return o})(r(d[9])),p=r(d[0])(r(d[10])),v=["stickySectionHeadersEnabled"];function y(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(y=function(e){return e?n:t})(e)}function h(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var R=(function(y){(0,f.default)(w,y);var R,_,L=(R=w,_=h(),function(){var e,t=(0,c.default)(R);if(_){var n=(0,c.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,u.default)(this,e)});function w(){var e;(0,n.default)(this,w);for(var t=arguments.length,o=new Array(t),f=0;f=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function I(e,t){if(e){if("string"==typeof e)return _(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_(e,t):void 0}}function _(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n0&&this.props.stickySectionHeadersEnabled)o+=this._listRef._getFrameMetricsApprox(t-e.itemIndex).length;var l=(0,n.default)({},e,{viewOffset:o,index:t});this._listRef.scrollToIndex(l)}}},{key:"getListRef",value:function(){return this._listRef}},{key:"render",value:function(){for(var e,i=this,o=this.props,l=(o.ItemSeparatorComponent,o.SectionSeparatorComponent,o.renderItem,o.renderSectionFooter,o.renderSectionHeader,o.sections,o.stickySectionHeadersEnabled,(0,t.default)(o,v)),u=this.props.ListHeaderComponent?1:0,c=this.props.stickySectionHeadersEnabled?[]:void 0,s=0,p=S(this.props.sections);!(e=p()).done;){var y=e.value;null!=c&&c.push(s+u),s+=2,s+=this.props.getItemCount(y.data)}var I=this._renderItem(s);return h.createElement(f.VirtualizedList,(0,n.default)({},l,{keyExtractor:this._keyExtractor,stickyHeaderIndices:c,renderItem:I,data:this.props.sections,getItem:function(e,t){return i._getItem(i.props,e,t)},getItemCount:function(){return s},onViewableItemsChanged:this.props.onViewableItemsChanged?this._onViewableItemsChanged:void 0,ref:this._captureRef}))}},{key:"_getItem",value:function(e,t,n){if(!t)return null;for(var i=n-1,o=0;o=o(p)+1)t-=o(p)+1;else return-1===t?{section:s,key:f+':header',index:null,header:!0,trailingSection:u[c+1]}:t===o(p)?{section:s,key:f+':footer',index:null,header:!1,trailingSection:u[c+1]}:{section:s,key:f+':'+(s.keyExtractor||l||r(d[13]).keyExtractor)(i(p,t),t),index:t,leadingItem:i(p,t-1),leadingSection:u[c-1],trailingItem:i(p,t+1),trailingSection:u[c+1]}}}},{key:"_getSeparatorComponent",value:function(e,t,n){if(!(t=t||this._subExtractor(e)))return null;var i=t.section.ItemSeparatorComponent||this.props.ItemSeparatorComponent,o=this.props.SectionSeparatorComponent,l=e===n-1,u=t.index===this.props.getItemCount(t.section.data)-1;return o&&u?o:!i||u||l?null:i}}]),x})(h.PureComponent);function k(t){var i=t.LeadingSeparatorComponent,o=t.SeparatorComponent,l=t.cellKey,u=t.prevCellKey,c=t.setSelfHighlightCallback,s=t.updateHighlightFor,p=t.setSelfUpdatePropsCallback,v=t.updatePropsFor,y=t.item,S=t.index,I=t.section,_=t.inverted,b=h.useState(!1),x=(0,e.default)(b,2),k=x[0],C=x[1],E=h.useState(!1),w=(0,e.default)(E,2),H=w[0],P=w[1],F=h.useState({leadingItem:t.leadingItem,leadingSection:t.leadingSection,section:t.section,trailingItem:t.item,trailingSection:t.trailingSection}),R=(0,e.default)(F,2),M=R[0],O=R[1],V=h.useState({leadingItem:t.item,leadingSection:t.leadingSection,section:t.section,trailingItem:t.trailingItem,trailingSection:t.trailingSection}),j=(0,e.default)(V,2),A=j[0],U=j[1];h.useEffect(function(){return c(l,P),p(l,U),function(){p(l,null),c(l,null)}},[l,c,U,p]);var L={highlight:function(){C(!0),P(!0),null!=u&&s(u,!0)},unhighlight:function(){C(!1),P(!1),null!=u&&s(u,!1)},updateProps:function(e,t){'leading'===e?null!=i?O((0,n.default)({},M,t)):null!=u&&v(u,(0,n.default)({},M,t)):'trailing'===e&&null!=o&&U((0,n.default)({},A,t))}},B=t.renderItem({item:y,index:S,section:I,separators:L}),K=null!=i&&h.createElement(i,(0,n.default)({highlighted:k},M)),T=null!=o&&h.createElement(o,(0,n.default)({highlighted:H},A));return K||T?h.createElement(f.View,null,!1===_?K:T,B,!1===_?T:K):B}m.exports=x},693,[407,430,508,436,402,403,421,417,419,422,425,411,534,653]); +__d(function(g,r,i,a,m,e,d){!(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},p=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var l=p?Object.getOwnPropertyDescriptor(n,c):null;l&&(l.get||l.set)?Object.defineProperty(u,c,l):u[c]=n[c]}u.default=n,f&&f.set(n,u)})(r(d[0]));function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}m.exports=r(d[1])(r(d[2]),{collapsable:!1})},694,[534,644,589]); +__d(function(g,r,i,a,m,e,d){!(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},p=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var l=p?Object.getOwnPropertyDescriptor(n,c):null;l&&(l.get||l.set)?Object.defineProperty(u,c,l):u[c]=n[c]}u.default=n,f&&f.set(n,u)})(r(d[0]));function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}m.exports=r(d[1])(r(d[2]),{collapsable:!0})},695,[534,644,579]); +__d(function(g,r,i,a,m,e,d){'use strict';var n={};m.exports=function(o,t){n[o]||(console.warn(t),n[o]=!0)}},696,[]); +__d(function(g,r,i,a,m,_e,d){'use strict';var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),c=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=p(t);if(n&&n.has(e))return n.get(e);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in e)if("default"!==c&&Object.prototype.hasOwnProperty.call(e,c)){var f=u?Object.getOwnPropertyDescriptor(e,c):null;f&&(f.get||f.set)?Object.defineProperty(o,c,f):o[c]=e[c]}o.default=e,n&&n.set(e,o);return o})(r(d[6])),f=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),s=r(d[0])(r(d[9]));function p(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(p=function(e){return e?n:t})(e)}function y(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var h=(function(f){(0,n.default)(b,f);var p,h,O=(p=b,h=y(),function(){var e,t=(0,u.default)(p);if(h){var n=(0,u.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,o.default)(this,e)});function b(){return(0,e.default)(this,b),O.apply(this,arguments)}return(0,t.default)(b,[{key:"render",value:function(){return c.createElement(s.default,{style:[v.dummyDatePickerIOS,this.props.style]},c.createElement(l.default,{style:v.datePickerText},"DatePickerIOS is not supported on this platform!"))}}]),b})(c.Component),v=f.default.create({dummyDatePickerIOS:{height:100,width:300,backgroundColor:'#ffbcbc',borderWidth:1,borderColor:'red',alignItems:'center',justifyContent:'center',margin:10},datePickerText:{color:'#333333',margin:20}});m.exports=h},697,[407,402,403,417,419,422,534,578,589,579]); +__d(function(g,r,i,a,m,_e,d){var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),s=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),f=r(d[0])(r(d[8])),c=k(r(d[9])),p=r(d[0])(r(d[10])),w=r(d[0])(r(d[11])),h=r(d[0])(r(d[12])),v=r(d[0])(r(d[13])),y=r(d[0])(r(d[14])),D=k(r(d[15])),b=["onDrawerStateChanged","renderNavigationView","onDrawerOpen","onDrawerClose"];function C(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(C=function(e){return e?n:t})(e)}function k(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=C(t);if(n&&n.has(e))return n.get(e);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var l=u?Object.getOwnPropertyDescriptor(e,s):null;l&&(l.get||l.set)?Object.defineProperty(o,s,l):o[s]=e[s]}return o.default=e,n&&n.set(e,o),o}function _(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var S=['Idle','Dragging','Settling'],R=(function(w){(0,u.default)(O,w);var C,k,R=(C=O,k=_(),function(){var e,t=(0,l.default)(C);if(k){var n=(0,l.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,s.default)(this,e)});function O(){var e;(0,n.default)(this,O);for(var t=arguments.length,o=new Array(t),u=0;u=21&&null!=this.props.statusBarBackgroundColor,l=c.createElement(h.default,{style:[B.drawerSubview,{width:this.props.drawerWidth,backgroundColor:this.props.drawerBackgroundColor}],collapsable:!1},o(),s&&c.createElement(h.default,{style:B.drawerStatusBar})),w=c.createElement(h.default,{style:B.mainSubview,collapsable:!1},s&&c.createElement(p.default,{translucent:!0,backgroundColor:this.props.statusBarBackgroundColor}),s&&c.createElement(h.default,{style:[B.statusBar,{backgroundColor:this.props.statusBarBackgroundColor}]}),this.props.children);return c.createElement(D.default,(0,e.default)({},u,{ref:this._nativeRef,drawerWidth:this.props.drawerWidth,drawerPosition:this.props.drawerPosition,drawerLockMode:this.props.drawerLockMode,style:[B.base,this.props.style],onDrawerSlide:this._onDrawerSlide,onDrawerOpen:this._onDrawerOpen,onDrawerClose:this._onDrawerClose,onDrawerStateChanged:this._onDrawerStateChanged}),w,l)}},{key:"openDrawer",value:function(){D.Commands.openDrawer((0,y.default)(this._nativeRef.current))}},{key:"closeDrawer",value:function(){D.Commands.closeDrawer((0,y.default)(this._nativeRef.current))}},{key:"blur",value:function(){(0,y.default)(this._nativeRef.current).blur()}},{key:"focus",value:function(){(0,y.default)(this._nativeRef.current).focus()}},{key:"measure",value:function(e){(0,y.default)(this._nativeRef.current).measure(e)}},{key:"measureInWindow",value:function(e){(0,y.default)(this._nativeRef.current).measureInWindow(e)}},{key:"measureLayout",value:function(e,t,n){(0,y.default)(this._nativeRef.current).measureLayout(e,t,n)}},{key:"setNativeProps",value:function(e){(0,y.default)(this._nativeRef.current).setNativeProps(e)}}],[{key:"positions",get:function(){return console.warn('Setting DrawerLayoutAndroid drawerPosition using `DrawerLayoutAndroid.positions` is deprecated. Instead pass the string value "left" or "right"'),{Left:'left',Right:'right'}}}]),O})(c.Component);R.defaultProps={drawerBackgroundColor:'white'};var B=w.default.create({base:{flex:1,elevation:16},mainSubview:{position:'absolute',top:0,left:0,right:0,bottom:0},drawerSubview:{position:'absolute',top:0,bottom:0},statusBar:{height:p.default.currentHeight},drawerStatusBar:{position:'absolute',top:0,left:0,right:0,height:p.default.currentHeight,backgroundColor:'rgba(0, 0, 0, 0.251)'}});m.exports=R},698,[407,436,508,402,403,417,419,422,426,534,699,578,579,659,702,703]); +__d(function(g,r,i,a,m,_e,d){var t,e=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),s=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=S(e);if(n&&n.has(t))return n.get(t);var l={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in t)if("default"!==u&&Object.prototype.hasOwnProperty.call(t,u)){var c=o?Object.getOwnPropertyDescriptor(t,u):null;c&&(c.get||c.set)?Object.defineProperty(l,u,c):l[u]=t[u]}l.default=t,n&&n.set(t,l);return l})(r(d[7])),f=r(d[0])(r(d[8])),p=r(d[0])(r(d[9])),y=r(d[0])(r(d[10])),v=r(d[0])(r(d[11])),k=r(d[0])(r(d[12]));function S(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(S=function(t){return t?n:e})(t)}function b(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}function _(t){var e,n,l=null!=(e=t.animated)&&e,o=null!=(n=t.showHideTransition)?n:'fade';return{backgroundColor:null!=t.backgroundColor?{value:t.backgroundColor,animated:l}:null,barStyle:null!=t.barStyle?{value:t.barStyle,animated:l}:null,translucent:t.translucent,hidden:null!=t.hidden?{value:t.hidden,animated:l,transition:o}:null,networkActivityIndicatorVisible:t.networkActivityIndicatorVisible}}var h=(function(t){(0,l.default)(h,t);var c,s,S=(c=h,s=b(),function(){var t,e=(0,u.default)(c);if(s){var n=(0,u.default)(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return(0,o.default)(this,t)});function h(){var t;(0,e.default)(this,h);for(var n=arguments.length,l=new Array(n),o=0;o is only supported on iOS.'),0===c.Children.count(this.props.children)?null:c.createElement(s.default,{style:[this.props.style,v.container],nativeID:this.props.nativeID,backgroundColor:this.props.backgroundColor},this.props.children)}}]),b})(c.Component),v=l.default.create({container:{position:'absolute'}});m.exports=h},705,[407,402,403,417,419,422,534,426,578,706]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=(0,r(d[0])(r(d[1])).default)('InputAccessory',{interfaceOnly:!0,paperComponentName:'RCTInputAccessoryView',excludedPlatforms:['android']});e.default=t},706,[407,584]); +__d(function(g,r,i,a,m,_e,d){Object.defineProperty(_e,"__esModule",{value:!0}),_e.default=void 0;var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),f=r(d[0])(r(d[6])),l=r(d[0])(r(d[7])),s=r(d[0])(r(d[8])),c=r(d[0])(r(d[9])),y=r(d[0])(r(d[10])),h=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=_(t);if(n&&n.has(e))return n.get(e);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in e)if("default"!==f&&Object.prototype.hasOwnProperty.call(e,f)){var l=u?Object.getOwnPropertyDescriptor(e,f):null;l&&(l.get||l.set)?Object.defineProperty(o,f,l):o[f]=e[f]}o.default=e,n&&n.set(e,o);return o})(r(d[11])),p=r(d[0])(r(d[12])),v=r(d[0])(r(d[13])),b=["behavior","children","contentContainerStyle","enabled","keyboardVerticalOffset","style"];function _(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(_=function(e){return e?n:t})(e)}function k(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var O=(function(_){(0,u.default)(E,_);var O,w,L=(O=E,w=k(),function(){var e,t=(0,l.default)(O);if(w){var n=(0,l.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,f.default)(this,e)});function E(e){var t;return(0,n.default)(this,E),(t=L.call(this,e))._frame=null,t._keyboardEvent=null,t._subscriptions=[],t._initialFrameHeight=0,t._onKeyboardChange=function(e){t._keyboardEvent=e,t._updateBottomIfNecesarry()},t._onLayout=function(e){var n=null==t._frame;t._frame=e.nativeEvent.layout,t._initialFrameHeight||(t._initialFrameHeight=t._frame.height),n&&t._updateBottomIfNecesarry()},t._updateBottomIfNecesarry=function(){if(null!=t._keyboardEvent){var e=t._keyboardEvent,n=e.duration,o=e.easing,u=e.endCoordinates,f=t._relativeKeyboardHeight(u);t.state.bottom!==f&&(n&&o&&c.default.configureNext({duration:n>10?n:10,update:{duration:n>10?n:10,type:c.default.Types[o]||'keyboard'}}),t.setState({bottom:f}))}else t.setState({bottom:0})},t.state={bottom:0},t.viewRef=h.createRef(),t}return(0,o.default)(E,[{key:"_relativeKeyboardHeight",value:function(e){var t,n=this._frame;if(!n||!e)return 0;var o=e.screenY-(null!=(t=this.props.keyboardVerticalOffset)?t:0);return Math.max(n.y+n.height-o,0)}},{key:"componentDidMount",value:function(){'ios'===y.default.OS?this._subscriptions=[s.default.addListener('keyboardWillChangeFrame',this._onKeyboardChange)]:this._subscriptions=[s.default.addListener('keyboardDidHide',this._onKeyboardChange),s.default.addListener('keyboardDidShow',this._onKeyboardChange)]}},{key:"componentWillUnmount",value:function(){this._subscriptions.forEach(function(e){e.remove()})}},{key:"render",value:function(){var n=this.props,o=n.behavior,u=n.children,f=n.contentContainerStyle,l=n.enabled,s=void 0===l||l,c=(n.keyboardVerticalOffset,n.style),y=(0,t.default)(n,b),_=!0===s?this.state.bottom:0;switch(o){case'height':var k;return null!=this._frame&&this.state.bottom>0&&(k={height:this._initialFrameHeight-_,flex:0}),h.createElement(v.default,(0,e.default)({ref:this.viewRef,style:p.default.compose(c,k),onLayout:this._onLayout},y),u);case'position':return h.createElement(v.default,(0,e.default)({ref:this.viewRef,style:c,onLayout:this._onLayout},y),h.createElement(v.default,{style:p.default.compose(f,{bottom:_})},u));case'padding':return h.createElement(v.default,(0,e.default)({ref:this.viewRef,style:p.default.compose(c,{paddingBottom:_}),onLayout:this._onLayout},y),u);default:return h.createElement(v.default,(0,e.default)({ref:this.viewRef,onLayout:this._onLayout,style:c},y),u)}}}]),E})(h.Component);_e.default=O},707,[407,436,508,402,403,417,419,422,657,658,426,534,578,579]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=r(d[0])},708,[709]); +__d(function(g,r,i,a,m,_e,d){'use strict';var e=r(d[0])(r(d[1])),t=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),u=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),f=(function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=l(t);if(n&&n.has(e))return n.get(e);var u={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in e)if("default"!==f&&Object.prototype.hasOwnProperty.call(e,f)){var c=o?Object.getOwnPropertyDescriptor(e,f):null;c&&(c.get||c.set)?Object.defineProperty(u,f,c):u[f]=e[f]}u.default=e,n&&n.set(e,u);return u})(r(d[6])),c=r(d[0])(r(d[7]));function l(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(l=function(e){return e?n:t})(e)}function p(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(e){return!1}}var s=(function(c){(0,n.default)(h,c);var l,s,v=(l=h,s=p(),function(){var e,t=(0,o.default)(l);if(s){var n=(0,o.default)(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return(0,u.default)(this,e)});function h(){return(0,e.default)(this,h),v.apply(this,arguments)}return(0,t.default)(h,[{key:"render",value:function(){var e=r(d[8]);return f.createElement(e,{style:[y.unimplementedView,this.props.style]},this.props.children)}}]),h})(f.Component),y=c.default.create({unimplementedView:{}});m.exports=s},709,[407,402,403,417,419,422,534,578,579]); +__d(function(g,r,i,a,m,_e,d){var t,e,n=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),s=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),p=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),f=(r(d[0])(r(d[8])),r(d[0])(r(d[9])),r(d[0])(r(d[10])));function h(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var v=r(d[11]),y=0,R=(function(t){(0,l.default)(R,t);var e,n,c=(e=R,n=h(),function(){var t,o=(0,p.default)(e);if(n){var s=(0,p.default)(this).constructor;t=Reflect.construct(o,arguments,s)}else t=o.apply(this,arguments);return(0,u.default)(this,t)});function R(t){var e;return(0,o.default)(this,R),(e=c.call(this,t))._identifier=y++,e}return(0,s.default)(R,[{key:"componentDidMount",value:function(){}},{key:"componentWillUnmount",value:function(){this._eventSubscription&&this._eventSubscription.remove()}},{key:"componentDidUpdate",value:function(){}},{key:"render",value:function(){var t=this;if(!0!==this.props.visible)return null;var e={backgroundColor:!0===this.props.transparent?'transparent':'white'},n=this.props.animationType||'none',o=this.props.presentationStyle;o||(o='fullScreen',!0===this.props.transparent&&(o='overFullScreen'));var s=this.props.children;return v.createElement(f.default,{animationType:n,presentationStyle:o,transparent:this.props.transparent,hardwareAccelerated:this.props.hardwareAccelerated,onRequestClose:this.props.onRequestClose,onShow:this.props.onShow,onDismiss:function(){t.props.onDismiss&&t.props.onDismiss()},visible:this.props.visible,statusBarTranslucent:this.props.statusBarTranslucent,identifier:this._identifier,style:b.modal,onStartShouldSetResponder:this._shouldSetResponder,supportedOrientations:this.props.supportedOrientations,onOrientationChange:this.props.onOrientationChange},v.createElement(r(d[12]).VirtualizedListContextResetter,null,v.createElement(r(d[13]).Context.Provider,{value:null},v.createElement(r(d[14]),{style:[b.container,e],collapsable:!1},s))))}},{key:"_shouldSetResponder",value:function(){return!0}}]),R})(v.Component);R.defaultProps={visible:!0,hardwareAccelerated:!1},R.contextType=r(d[15]).RootTagContext;var S=r(d[16]).getConstants().isRTL?'right':'left',b=r(d[17]).create({modal:{position:'absolute'},container:(t={},(0,n.default)(t,S,0),(0,n.default)(t,"top",0),(0,n.default)(t,"flex",1),t)}),C=null!=(e=c.default.unstable_Modal)?e:R;m.exports=C},710,[407,652,402,403,417,419,422,711,500,712,713,534,678,655,579,714,715,578]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;e.default={unstable_Modal:null}},711,[]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('ModalManager');e.default=n},712,[428]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var o=(0,r(d[0])(r(d[1])).default)('ModalHostView',{interfaceOnly:!0,paperComponentName:'RCTModalHostView'});e.default=o},713,[407,584]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.RootTagContext=void 0,e.createRootTag=function(t){return t};var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var p in n)if("default"!==p&&Object.prototype.hasOwnProperty.call(n,p)){var l=c?Object.getOwnPropertyDescriptor(n,p):null;l&&(l.get||l.set)?Object.defineProperty(f,p,l):f[p]=n[p]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).createContext(0);e.RootTagContext=n},714,[534]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=(function(){if(t.default){var n=t.default.getConstants(),f=n.isRTL,L=n.doLeftAndRightSwapInRTL,R=n.localeIdentifier;return{isRTL:f,doLeftAndRightSwapInRTL:L,localeIdentifier:R}}return{isRTL:!1,doLeftAndRightSwapInRTL:!0}})();m.exports={getConstants:function(){return n},allowRTL:function(n){t.default&&t.default.allowRTL(n)},forceRTL:function(n){t.default&&t.default.forceRTL(n)},swapLeftAndRightInRTL:function(n){t.default&&t.default.swapLeftAndRightInRTL(n)},isRTL:n.isRTL,doLeftAndRightSwapInRTL:n.doLeftAndRightSwapInRTL}},715,[407,716]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('I18nManager');e.default=n},716,[428]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=r(d[0])(r(d[1])),s=r(d[0])(r(d[2])),t=r(d[0])(r(d[3])),l=(function(n,s){if(!s&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var t=p(s);if(t&&t.has(n))return t.get(n);var l={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in n)if("default"!==u&&Object.prototype.hasOwnProperty.call(n,u)){var f=o?Object.getOwnPropertyDescriptor(n,u):null;f&&(f.get||f.set)?Object.defineProperty(l,u,f):l[u]=n[u]}l.default=n,t&&t.set(n,l);return l})(r(d[4])),o=r(d[0])(r(d[5])),u=r(d[0])(r(d[6])),f=r(d[0])(r(d[7])),c=["accessible","android_disableSound","android_ripple","cancelable","children","delayLongPress","disabled","focusable","onLongPress","onPress","onPressIn","onPressOut","pressRetentionOffset","style","testOnly_pressed","unstable_pressDelay"];function p(n){if("function"!=typeof WeakMap)return null;var s=new WeakMap,t=new WeakMap;return(p=function(n){return n?t:s})(n)}function b(n){var t=(0,l.useState)(!1),o=(0,s.default)(t,2),u=o[0],f=o[1];return[u||n,f]}var P=l.memo(l.forwardRef(function(p,P){var y=p.accessible,v=p.android_disableSound,O=p.android_ripple,_=p.cancelable,S=p.children,M=p.delayLongPress,h=p.disabled,j=p.focusable,w=p.onLongPress,I=p.onPress,L=p.onPressIn,R=p.onPressOut,D=p.pressRetentionOffset,k=p.style,W=p.testOnly_pressed,z=p.unstable_pressDelay,E=(0,t.default)(p,c),H=(0,l.useRef)(null);(0,l.useImperativeHandle)(P,function(){return H.current});var N=(0,o.default)(O,H),q=b(!0===W),x=(0,s.default)(q,2),A=x[0],B=x[1],C=(0,r(d[8]).normalizeRect)(p.hitSlop),F=null!=h?(0,n.default)({},p.accessibilityState,{disabled:h}):p.accessibilityState,G=(0,n.default)({},E,null==N?void 0:N.viewProps,{accessible:!1!==y,accessibilityState:F,focusable:!1!==j,hitSlop:C}),J=(0,l.useMemo)(function(){return{cancelable:_,disabled:h,hitSlop:C,pressRectOffset:D,android_disableSound:v,delayLongPress:M,delayPressIn:z,onLongPress:w,onPress:I,onPressIn:function(n){null!=N&&N.onPressIn(n),B(!0),null!=L&&L(n)},onPressMove:null==N?void 0:N.onPressMove,onPressOut:function(n){null!=N&&N.onPressOut(n),B(!1),null!=R&&R(n)}}},[v,N,_,M,h,C,w,I,L,R,D,B,z]),K=(0,u.default)(J);return l.createElement(f.default,(0,n.default)({},G,K,{ref:H,style:'function'==typeof k?k({pressed:A}):k,collapsable:!1}),'function'==typeof S?S({pressed:A}):S,null)}));P.displayName='Pressable';var y=P;e.default=y},717,[407,436,430,508,534,718,605,579,611]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(l,u){var s=null!=l?l:{},c=s.color,f=s.borderless,p=s.radius,v=s.foreground;return(0,o.useMemo)(function(){if('android'===t.Platform.OS&&t.Platform.Version>=21&&(null!=c||null!=f||null!=p)){var o=(0,t.processColor)(c);(0,n.default)(null==o||'number'==typeof o,'Unexpected color given for Ripple color');var l={type:'RippleAndroid',color:o,borderless:!0===f,rippleRadius:p};return{viewProps:!0===v?{nativeForegroundAndroid:l}:{nativeBackgroundAndroid:l},onPressIn:function(n){var t,o,l=u.current;null!=l&&(r(d[4]).Commands.hotspotUpdate(l,null!=(t=n.nativeEvent.locationX)?t:0,null!=(o=n.nativeEvent.locationY)?o:0),r(d[4]).Commands.setPressed(l,!0))},onPressMove:function(n){var t,o,l=u.current;null!=l&&r(d[4]).Commands.hotspotUpdate(l,null!=(t=n.nativeEvent.locationX)?t:0,null!=(o=n.nativeEvent.locationY)?o:0)},onPressOut:function(n){var t=u.current;null!=t&&r(d[4]).Commands.setPressed(t,!1)}}}return null},[f,c,v,p,u])};var n=r(d[0])(r(d[1])),t=r(d[2]),o=(function(n,t){if(!t&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var o=l(t);if(o&&o.has(n))return o.get(n);var u={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var f=s?Object.getOwnPropertyDescriptor(n,c):null;f&&(f.get||f.set)?Object.defineProperty(u,c,f):u[c]=n[c]}u.default=n,o&&o.set(n,u);return u})(r(d[3]));function l(n){if("function"!=typeof WeakMap)return null;var t=new WeakMap,o=new WeakMap;return(l=function(n){return n?o:t})(n)}},718,[407,425,411,534,580]); +__d(function(g,r,i,a,m,_e,d){'use strict';var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),f=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=p(e);if(n&&n.has(t))return n.get(t);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var c=u?Object.getOwnPropertyDescriptor(t,f):null;c&&(c.get||c.set)?Object.defineProperty(o,f,c):o[f]=t[f]}o.default=t,n&&n.set(t,o);return o})(r(d[6])),c=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),s=r(d[0])(r(d[9]));function p(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(p=function(t){return t?n:e})(t)}function y(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var h=(function(c){(0,n.default)(O,c);var p,h,b=(p=O,h=y(),function(){var t,e=(0,u.default)(p);if(h){var n=(0,u.default)(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return(0,o.default)(this,t)});function O(){return(0,t.default)(this,O),b.apply(this,arguments)}return(0,e.default)(O,[{key:"render",value:function(){return f.createElement(s.default,{style:[v.dummy,this.props.style]},f.createElement(l.default,{style:v.text},"ProgressViewIOS is not supported on this platform!"))}}]),O})(f.Component),v=c.default.create({dummy:{width:120,height:20,backgroundColor:'#ffbcbc',borderWidth:1,borderColor:'red',alignItems:'center',justifyContent:'center'},text:{color:'#333333',margin:5,fontSize:10}});m.exports=h},719,[407,402,403,417,419,422,534,578,589,579]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t,n=r(d[0])(r(d[1])),u=r(d[0])(r(d[2])),f=r(d[0])(r(d[3])),o=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var u=c(n);if(u&&u.has(t))return u.get(t);var f={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in t)if("default"!==l&&Object.prototype.hasOwnProperty.call(t,l)){var p=o?Object.getOwnPropertyDescriptor(t,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=t[l]}f.default=t,u&&u.set(t,f);return f})(r(d[4])),l=r(d[0])(r(d[5])),p=["emulateUnlessSupported"];function c(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,u=new WeakMap;return(c=function(t){return t?u:n})(t)}if('android'===f.default.OS)t=o.forwardRef(function(t,f){t.emulateUnlessSupported;var c=(0,u.default)(t,p);return o.createElement(l.default,(0,n.default)({},c,{ref:f}))});else{var s=r(d[6]).default;t=o.forwardRef(function(t,u){return o.createElement(s,(0,n.default)({emulateUnlessSupported:!0},t,{ref:u}))})}var v=t;e.default=v},720,[407,436,508,426,534,579,721]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var f=(0,r(d[0])(r(d[1])).default)('SafeAreaView',{paperComponentName:'RCTSafeAreaView',interfaceOnly:!0});e.default=f},721,[407,584]); +__d(function(g,r,i,a,m,_e,d){'use strict';var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),f=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=p(e);if(n&&n.has(t))return n.get(t);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var c=u?Object.getOwnPropertyDescriptor(t,f):null;c&&(c.get||c.set)?Object.defineProperty(o,f,c):o[f]=t[f]}o.default=t,n&&n.set(t,o);return o})(r(d[6])),c=r(d[0])(r(d[7])),l=r(d[0])(r(d[8])),s=r(d[0])(r(d[9]));function p(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(p=function(t){return t?n:e})(t)}function y(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var h=(function(c){(0,n.default)(O,c);var p,h,b=(p=O,h=y(),function(){var t,e=(0,u.default)(p);if(h){var n=(0,u.default)(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return(0,o.default)(this,t)});function O(){return(0,t.default)(this,O),b.apply(this,arguments)}return(0,e.default)(O,[{key:"render",value:function(){return f.createElement(s.default,{style:[v.dummy,this.props.style]},f.createElement(l.default,{style:v.text},"SegmentedControlIOS is not supported on this platform!"))}}]),O})(f.Component),v=c.default.create({dummy:{width:120,height:50,backgroundColor:'#ffbcbc',borderWidth:1,borderColor:'red',alignItems:'center',justifyContent:'center'},text:{color:'#333333',margin:5,fontSize:10}});m.exports=h},722,[407,402,403,417,419,422,534,578,589,579]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),l=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var l=c(n);if(l&&l.has(t))return l.get(t);var u={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var s=o?Object.getOwnPropertyDescriptor(t,f):null;s&&(s.get||s.set)?Object.defineProperty(u,f,s):u[f]=t[f]}u.default=t,l&&l.set(t,u);return u})(r(d[3])),u=r(d[0])(r(d[4])),o=r(d[0])(r(d[5])),f=r(d[0])(r(d[6])),s=["value","minimumValue","maximumValue","step","onValueChange","onSlidingComplete"];function c(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,l=new WeakMap;return(c=function(t){return t?l:n})(t)}var v,p=l.forwardRef(function(c,p){var b,y=f.default.compose(v.slider,c.style),S=c.value,O=void 0===S?.5:S,h=c.minimumValue,V=void 0===h?0:h,C=c.maximumValue,j=void 0===C?1:C,w=c.step,E=void 0===w?0:w,P=c.onValueChange,x=c.onSlidingComplete,M=(0,n.default)(c,s),R=P?function(t){var n=!0;'android'===u.default.OS&&(n=null!=t.nativeEvent.fromUser&&t.nativeEvent.fromUser),n&&P(t.nativeEvent.value)}:null,_=R,k=x?function(t){x(t.nativeEvent.value)}:null,W=!0===c.disabled||!0===(null==(b=c.accessibilityState)?void 0:b.disabled),D=W?(0,t.default)({},c.accessibilityState,{disabled:!0}):c.accessibilityState;return l.createElement(o.default,(0,t.default)({},M,{accessibilityState:D,enabled:!W,disabled:W,maximumValue:j,minimumValue:V,onChange:_,onResponderTerminationRequest:function(){return!1},onSlidingComplete:k,onStartShouldSetResponder:function(){return!0},onValueChange:R,ref:p,step:E,style:y,value:O}))});v='ios'===u.default.OS?f.default.create({slider:{height:40}}):f.default.create({slider:{}}),m.exports=p},723,[407,436,508,534,426,724,578]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var l=(0,r(d[0])(r(d[1])).default)('Slider',{interfaceOnly:!0,paperComponentName:'RCTSlider'});e.default=l},724,[407,584]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),u=C(r(d[5])),f=r(d[0])(r(d[6])),c=r(d[0])(r(d[7])),s=C(r(d[8])),v=C(r(d[9])),b=["disabled","ios_backgroundColor","onChange","onValueChange","style","thumbColor","trackColor","value"];function p(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,o=new WeakMap;return(p=function(t){return t?o:n})(t)}function C(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=p(n);if(o&&o.has(t))return o.get(t);var l={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var f in t)if("default"!==f&&Object.prototype.hasOwnProperty.call(t,f)){var c=u?Object.getOwnPropertyDescriptor(t,f):null;c&&(c.get||c.set)?Object.defineProperty(l,f,c):l[f]=t[f]}return l.default=t,o&&o.set(t,l),l}var h=function(){return!1},y=function(){return!0},R=u.forwardRef(function(p,C){var R=p.disabled,k=p.ios_backgroundColor,O=p.onChange,w=p.onValueChange,S=p.style,_=p.thumbColor,j=p.trackColor,P=p.value,T=(0,o.default)(p,b),E=null==j?void 0:j.false,M=null==j?void 0:j.true,V=u.useRef(null),F=(0,c.default)(V,C),W=u.useState({value:null}),q=(0,n.default)(W,2),D=q[0],N=q[1],L=function(t){null==O||O(t),null==w||w(t.nativeEvent.value),N({value:t.nativeEvent.value})};if(u.useLayoutEffect(function(){var t,n=!0===P;D.value!==n&&null!=(null==(t=V.current)?void 0:t.setNativeProps)&&('android'===l.default.OS?s.Commands.setNativeValue(V.current,n):v.Commands.setValue(V.current,n))},[P,D]),'android'===l.default.OS){var x,z={enabled:!0!==R,on:!0===P,style:S,thumbTintColor:_,trackColorForFalse:E,trackColorForTrue:M,trackTintColor:!0===P?M:E};return u.createElement(s.default,(0,t.default)({},T,z,{accessibilityRole:null!=(x=p.accessibilityRole)?x:'switch',onChange:L,onResponderTerminationRequest:h,onStartShouldSetResponder:y,ref:F}))}var A,B={disabled:R,onTintColor:M,style:f.default.compose({height:31,width:51},f.default.compose(S,null==k?null:{backgroundColor:k,borderRadius:16})),thumbTintColor:_,tintColor:E,value:!0===P};return u.createElement(v.default,(0,t.default)({},T,B,{accessibilityRole:null!=(A=p.accessibilityRole)?A:'switch',onChange:L,onResponderTerminationRequest:h,onStartShouldSetResponder:y,ref:F}))});e.default=R},725,[407,436,430,508,426,534,578,726,727,728]); +__d(function(g,r,_i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){for(var o=arguments.length,u=new Array(o),i=0;i=t.length?{done:!0}:{done:!1,value:t[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function o(t,n){if(t){if("string"==typeof t)return u(t,n);var o=Object.prototype.toString.call(t).slice(8,-1);return"Object"===o&&t.constructor&&(o=t.constructor.name),"Map"===o||"Set"===o?Array.from(t):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?u(t,n):void 0}}function u(t,n){(null==n||n>t.length)&&(n=t.length);for(var o=0,u=new Array(n);o1&&(be=u.createElement(f.default,null,be)),oe=u.createElement(I,(0,t.default)({ref:ee},o,pe,{accessible:ce,autoCapitalize:ye,blurOnSubmit:ae,caretHidden:se,children:be,disableFullscreenUI:o.disableFullscreenUI,focusable:ie,mostRecentEventCount:H,onBlur:ue,onChange:te,onFocus:le,onScroll:re,onSelectionChange:ne,placeholder:Se,selection:M,style:Ce,text:X,textBreakStrategy:o.textBreakStrategy}))}return u.createElement(p.default.Provider,{value:!0},oe)}var M=u.forwardRef(function(l,o){var c=l.allowFontScaling,s=void 0===c||c,f=l.rejectResponderTermination,p=void 0===f||f,v=l.underlineColorAndroid,C=void 0===v?'transparent':v,y=(0,n.default)(l,F);return u.createElement(A,(0,t.default)({allowFontScaling:s,rejectResponderTermination:p,underlineColorAndroid:C},y,{forwardedRef:o}))});M.propTypes=o.default,M.State={currentlyFocusedInput:v.default.currentlyFocusedInput,currentlyFocusedField:v.default.currentlyFocusedField,focusTextInput:v.default.focusTextInput,blurTextInput:v.default.blurTextInput};var z=s.default.create({multilineInput:{paddingTop:5}});m.exports=M},729,[407,436,508,430,534,730,426,578,589,581,540,425,702,646,605,541,731,733]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=['phoneNumber','link','address','calendarEvent','none','all'];m.exports=r(d[0])({},r(d[1]),{autoCapitalize:r(d[2]).oneOf(['none','sentences','words','characters']),autoComplete:r(d[2]).oneOf(['cc-csc','cc-exp','cc-exp-month','cc-exp-year','cc-number','email','name','password','postal-code','street-address','tel','username','off']),autoCorrect:r(d[2]).bool,spellCheck:r(d[2]).bool,autoFocus:r(d[2]).bool,allowFontScaling:r(d[2]).bool,maxFontSizeMultiplier:r(d[2]).number,editable:r(d[2]).bool,keyboardType:r(d[2]).oneOf(['default','email-address','numeric','phone-pad','number-pad','url','ascii-capable','numbers-and-punctuation','name-phone-pad','decimal-pad','twitter','web-search','ascii-capable-number-pad','visible-password']),keyboardAppearance:r(d[2]).oneOf(['default','light','dark']),returnKeyType:r(d[2]).oneOf(['done','go','next','search','send','none','previous','default','emergency-call','google','join','route','yahoo']),returnKeyLabel:r(d[2]).string,maxLength:r(d[2]).number,numberOfLines:r(d[2]).number,disableFullscreenUI:r(d[2]).bool,enablesReturnKeyAutomatically:r(d[2]).bool,multiline:r(d[2]).bool,textBreakStrategy:r(d[2]).oneOf(['simple','highQuality','balanced']),onBlur:r(d[2]).func,onFocus:r(d[2]).func,onChange:r(d[2]).func,onChangeText:r(d[2]).func,onContentSizeChange:r(d[2]).func,onTextInput:r(d[2]).func,onEndEditing:r(d[2]).func,onSelectionChange:r(d[2]).func,onSubmitEditing:r(d[2]).func,onKeyPress:r(d[2]).func,onLayout:r(d[2]).func,onScroll:r(d[2]).func,placeholder:r(d[2]).string,placeholderTextColor:r(d[3]),scrollEnabled:r(d[2]).bool,secureTextEntry:r(d[2]).bool,selectionColor:r(d[3]),selection:r(d[2]).shape({start:r(d[2]).number.isRequired,end:r(d[2]).number}),value:r(d[2]).string,defaultValue:r(d[2]).string,clearButtonMode:r(d[2]).oneOf(['never','while-editing','unless-editing','always']),clearTextOnFocus:r(d[2]).bool,selectTextOnFocus:r(d[2]).bool,blurOnSubmit:r(d[2]).bool,style:r(d[4]).style,underlineColorAndroid:r(d[3]),inlineImageLeft:r(d[2]).string,inlineImagePadding:r(d[2]).number,rejectResponderTermination:r(d[2]).bool,dataDetectorTypes:r(d[2]).oneOfType([r(d[2]).oneOf(n),r(d[2]).arrayOf(r(d[2]).oneOf(n))]),caretHidden:r(d[2]).bool,contextMenuHidden:r(d[2]).bool,inputAccessoryViewID:r(d[2]).string,textContentType:r(d[2]).oneOf(['none','URL','addressCity','addressCityAndState','addressState','countryName','creditCardNumber','emailAddress','familyName','fullStreetAddress','givenName','jobTitle','location','middleName','name','namePrefix','nameSuffix','nickname','organizationName','postalCode','streetAddressLine1','streetAddressLine2','sublocality','telephoneNumber','username','password','newPassword','oneTimeCode']),showSoftInputOnFocus:r(d[2]).bool})},730,[436,682,596,600,590]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Commands=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var u=o(n);if(u&&u.has(t))return u.get(t);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var p=l?Object.getOwnPropertyDescriptor(t,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=t[c]}f.default=t,u&&u.set(t,f);return f})(r(d[3]));function o(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,u=new WeakMap;return(o=function(t){return t?u:n})(t)}var f=(0,t.default)({supportedCommands:['focus','blur','setTextAndSelection']});e.Commands=f;var l=u.get('RCTSinglelineTextInputView',function(){return n.default});e.default=l},731,[407,542,732,555]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),n={uiViewClassName:'RCTSinglelineTextInputView',bubblingEventTypes:{topBlur:{phasedRegistrationNames:{bubbled:'onBlur',captured:'onBlurCapture'}},topChange:{phasedRegistrationNames:{bubbled:'onChange',captured:'onChangeCapture'}},topEndEditing:{phasedRegistrationNames:{bubbled:'onEndEditing',captured:'onEndEditingCapture'}},topFocus:{phasedRegistrationNames:{bubbled:'onFocus',captured:'onFocusCapture'}},topKeyPress:{phasedRegistrationNames:{bubbled:'onKeyPress',captured:'onKeyPressCapture'}},topSubmitEditing:{phasedRegistrationNames:{bubbled:'onSubmitEditing',captured:'onSubmitEditingCapture'}},topTouchCancel:{phasedRegistrationNames:{bubbled:'onTouchCancel',captured:'onTouchCancelCapture'}},topTouchEnd:{phasedRegistrationNames:{bubbled:'onTouchEnd',captured:'onTouchEndCapture'}},topTouchMove:{phasedRegistrationNames:{bubbled:'onTouchMove',captured:'onTouchMoveCapture'}}},directEventTypes:{},validAttributes:(0,t.default)({},o.default.validAttributes,{fontSize:!0,fontWeight:!0,fontVariant:!0,textShadowOffset:{diff:r(d[3])},allowFontScaling:!0,fontStyle:!0,textTransform:!0,textAlign:!0,fontFamily:!0,lineHeight:!0,isHighlighted:!0,writingDirection:!0,textDecorationLine:!0,textShadowRadius:!0,letterSpacing:!0,textDecorationStyle:!0,textDecorationColor:{process:r(d[4])},color:{process:r(d[4])},maxFontSizeMultiplier:!0,textShadowColor:{process:r(d[4])},editable:!0,inputAccessoryViewID:!0,caretHidden:!0,enablesReturnKeyAutomatically:!0,placeholderTextColor:{process:r(d[4])},onSelectionChange:!0,clearButtonMode:!0,onContentSizeChange:!0,keyboardType:!0,selection:!0,returnKeyType:!0,blurOnSubmit:!0,mostRecentEventCount:!0,onChange:!0,scrollEnabled:!0,selectionColor:{process:r(d[4])},contextMenuHidden:!0,secureTextEntry:!0,onTextInput:!0,placeholder:!0,autoCorrect:!0,onScroll:!0,multiline:!0,textContentType:!0,maxLength:!0,autoCapitalize:!0,keyboardAppearance:!0,passwordRules:!0,spellCheck:!0,selectTextOnFocus:!0,text:!0,clearTextOnFocus:!0})};m.exports=n},732,[407,436,544,551,546]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Commands=void 0;var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=(function(t,n){if(!n&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var u=o(n);if(u&&u.has(t))return u.get(t);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var p=l?Object.getOwnPropertyDescriptor(t,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=t[c]}f.default=t,u&&u.set(t,f);return f})(r(d[3]));function o(t){if("function"!=typeof WeakMap)return null;var n=new WeakMap,u=new WeakMap;return(o=function(t){return t?u:n})(t)}var f=(0,t.default)({supportedCommands:['focus','blur','setTextAndSelection']});e.Commands=f;var l=u.get('RCTMultilineTextInputView',function(){return n.default});e.default=l},733,[407,542,732,555]); +__d(function(g,r,i,a,m,_e,d){var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),o=((function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var o=u(e);if(o&&o.has(t))return o.get(t);var E={},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var n in t)if("default"!==n&&Object.prototype.hasOwnProperty.call(t,n)){var l=s?Object.getOwnPropertyDescriptor(t,n):null;l&&(l.get||l.set)?Object.defineProperty(E,n,l):E[n]=t[n]}E.default=t,o&&o.set(t,E)})(r(d[3])),r(d[0])(r(d[4]))),E=r(d[0])(r(d[5])),s=r(d[0])(r(d[6])),n=r(d[0])(r(d[7])),l=r(d[0])(r(d[8]));function u(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,o=new WeakMap;return(u=function(t){return t?o:e})(t)}var h=function(t){var e=t.touches,o=t.changedTouches,E=e&&e.length>0,s=o&&o.length>0;return!E&&s?o[0]:E?e[0]:t},R='NOT_RESPONDER',_='RESPONDER_INACTIVE_PRESS_IN',c='RESPONDER_INACTIVE_PRESS_OUT',S='RESPONDER_ACTIVE_PRESS_IN',T='RESPONDER_ACTIVE_PRESS_OUT',P='RESPONDER_ACTIVE_LONG_PRESS_IN',D='RESPONDER_ACTIVE_LONG_PRESS_OUT',N='ERROR',O={NOT_RESPONDER:!1,RESPONDER_INACTIVE_PRESS_IN:!1,RESPONDER_INACTIVE_PRESS_OUT:!1,RESPONDER_ACTIVE_PRESS_IN:!1,RESPONDER_ACTIVE_PRESS_OUT:!1,RESPONDER_ACTIVE_LONG_PRESS_IN:!1,RESPONDER_ACTIVE_LONG_PRESS_OUT:!1,ERROR:!1},p=(0,e.default)({},O,{RESPONDER_ACTIVE_PRESS_OUT:!0,RESPONDER_ACTIVE_PRESS_IN:!0}),f=(0,e.default)({},O,{RESPONDER_INACTIVE_PRESS_IN:!0,RESPONDER_ACTIVE_PRESS_IN:!0,RESPONDER_ACTIVE_LONG_PRESS_IN:!0}),A=(0,e.default)({},O,{RESPONDER_ACTIVE_LONG_PRESS_IN:!0}),b='DELAY',I='RESPONDER_GRANT',L='RESPONDER_RELEASE',v='RESPONDER_TERMINATED',y='ENTER_PRESS_RECT',C='LEAVE_PRESS_RECT',G='LONG_PRESS_DETECTED',V={NOT_RESPONDER:{DELAY:N,RESPONDER_GRANT:_,RESPONDER_RELEASE:N,RESPONDER_TERMINATED:N,ENTER_PRESS_RECT:N,LEAVE_PRESS_RECT:N,LONG_PRESS_DETECTED:N},RESPONDER_INACTIVE_PRESS_IN:{DELAY:S,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:_,LEAVE_PRESS_RECT:c,LONG_PRESS_DETECTED:N},RESPONDER_INACTIVE_PRESS_OUT:{DELAY:T,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:_,LEAVE_PRESS_RECT:c,LONG_PRESS_DETECTED:N},RESPONDER_ACTIVE_PRESS_IN:{DELAY:N,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:S,LEAVE_PRESS_RECT:T,LONG_PRESS_DETECTED:P},RESPONDER_ACTIVE_PRESS_OUT:{DELAY:N,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:S,LEAVE_PRESS_RECT:T,LONG_PRESS_DETECTED:N},RESPONDER_ACTIVE_LONG_PRESS_IN:{DELAY:N,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:P,LEAVE_PRESS_RECT:D,LONG_PRESS_DETECTED:P},RESPONDER_ACTIVE_LONG_PRESS_OUT:{DELAY:N,RESPONDER_GRANT:N,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:P,LEAVE_PRESS_RECT:D,LONG_PRESS_DETECTED:N},error:{DELAY:R,RESPONDER_GRANT:_,RESPONDER_RELEASE:R,RESPONDER_TERMINATED:R,ENTER_PRESS_RECT:R,LEAVE_PRESS_RECT:R,LONG_PRESS_DETECTED:R}},H={componentDidMount:function(){E.default.isTV},componentWillUnmount:function(){this.touchableDelayTimeout&&clearTimeout(this.touchableDelayTimeout),this.longPressDelayTimeout&&clearTimeout(this.longPressDelayTimeout),this.pressOutDelayTimeout&&clearTimeout(this.pressOutDelayTimeout)},touchableGetInitialState:function(){return{touchable:{touchState:void 0,responderID:null}}},touchableHandleResponderTerminationRequest:function(){return!this.props.rejectResponderTermination},touchableHandleStartShouldSetResponder:function(){return!this.props.disabled},touchableLongPressCancelsPress:function(){return!0},touchableHandleResponderGrant:function(t){var e=t.currentTarget;t.persist(),this.pressOutDelayTimeout&&clearTimeout(this.pressOutDelayTimeout),this.pressOutDelayTimeout=null,this.state.touchable.touchState=R,this.state.touchable.responderID=e,this._receiveSignal(I,t);var o=void 0!==this.touchableGetHighlightDelayMS?Math.max(this.touchableGetHighlightDelayMS(),0):130;0!==(o=isNaN(o)?130:o)?this.touchableDelayTimeout=setTimeout(this._handleDelay.bind(this,t),o):this._handleDelay(t);var E=void 0!==this.touchableGetLongPressDelayMS?Math.max(this.touchableGetLongPressDelayMS(),10):370;E=isNaN(E)?370:E,this.longPressDelayTimeout=setTimeout(this._handleLongDelay.bind(this,t),E+o)},touchableHandleResponderRelease:function(t){this.pressInLocation=null,this._receiveSignal(L,t)},touchableHandleResponderTerminate:function(t){this.pressInLocation=null,this._receiveSignal(v,t)},touchableHandleResponderMove:function(t){if(this.state.touchable.positionOnActivate){var e=this.state.touchable.positionOnActivate,o=this.state.touchable.dimensionsOnActivate,E=this.touchableGetPressRectOffset?this.touchableGetPressRectOffset():{left:20,right:20,top:20,bottom:20},s=E.left,n=E.top,l=E.right,u=E.bottom,R=this.touchableGetHitSlop?this.touchableGetHitSlop():null;R&&(s+=R.left||0,n+=R.top||0,l+=R.right||0,u+=R.bottom||0);var c=h(t.nativeEvent),S=c&&c.pageX,T=c&&c.pageY;if(this.pressInLocation)this._getDistanceBetweenPoints(S,T,this.pressInLocation.pageX,this.pressInLocation.pageY)>10&&this._cancelLongPressDelayTimeout();if(S>e.left-s&&T>e.top-n&&S>`");E!==s&&(this._performSideEffectsForTransition(E,s,t,e),this.state.touchable.touchState=s)}},_cancelLongPressDelayTimeout:function(){this.longPressDelayTimeout&&clearTimeout(this.longPressDelayTimeout),this.longPressDelayTimeout=null},_isHighlight:function(t){return t===S||t===P},_savePressInLocation:function(t){var e=h(t.nativeEvent),o=e&&e.pageX,E=e&&e.pageY,s=e&&e.locationX,n=e&&e.locationY;this.pressInLocation={pageX:o,pageY:E,locationX:s,locationY:n}},_getDistanceBetweenPoints:function(t,e,o,E){var s=t-o,n=e-E;return Math.sqrt(s*s+n*n)},_performSideEffectsForTransition:function(t,e,o,s){var n=this._isHighlight(t),u=this._isHighlight(e);(o===v||o===L)&&this._cancelLongPressDelayTimeout();var h=t===R&&e===_,c=!p[t]&&p[e];if((h||c)&&this._remeasureMetricsOnActivation(),f[t]&&o===G&&this.touchableHandleLongPress&&this.touchableHandleLongPress(s),u&&!n?this._startHighlight(s):!u&&n&&this._endHighlight(s),f[t]&&o===L){var S=!!this.props.onLongPress,T=A[t]&&(!S||!this.touchableLongPressCancelsPress());(!A[t]||T)&&this.touchableHandlePress&&(u||n||(this._startHighlight(s),this._endHighlight(s)),'android'!==E.default.OS||this.props.touchSoundDisabled||l.default.playTouchSound(),this.touchableHandlePress(s))}this.touchableDelayTimeout&&clearTimeout(this.touchableDelayTimeout),this.touchableDelayTimeout=null},_startHighlight:function(t){this._savePressInLocation(t),this.touchableHandleActivePressIn&&this.touchableHandleActivePressIn(t)},_endHighlight:function(t){var e=this;this.touchableHandleActivePressOut&&(this.touchableGetPressOutDelayMS&&this.touchableGetPressOutDelayMS()?this.pressOutDelayTimeout=setTimeout(function(){e.touchableHandleActivePressOut(t)},this.touchableGetPressOutDelayMS()):this.touchableHandleActivePressOut(t))},withoutDefaultFocusAndBlur:{}},M=(H.touchableHandleFocus,H.touchableHandleBlur,(0,t.default)(H,["touchableHandleFocus","touchableHandleBlur"]));H.withoutDefaultFocusAndBlur=M;var w={Mixin:H,renderDebugView:function(t){t.color,t.hitSlop;return null}};m.exports=w},734,[407,508,436,534,735,426,737,450,607]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])(r(d[1])),o=t.default.twoArgumentPooler;function n(t,o){this.width=t,this.height=o}n.prototype.destructor=function(){this.width=null,this.height=null},n.getPooledFromElement=function(t){return n.getPooled(t.offsetWidth,t.offsetHeight)},t.default.addPoolingTo(n,o),m.exports=n},735,[407,736]); +__d(function(g,r,i,a,m,e,d){'use strict';var t=r(d[0])(r(d[1])),n=function(t){if(this.instancePool.length){var n=this.instancePool.pop();return this.call(n,t),n}return new this(t)},o=function(n){(0,t.default)(n instanceof this,'Trying to release an instance into a pool of a different type.'),n.destructor(),this.instancePool.length=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function b(e,t){if(e){if("string"==typeof e)return h(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?h(e,t):void 0}}function h(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);n=0;n--)if(t[n]())return;i.exitApp()});var i={exitApp:function(){n.default&&n.default.invokeDefaultBackPressHandler()},addEventListener:function(n,f){return-1===t.indexOf(f)&&t.push(f),{remove:function(){return i.removeEventListener(n,f)}}},removeEventListener:function(n,i){-1!==t.indexOf(i)&&t.splice(t.indexOf(i),1)}};m.exports=i},750,[407,751,413]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('DeviceEventManager');e.default=n},751,[428]); +__d(function(g,r,i,a,m,_e,d){var t=r(d[0])(r(d[1])),e=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),o=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),l=(r(d[0])(r(d[7])),r(d[0])(r(d[8]))),s=(function(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||"object"!=typeof t&&"function"!=typeof t)return{default:t};var n=p(e);if(n&&n.has(t))return n.get(t);var o={},u=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if("default"!==c&&Object.prototype.hasOwnProperty.call(t,c)){var l=u?Object.getOwnPropertyDescriptor(t,c):null;l&&(l.get||l.set)?Object.defineProperty(o,c,l):o[c]=t[c]}o.default=t,n&&n.set(t,o);return o})(r(d[9]));function p(t){if("function"!=typeof WeakMap)return null;var e=new WeakMap,n=new WeakMap;return(p=function(t){return t?n:e})(t)}function f(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var h=(function(l){(0,n.default)(b,l);var p,h,y=(p=b,h=f(),function(){var t,e=(0,u.default)(p);if(h){var n=(0,u.default)(this).constructor;t=Reflect.construct(e,arguments,n)}else t=e.apply(this,arguments);return(0,o.default)(this,t)});function b(){var e;(0,t.default)(this,b);for(var n=arguments.length,o=new Array(n),u=0;uthis.eventPool.length&&this.eventPool.push(e)}function T(e){e.getPooled=_,e.eventPool=[],e.release=R}n(i[2])(P.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=w)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=w)},persist:function(){this.isPersistent=w},isPersistent:x,destructor:function(){var e,n=this.constructor.Interface;for(e in n)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=x,this._dispatchInstances=this._dispatchListeners=null}}),P.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},P.extend=function(e){function t(){}function r(){return l.apply(this,arguments)}var l=this;t.prototype=l.prototype;var a=new t;return n(i[2])(a,r.prototype),r.prototype=a,r.prototype.constructor=r,r.Interface=n(i[2])({},l.Interface,e),r.extend=l.extend,T(r),r},T(P);var E=P.extend({touchHistory:function(){return null}});function N(e){return"topTouchStart"===e}function C(e){return"topTouchMove"===e}var z=["topTouchStart"],I=["topTouchMove"],L=["topTouchCancel","topTouchEnd"],U=[],M={touchBank:U,numberActiveTouches:0,indexOfSingleActiveTouch:-1,mostRecentTimeStamp:0};function F(e){return e.timeStamp||e.timestamp}function D(e){if(null==(e=e.identifier))throw Error("Touch object is missing identifier.");return e}function A(e){var n=D(e),t=U[n];t?(t.touchActive=!0,t.startPageX=e.pageX,t.startPageY=e.pageY,t.startTimeStamp=F(e),t.currentPageX=e.pageX,t.currentPageY=e.pageY,t.currentTimeStamp=F(e),t.previousPageX=e.pageX,t.previousPageY=e.pageY,t.previousTimeStamp=F(e)):(t={touchActive:!0,startPageX:e.pageX,startPageY:e.pageY,startTimeStamp:F(e),currentPageX:e.pageX,currentPageY:e.pageY,currentTimeStamp:F(e),previousPageX:e.pageX,previousPageY:e.pageY,previousTimeStamp:F(e)},U[n]=t),M.mostRecentTimeStamp=F(e)}function H(e){var n=U[D(e)];n&&(n.touchActive=!0,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=F(e),M.mostRecentTimeStamp=F(e))}function Q(e){var n=U[D(e)];n&&(n.touchActive=!1,n.previousPageX=n.currentPageX,n.previousPageY=n.currentPageY,n.previousTimeStamp=n.currentTimeStamp,n.currentPageX=e.pageX,n.currentPageY=e.pageY,n.currentTimeStamp=F(e),M.mostRecentTimeStamp=F(e))}var j,B={instrument:function(e){j=e},recordTouchTrack:function(e,n){if(null!=j&&j(e,n),C(e))n.changedTouches.forEach(H);else if(N(e))n.changedTouches.forEach(A),M.numberActiveTouches=n.touches.length,1===M.numberActiveTouches&&(M.indexOfSingleActiveTouch=n.touches[0].identifier);else if(("topTouchEnd"===e||"topTouchCancel"===e)&&(n.changedTouches.forEach(Q),M.numberActiveTouches=n.touches.length,1===M.numberActiveTouches))for(e=0;e=(a=n&-n)||16===l&&0!=(4194240&a)))return n;if(0!=(4&r)&&(r|=16&t),0!==(n=e.entangledLanes))for(e=e.entanglements,n&=r;0t;t++)n.push(e);return n}function wn(e,n,t){e.pendingLanes|=n,536870912!==n&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[n=31-_n(n)]=t}function xn(e,n){var t=e.pendingLanes&~n;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=n,e.mutableReadLanes&=n,e.entangledLanes&=n,n=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0 component.");return t=$n,$n+=2,{node:Ln(t,"RCTRawText",n,{text:e},r)}}var Kn=setTimeout,Zn=clearTimeout;function et(e){var n=e.node,t=an(null,Ge,{style:{display:"none"}},e.canonical.viewConfig.validAttributes);return{node:Dn(n,t),canonical:e.canonical}}function nt(e,n,t){return n="",t&&(n=" (created by "+t+")"),"\n in "+(e||"Unknown")+n}function tt(e,n){return e?nt(e.displayName||e.name||null,n,null):""}var rt=Object.prototype.hasOwnProperty,lt=[],at=-1;function it(e){return{current:e}}function ut(e){0>at||(e.current=lt[at],lt[at]=null,at--)}function ot(e,n){lt[++at]=e.current,e.current=n}var st={},ct=it(st),dt=it(!1),ft=st;function pt(e,n){var t=e.type.contextTypes;if(!t)return st;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===n)return r.__reactInternalMemoizedMaskedChildContext;var l,a={};for(l in t)a[l]=n[l];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=n,e.__reactInternalMemoizedMaskedChildContext=a),a}function ht(e){return null!==(e=e.childContextTypes)&&void 0!==e}function gt(){ut(dt),ut(ct)}function mt(e,n,t){if(ct.current!==st)throw Error("Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.");ot(ct,n),ot(dt,t)}function vt(e,t,r){var l=e.stateNode;if(t=t.childContextTypes,"function"!=typeof l.getChildContext)return r;for(var a in l=l.getChildContext())if(!(a in t))throw Error((We(e)||"Unknown")+'.getChildContext(): key "'+a+'" is not defined in childContextTypes.');return n(i[2])({},r,l)}function bt(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||st,ft=ct.current,ot(ct,e),ot(dt,dt.current),!0}function yt(e,n,t){var r=e.stateNode;if(!r)throw Error("Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.");t?(e=vt(e,n,ft),r.__reactInternalMemoizedMergedChildContext=e,ut(dt),ut(ct),ot(ct,e)):ut(dt),ot(dt,t)}var St=null,kt=!1,wt=!1;function xt(){if(!wt&&null!==St){wt=!0;var e=0,t=En;try{var r=St;for(En=1;eg?(m=h,h=null):m=h.sibling;var v=f(l,h,u[g],o);if(null===v){null===h&&(h=m);break}e&&h&&null===v.alternate&&n(l,h),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v,h=m}if(g===u.length)return t(l,h),s;if(null===h){for(;gg?(m=h,h=null):m=h.sibling;var b=f(l,h,v.value,o);if(null===b){null===h&&(h=m);break}e&&h&&null===b.alternate&&n(l,h),i=a(b,i,g),null===c?s=b:c.sibling=b,c=b,h=m}if(v.done)return t(l,h),s;if(null===h){for(;!v.done;g++,v=u.next())null!==(v=d(l,v.value,o))&&(i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return s}for(h=r(l,h);!v.done;g++,v=u.next())null!==(v=p(h,l,g,v.value,o))&&(e&&null!==v.alternate&&h.delete(null===v.key?g:v.key),i=a(v,i,g),null===c?s=v:c.sibling=v,c=v);return e&&h.forEach(function(e){return n(l,e)}),s}return function(e,r,a,u){var o="object"==typeof a&&null!==a&&a.type===_e&&null===a.key;if(o&&(a=a.props.children),"object"==typeof a&&null!==a){switch(a.$$typeof){case xe:e:{var s=a.key;for(o=r;null!==o;){if(o.key===s){if((s=a.type)===_e){if(7===o.tag){t(e,o.sibling),(r=l(o,a.props.children)).return=e,e=r;break e}}else if(o.elementType===s){t(e,o.sibling),(r=l(o,a.props)).ref=nr(e,o,a),r.return=e,e=r;break e}t(e,o);break}n(e,o),o=o.sibling}a.type===_e?((r=ti(a.props.children,e.mode,u,a.key)).return=e,e=r):((u=ni(a.type,a.key,a.props,null,e.mode,u)).ref=nr(e,r,a),u.return=e,e=u)}return i(e);case Pe:e:{for(o=a.key;null!==r;){if(r.key===o){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){t(e,r.sibling),(r=l(r,a.children||[])).return=e,e=r;break e}t(e,r);break}n(e,r),r=r.sibling}(r=ai(a,e.mode,u)).return=e,e=r}return i(e)}if(m(a))return h(e,r,a,u);if(je(a))return g(e,r,a,u);tr(e,a)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(t(e,r.sibling),(r=l(r,a)).return=e,e=r):(t(e,r),(r=li(a,e.mode,u)).return=e,e=r),i(e);if(void 0===a&&!o)switch(e.tag){case 1:case 0:case 11:case 15:throw Error((We(e)||"Component")+"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.")}return t(e,r)}}var lr=rr(!0),ar=rr(!1),ir={},ur=it(ir),or=it(ir),sr=it(ir);function cr(e){if(e===ir)throw Error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.");return e}function dr(e,n){ot(sr,n),ot(or,e),ot(ur,ir),ut(ur),ot(ur,{isInAParentText:!1})}function fr(){ut(ur),ut(or),ut(sr)}function pr(e){cr(sr.current);var n=cr(ur.current),t=e.type;t="AndroidTextInput"===t||"RCTMultilineTextInputView"===t||"RCTSinglelineTextInputView"===t||"RCTText"===t||"RCTVirtualText"===t,n!==(t=n.isInAParentText!==t?{isInAParentText:t}:n)&&(ot(or,e),ot(ur,t))}function hr(e){or.current===e&&(ut(ur),ut(or))}var gr=it(0);function mr(e){for(var n=e;null!==n;){if(13===n.tag){var t=n.memoizedState;if(null!==t&&(null===t.dehydrated||zn()||zn()))return n}else if(19===n.tag&&void 0!==n.memoizedProps.revealOrder){if(0!=(128&n.flags))return n}else if(null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return null;n=n.return}n.sibling.return=n.return,n=n.sibling}return null}var vr=[];function br(){for(var e=0;ea))throw Error("Too many re-renders. React limits the number of renders to prevent an infinite loop.");a+=1,Pr=xr=null,n.updateQueue=null,yr.current=tl,e=t(r,l)}while(Rr)}if(yr.current=Zr,n=null!==xr&&null!==xr.next,kr=0,Pr=xr=wr=null,_r=!1,n)throw Error("Rendered fewer hooks than expected. This may be caused by an accidental early return statement.");return e}function Cr(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===Pr?wr.memoizedState=Pr=e:Pr=Pr.next=e,Pr}function zr(){if(null===xr){var e=wr.alternate;e=null!==e?e.memoizedState:null}else e=xr.next;var n=null===Pr?wr.memoizedState:Pr.next;if(null!==n)Pr=n,xr=e;else{if(null===e)throw Error("Rendered more hooks than during the previous render.");e={memoizedState:(xr=e).memoizedState,baseState:xr.baseState,baseQueue:xr.baseQueue,queue:xr.queue,next:null},null===Pr?wr.memoizedState=Pr=e:Pr=Pr.next=e}return Pr}function Ir(e,n){return"function"==typeof n?n(e):n}function Lr(e){var n=zr(),t=n.queue;if(null===t)throw Error("Should have a queue. This is likely a bug in React. Please file an issue.");t.lastRenderedReducer=e;var r=xr,l=r.baseQueue,a=t.pending;if(null!==a){if(null!==l){var i=l.next;l.next=a.next,a.next=i}r.baseQueue=l=a,t.pending=null}if(null!==l){a=l.next,r=r.baseState;var u=i=null,o=null,s=a;do{var c=s.lane;if((kr&c)===c)null!==o&&(o=o.next={lane:0,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null}),r=s.eagerReducer===e?s.eagerState:e(r,s.action);else{var d={lane:c,action:s.action,eagerReducer:s.eagerReducer,eagerState:s.eagerState,next:null};null===o?(u=o=d,i=r):o=o.next=d,wr.lanes|=c,da|=c}s=s.next}while(null!==s&&s!==a);null===o?i=r:o.next=u,_t(r,n.memoizedState)||(sl=!0),n.memoizedState=r,n.baseState=i,n.baseQueue=o,t.lastRenderedState=r}if(null!==(e=t.interleaved)){l=e;do{a=l.lane,wr.lanes|=a,da|=a,l=l.next}while(l!==e)}else null===l&&(t.lanes=0);return[n.memoizedState,t.dispatch]}function Ur(e){var n=zr(),t=n.queue;if(null===t)throw Error("Should have a queue. This is likely a bug in React. Please file an issue.");t.lastRenderedReducer=e;var r=t.dispatch,l=t.pending,a=n.memoizedState;if(null!==l){t.pending=null;var i=l=l.next;do{a=e(a,i.action),i=i.next}while(i!==l);_t(a,n.memoizedState)||(sl=!0),n.memoizedState=a,null===n.baseQueue&&(n.baseState=a),t.lastRenderedState=a}return[a,r]}function Mr(e,n,t){var r=n._getVersion;r=r(n._source);var l=n._workInProgressVersionSecondary;if(null!==l?e=l===r:(e=e.mutableReadLanes,(e=(kr&e)===e)&&(n._workInProgressVersionSecondary=r,vr.push(n))),e)return t(n._source);throw vr.push(n),Error("Cannot read from mutable source during the current render without tearing. This may be a bug in React. Please file an issue.")}function Fr(e,n,t,r){var l=la;if(null===l)throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue.");var a=n._getVersion,i=a(n._source),u=yr.current,o=u.useState(function(){return Mr(l,n,t)}),s=o[1],c=o[0];o=Pr;var d=e.memoizedState,f=d.refs,p=f.getSnapshot,h=d.source;d=d.subscribe;var g=wr;return e.memoizedState={refs:f,source:n,subscribe:r},u.useEffect(function(){f.getSnapshot=t,f.setSnapshot=s;var e=a(n._source);_t(i,e)||(e=t(n._source),_t(c,e)||(s(e),e=Ta(g),l.mutableReadLanes|=e&l.pendingLanes),Pn(l,l.mutableReadLanes))},[t,n,r]),u.useEffect(function(){return r(n._source,function(){var e=f.getSnapshot,t=f.setSnapshot;try{t(e(n._source));var r=Ta(g);l.mutableReadLanes|=r&l.pendingLanes}catch(e){t(function(){throw e})}})},[n,r]),_t(p,t)&&_t(h,n)&&_t(d,r)||((e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ir,lastRenderedState:c}).dispatch=s=Kr.bind(null,wr,e),o.queue=e,o.baseQueue=null,c=Mr(l,n,t),o.memoizedState=o.baseState=c),c}function Dr(e,n,t){return Fr(zr(),e,n,t)}function Ar(e){var n=Cr();return"function"==typeof e&&(e=e()),n.memoizedState=n.baseState=e,e=(e=n.queue={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ir,lastRenderedState:e}).dispatch=Kr.bind(null,wr,e),[n.memoizedState,e]}function Hr(e,n,t,r){return e={tag:e,create:n,destroy:t,deps:r,next:null},null===(n=wr.updateQueue)?(n={lastEffect:null},wr.updateQueue=n,n.lastEffect=e.next=e):null===(t=n.lastEffect)?n.lastEffect=e.next=e:(r=t.next,t.next=e,e.next=r,n.lastEffect=e),e}function Qr(){return zr().memoizedState}function jr(e,n,t,r){var l=Cr();wr.flags|=e,l.memoizedState=Hr(1|n,t,void 0,void 0===r?null:r)}function Br(e,n,t,r){var l=zr();r=void 0===r?null:r;var a=void 0;if(null!==xr){var i=xr.memoizedState;if(a=i.destroy,null!==r&&Er(r,i.deps))return void(l.memoizedState=Hr(n,t,a,r))}wr.flags|=e,l.memoizedState=Hr(1|n,t,a,r)}function Wr(e,n){return jr(1049600,4,e,n)}function Or(e,n){return Br(1024,4,e,n)}function Vr(e,n){return Br(4,2,e,n)}function Yr(e,n){return"function"==typeof n?(e=e(),n(e),function(){n(null)}):null!==n&&void 0!==n?(e=e(),n.current=e,function(){n.current=null}):void 0}function qr(e,n,t){return t=null!==t&&void 0!==t?t.concat([e]):null,Br(4,2,Yr.bind(null,n,e),t)}function Xr(){}function $r(e,n){var t=zr();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&Er(n,r[1])?r[0]:(t.memoizedState=[e,n],e)}function Gr(e,n){var t=zr();n=void 0===n?null:n;var r=t.memoizedState;return null!==r&&null!==n&&Er(n,r[1])?r[0]:(e=e(),t.memoizedState=[e,n],e)}function Jr(e,n){var t=En;En=0!==t&&4>t?t:4,e(!0);var r=Sr.transition;Sr.transition=1;try{e(!1),n()}finally{En=t,Sr.transition=r}}function Kr(e,n,t){var r=Ra(),l=Ta(e),a={lane:l,action:t,eagerReducer:null,eagerState:null,next:null},i=e.alternate;if(e===wr||null!==i&&i===wr)Rr=_r=!0,null===(l=n.pending)?a.next=a:(a.next=l.next,l.next=a),n.pending=a;else{if(null!==la&&0!=(1&e.mode)&&0==(8&ra)){var u=n.interleaved;null===u?(a.next=a,null===At?At=[n]:At.push(n)):(a.next=u.next,u.next=a),n.interleaved=a}else null===(u=n.pending)?a.next=a:(a.next=u.next,u.next=a),n.pending=a;if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=n.lastRenderedReducer))try{var o=n.lastRenderedState,s=i(o,t);if(a.eagerReducer=i,a.eagerState=s,_t(s,o))return}catch(e){}a=Ea(e,l,r),0!=(4194240&l)&&null!==a&&(e=n.lanes,l|=e&=a.pendingLanes,n.lanes=l,Pn(a,l))}}var Zr={readContext:Dt,useCallback:Tr,useContext:Tr,useEffect:Tr,useImperativeHandle:Tr,useLayoutEffect:Tr,useMemo:Tr,useReducer:Tr,useRef:Tr,useState:Tr,useDebugValue:Tr,useDeferredValue:Tr,useTransition:Tr,useMutableSource:Tr,useOpaqueIdentifier:Tr,unstable_isNewReconciler:!1},el={readContext:Dt,useCallback:function(e,n){return Cr().memoizedState=[e,void 0===n?null:n],e},useContext:Dt,useEffect:Wr,useImperativeHandle:function(e,n,t){return t=null!==t&&void 0!==t?t.concat([e]):null,jr(4,2,Yr.bind(null,n,e),t)},useLayoutEffect:function(e,n){return jr(4,2,e,n)},useMemo:function(e,n){var t=Cr();return n=void 0===n?null:n,e=e(),t.memoizedState=[e,n],e},useReducer:function(e,n,t){var r=Cr();return n=void 0!==t?t(n):n,r.memoizedState=r.baseState=n,e=(e=r.queue={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:n}).dispatch=Kr.bind(null,wr,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Cr().memoizedState=e},useState:Ar,useDebugValue:Xr,useDeferredValue:function(e){var n=Ar(e),t=n[0],r=n[1];return Wr(function(){var n=Sr.transition;Sr.transition=1;try{r(e)}finally{Sr.transition=n}},[e]),t},useTransition:function(){var e=Ar(!1),n=e[0];return e=Jr.bind(null,e[1]),Cr().memoizedState=e,[n,e]},useMutableSource:function(e,n,t){var r=Cr();return r.memoizedState={refs:{getSnapshot:n,setSnapshot:null},source:e,subscribe:t},Fr(r,e,n,t)},useOpaqueIdentifier:function(){throw Error("Not yet implemented")},unstable_isNewReconciler:!1},nl={readContext:Dt,useCallback:$r,useContext:Dt,useEffect:Or,useImperativeHandle:qr,useLayoutEffect:Vr,useMemo:Gr,useReducer:Lr,useRef:Qr,useState:function(){return Lr(Ir)},useDebugValue:Xr,useDeferredValue:function(e){var n=Lr(Ir),t=n[0],r=n[1];return Or(function(){var n=Sr.transition;Sr.transition=1;try{r(e)}finally{Sr.transition=n}},[e]),t},useTransition:function(){return[Lr(Ir)[0],zr().memoizedState]},useMutableSource:Dr,useOpaqueIdentifier:function(){return Lr(Ir)[0]},unstable_isNewReconciler:!1},tl={readContext:Dt,useCallback:$r,useContext:Dt,useEffect:Or,useImperativeHandle:qr,useLayoutEffect:Vr,useMemo:Gr,useReducer:Ur,useRef:Qr,useState:function(){return Ur(Ir)},useDebugValue:Xr,useDeferredValue:function(e){var n=Ur(Ir),t=n[0],r=n[1];return Or(function(){var n=Sr.transition;Sr.transition=1;try{r(e)}finally{Sr.transition=n}},[e]),t},useTransition:function(){return[Ur(Ir)[0],zr().memoizedState]},useMutableSource:Dr,useOpaqueIdentifier:function(){return Ur(Ir)[0]},unstable_isNewReconciler:!1};function rl(e,n){try{var t="",r=n;do{t+=Tt(r),r=r.return}while(r);var l=t}catch(e){l="\nError generating stack: "+e.message+"\n"+e.stack}return{value:e,source:n,stack:l}}if("function"!=typeof n(i[3]).ReactFiberErrorDialog.showErrorDialog)throw Error("Expected ReactFiberErrorDialog.showErrorDialog to be a function.");function ll(e,t){try{!1!==n(i[3]).ReactFiberErrorDialog.showErrorDialog({componentStack:null!==t.stack?t.stack:"",error:t.value,errorBoundary:null!==e&&1===e.tag?e.stateNode:null})&&console.error(t.value)}catch(e){setTimeout(function(){throw e})}}var al="function"==typeof WeakMap?WeakMap:Map;function il(e,n,t){(t=Bt(-1,t)).tag=3,t.payload={element:null};var r=n.value;return t.callback=function(){ma||(ma=!0,va=r),ll(e,n)},t}function ul(e,n,t){(t=Bt(-1,t)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var l=n.value;t.payload=function(){return ll(e,n),r(l)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(t.callback=function(){"function"!=typeof r&&(null===ba?ba=new Set([this]):ba.add(this),ll(e,n));var t=n.stack;this.componentDidCatch(n.value,{componentStack:null!==t?t:""})}),t}var ol=we.ReactCurrentOwner,sl=!1;function cl(e,n,t,r){n.child=null===e?ar(n,null,t,r):lr(n,e.child,t,r)}function dl(e,n,t,r,l){t=t.render;var a=n.ref;return Ft(n,l),r=Nr(e,n,t,r,a,l),null===e||sl?(n.flags|=1,cl(e,n,r,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-1029,e.lanes&=~l,Ll(e,n,l))}function fl(e,n,t,r,l,a){if(null===e){var i=t.type;return"function"!=typeof i||Ka(i)||void 0!==i.defaultProps||null!==t.compare||void 0!==t.defaultProps?((e=ni(t.type,null,r,n,n.mode,a)).ref=n.ref,e.return=n,n.child=e):(n.tag=15,n.type=i,pl(e,n,i,r,l,a))}return i=e.child,0==(l&a)&&(l=i.memoizedProps,(t=null!==(t=t.compare)?t:Rt)(l,r)&&e.ref===n.ref)?Ll(e,n,a):(n.flags|=1,(e=ei(i,r)).ref=n.ref,e.return=n,n.child=e)}function pl(e,n,t,r,l,a){if(null!==e&&Rt(e.memoizedProps,r)&&e.ref===n.ref){if(sl=!1,0==(a&l))return n.lanes=e.lanes,Ll(e,n,a);0!=(32768&e.flags)&&(sl=!0)}return ml(e,n,t,r,a)}function hl(e,n,t){var r=n.pendingProps,l=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(1&n.mode))n.memoizedState={baseLanes:0,cachePool:null},ot(oa,ua),ua|=t;else{if(0==(1073741824&t))return e=null!==a?a.baseLanes|t:t,n.lanes=n.childLanes=1073741824,n.memoizedState={baseLanes:e,cachePool:null},n.updateQueue=null,ot(oa,ua),ua|=e,null;n.memoizedState={baseLanes:0,cachePool:null},r=null!==a?a.baseLanes:t,ot(oa,ua),ua|=r}else null!==a?(r=a.baseLanes|t,n.memoizedState=null):r=t,ot(oa,ua),ua|=r;return cl(e,n,l,t),n.child}function gl(e,n){var t=n.ref;(null===e&&null!==t||null!==e&&e.ref!==t)&&(n.flags|=256)}function ml(e,n,t,r,l){var a=ht(t)?ft:ct.current;return a=pt(n,a),Ft(n,l),t=Nr(e,n,t,r,a,l),null===e||sl?(n.flags|=1,cl(e,n,t,l),n.child):(n.updateQueue=e.updateQueue,n.flags&=-1029,e.lanes&=~l,Ll(e,n,l))}function vl(e,n,t,r,l){if(ht(t)){var a=!0;bt(n)}else a=!1;if(Ft(n,l),null===n.stateNode)null!==e&&(e.alternate=null,n.alternate=null,n.flags|=2),Kt(n,t,r),er(n,t,r,l),r=!0;else if(null===e){var i=n.stateNode,u=n.memoizedProps;i.props=u;var o=i.context,s=t.contextType;"object"==typeof s&&null!==s?s=Dt(s):s=pt(n,s=ht(t)?ft:ct.current);var c=t.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==r||o!==s)&&Zt(n,i,r,s),Ht=!1;var f=n.memoizedState;i.state=f,Yt(n,r,i,l),o=n.memoizedState,u!==r||f!==o||dt.current||Ht?("function"==typeof c&&($t(n,t,c,r),o=n.memoizedState),(u=Ht||Jt(n,t,u,r,f,o,s))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(n.flags|=4)):("function"==typeof i.componentDidMount&&(n.flags|=4),n.memoizedProps=r,n.memoizedState=o),i.props=r,i.state=o,i.context=s,r=u):("function"==typeof i.componentDidMount&&(n.flags|=4),r=!1)}else{i=n.stateNode,jt(e,n),u=n.memoizedProps,s=n.type===n.elementType?u:Et(n.type,u),i.props=s,d=n.pendingProps,f=i.context,"object"==typeof(o=t.contextType)&&null!==o?o=Dt(o):o=pt(n,o=ht(t)?ft:ct.current);var p=t.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(u!==d||f!==o)&&Zt(n,i,r,o),Ht=!1,f=n.memoizedState,i.state=f,Yt(n,r,i,l);var h=n.memoizedState;u!==d||f!==h||dt.current||Ht?("function"==typeof p&&($t(n,t,p,r),h=n.memoizedState),(s=Ht||Jt(n,t,s,r,f,h,o)||!1)?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,o),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,o)),"function"==typeof i.componentDidUpdate&&(n.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(n.flags|=512)):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=512),n.memoizedProps=r,n.memoizedState=h),i.props=r,i.state=h,i.context=o,r=s):("function"!=typeof i.componentDidUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||u===e.memoizedProps&&f===e.memoizedState||(n.flags|=512),r=!1)}return bl(e,n,t,r,a,l)}function bl(e,n,t,r,l,a){gl(e,n);var i=0!=(128&n.flags);if(!r&&!i)return l&&yt(n,t,!1),Ll(e,n,a);r=n.stateNode,ol.current=n;var u=i&&"function"!=typeof t.getDerivedStateFromError?null:r.render();return n.flags|=1,null!==e&&i?(n.child=lr(n,e.child,null,a),n.child=lr(n,null,u,a)):cl(e,n,u,a),n.memoizedState=r.state,l&&yt(n,t,!0),n.child}function yl(e){var n=e.stateNode;n.pendingContext?mt(0,n.pendingContext,n.pendingContext!==n.context):n.context&&mt(0,n.context,!1),dr(e,n.containerInfo)}var Sl,kl,wl,xl,Pl={dehydrated:null,retryLane:0};function _l(e){return{baseLanes:e,cachePool:null}}function Rl(e,n,t){var r,l=n.pendingProps,a=gr.current,i=!1;return(r=0!=(128&n.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,n.flags&=-129):null!==e&&null===e.memoizedState||void 0===l.fallback||!0===l.unstable_avoidThisFallback||(a|=1),ot(gr,1&a),null===e?(e=l.children,a=l.fallback,i?(e=Tl(n,e,a,t),n.child.memoizedState=_l(t),n.memoizedState=Pl,e):"number"==typeof l.unstable_expectedLoadTime?(e=Tl(n,e,a,t),n.child.memoizedState=_l(t),n.memoizedState=Pl,n.lanes=4194304,e):((t=ri({mode:"visible",children:e},n.mode,t,null)).return=n,n.child=t)):(e.memoizedState,i?(l=Nl(e,n,l.children,l.fallback,t),i=n.child,a=e.child.memoizedState,i.memoizedState=null===a?_l(t):{baseLanes:a.baseLanes|t,cachePool:null},i.childLanes=e.childLanes&~t,n.memoizedState=Pl,l):(t=El(e,n,l.children,t),n.memoizedState=null,t))}function Tl(e,n,t,r){var l=e.mode,a=e.child;return n={mode:"hidden",children:n},0==(1&l)&&null!==a?(a.childLanes=0,a.pendingProps=n):a=ri(n,l,0,null),t=ti(t,l,r,null),a.return=e,t.return=e,a.sibling=t,e.child=a,t}function El(e,n,t,r){var l=e.child;return e=l.sibling,t=ei(l,{mode:"visible",children:t}),0==(1&n.mode)&&(t.lanes=r),t.return=n,t.sibling=null,null!==e&&(null===(r=n.deletions)?(n.deletions=[e],n.flags|=16):r.push(e)),n.child=t}function Nl(e,n,t,r,l){var a=n.mode,i=(e=e.child).sibling,u={mode:"hidden",children:t};return 0==(1&a)&&n.child!==e?((t=n.child).childLanes=0,t.pendingProps=u,n.deletions=null):(t=ei(e,u)).subtreeFlags=1835008&e.subtreeFlags,null!==i?r=ei(i,r):(r=ti(r,a,l,null)).flags|=2,r.return=n,t.return=n,t.sibling=r,n.child=t,r}function Cl(e,n){e.lanes|=n;var t=e.alternate;null!==t&&(t.lanes|=n),Mt(e.return,n)}function zl(e,n,t,r,l){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:n,rendering:null,renderingStartTime:0,last:r,tail:t,tailMode:l}:(a.isBackwards=n,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=t,a.tailMode=l)}function Il(e,n,t){var r=n.pendingProps,l=r.revealOrder,a=r.tail;if(cl(e,n,r.children,t),0!=(2&(r=gr.current)))r=1&r|2,n.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=n.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Cl(e,t);else if(19===e.tag)Cl(e,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===n)break e;for(;null===e.sibling;){if(null===e.return||e.return===n)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(ot(gr,r),0==(1&n.mode))n.memoizedState=null;else switch(l){case"forwards":for(t=n.child,l=null;null!==t;)null!==(e=t.alternate)&&null===mr(e)&&(l=t),t=t.sibling;null===(t=l)?(l=n.child,n.child=null):(l=t.sibling,t.sibling=null),zl(n,!1,l,t,a);break;case"backwards":for(t=null,l=n.child,n.child=null;null!==l;){if(null!==(e=l.alternate)&&null===mr(e)){n.child=l;break}e=l.sibling,l.sibling=t,t=l,l=e}zl(n,!0,t,null,a);break;case"together":zl(n,!1,null,null,void 0);break;default:n.memoizedState=null}return n.child}function Ll(e,n,t){if(null!==e&&(n.dependencies=e.dependencies),da|=n.lanes,0==(t&n.childLanes))return null;if(null!==e&&n.child!==e.child)throw Error("Resuming work not yet implemented.");if(null!==n.child){for(t=ei(e=n.child,e.pendingProps),n.child=t,t.return=n;null!==e.sibling;)e=e.sibling,(t=t.sibling=ei(e,e.pendingProps)).return=n;t.sibling=null}return n.child}function Ul(e,n){if(null!==e&&e.child===n.child)return!0;if(0!=(16&n.flags))return!1;for(e=n.child;null!==e;){if(0!=(6454&e.flags)||0!=(6454&e.subtreeFlags))return!1;e=e.sibling}return!0}function Ml(e,n,t,r){for(var l=n.child;null!==l;){if(5===l.tag){var a=l.stateNode;t&&r&&(a=et(a)),Qn(e,a.node)}else if(6===l.tag){if(a=l.stateNode,t&&r)throw Error("Not yet implemented.");Qn(e,a.node)}else if(4!==l.tag){if(13===l.tag&&0!=(4&l.flags)&&(a=null!==l.memoizedState)){var i=l.child;if(null!==i&&(null!==i.child&&(i.child.return=i,Ml(e,i,!0,a)),null!==(a=i.sibling))){a.return=l,l=a;continue}}if(null!==l.child){l.child.return=l,l=l.child;continue}}if(l===n)break;for(;null===l.sibling;){if(null===l.return||l.return===n)return;l=l.return}l.sibling.return=l.return,l=l.sibling}}function Fl(e,n){switch(e.tailMode){case"hidden":n=e.tail;for(var t=null;null!==n;)null!==n.alternate&&(t=n),n=n.sibling;null===t?e.tail=null:t.sibling=null;break;case"collapsed":t=e.tail;for(var r=null;null!==t;)null!==t.alternate&&(r=t),t=t.sibling;null===r?n||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Dl(e){var n=null!==e.alternate&&e.alternate.child===e.child,t=0,r=0;if(n)for(var l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=1835008&l.subtreeFlags,r|=1835008&l.flags,l.return=e,l=l.sibling;else for(l=e.child;null!==l;)t|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=t,n}function Al(e,t,r){var l=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Dl(t),null;case 1:return ht(t.type)&>(),Dl(t),null;case 3:return l=t.stateNode,fr(),ut(dt),ut(ct),br(),l.pendingContext&&(l.context=l.pendingContext,l.pendingContext=null),null!==e&&null!==e.child||l.hydrate||(t.flags|=512),kl(e,t),Dl(t),null;case 5:hr(t),r=cr(sr.current);var a=t.type;if(null!==e&&null!=t.stateNode)wl(e,t,a,l,r),e.ref!==t.ref&&(t.flags|=256);else{if(!l){if(null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");return Dl(t),null}cr(ur.current),e=$n,$n+=2,a=Xn(a);var u=an(null,Ge,l,a.validAttributes);r=Ln(e,a.uiViewClassName,r,u,t),e=new Gn(e,a,l,t),Sl(e={node:r,canonical:e},t,!1,!1),t.stateNode=e,null!==t.ref&&(t.flags|=256)}return Dl(t),null;case 6:if(e&&null!=t.stateNode)xl(e,t,e.memoizedProps,l);else{if("string"!=typeof l&&null===t.stateNode)throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.");e=cr(sr.current),r=cr(ur.current),t.stateNode=Jn(l,e,r,t)}return Dl(t),null;case 13:return ut(gr),l=t.memoizedState,0!=(128&t.flags)?(t.lanes=r,t):(l=null!==l,r=!1,null!==e&&(r=null!==e.memoizedState),l&&!r&&0!=(1&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&gr.current)?0===sa&&(sa=3):(0!==sa&&3!==sa||(sa=4),null===la||0==(268435455&da)&&0==(268435455&fa)||Ia(la,ia))),l&&(t.flags|=4),Dl(t),null);case 4:return fr(),kl(e,t),Dl(t),null;case 10:return Ut(t.type._context),Dl(t),null;case 17:return ht(t.type)&>(),Dl(t),null;case 19:if(ut(gr),null===(a=t.memoizedState))return Dl(t),null;if(l=0!=(128&t.flags),null===(u=a.rendering))if(l)Fl(a,!1);else{if(0!==sa||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(u=mr(e))){for(t.flags|=128,Fl(a,!1),null!==(e=u.updateQueue)&&(t.updateQueue=e,t.flags|=4),t.subtreeFlags=0,e=r,l=t.child;null!==l;)a=e,(r=l).flags&=1835010,null===(u=r.alternate)?(r.childLanes=0,r.lanes=a,r.child=null,r.subtreeFlags=0,r.memoizedProps=null,r.memoizedState=null,r.updateQueue=null,r.dependencies=null,r.stateNode=null):(r.childLanes=u.childLanes,r.lanes=u.lanes,r.child=u.child,r.subtreeFlags=0,r.deletions=null,r.memoizedProps=u.memoizedProps,r.memoizedState=u.memoizedState,r.updateQueue=u.updateQueue,r.type=u.type,a=u.dependencies,r.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),l=l.sibling;return ot(gr,1&gr.current|2),t.child}e=e.sibling}null!==a.tail&&n(i[4]).unstable_now()>ga&&(t.flags|=128,l=!0,Fl(a,!1),t.lanes=4194304)}else{if(!l)if(null!==(e=mr(u))){if(t.flags|=128,l=!0,null!==(e=e.updateQueue)&&(t.updateQueue=e,t.flags|=4),Fl(a,!0),null===a.tail&&"hidden"===a.tailMode&&!u.alternate)return Dl(t),null}else 2*n(i[4]).unstable_now()-a.renderingStartTime>ga&&1073741824!==r&&(t.flags|=128,l=!0,Fl(a,!1),t.lanes=4194304);a.isBackwards?(u.sibling=t.child,t.child=u):(null!==(e=a.last)?e.sibling=u:t.child=u,a.last=u)}return null!==a.tail?(t=a.tail,a.rendering=t,a.tail=t.sibling,a.renderingStartTime=n(i[4]).unstable_now(),t.sibling=null,e=gr.current,ot(gr,l?1&e|2:1&e),t):(Dl(t),null);case 22:case 23:return Ua(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&"unstable-defer-without-hiding"!==l.mode&&(t.flags|=4),r&&0==(1073741824&ua)&&0!=(1&t.mode)||Dl(t),null}throw Error("Unknown unit of work tag ("+t.tag+"). This error is likely caused by a bug in React. Please file an issue.")}function Hl(e){switch(e.tag){case 1:ht(e.type)&>();var n=e.flags;return 16384&n?(e.flags=-16385&n|128,e):null;case 3:if(fr(),ut(dt),ut(ct),br(),0!=(128&(n=e.flags)))throw Error("The root failed to unmount after an error. This is likely a bug in React. Please file an issue.");return e.flags=-16385&n|128,e;case 5:return hr(e),null;case 13:return ut(gr),16384&(n=e.flags)?(e.flags=-16385&n|128,e):null;case 19:return ut(gr),null;case 4:return fr(),null;case 10:return Ut(e.type._context),null;case 22:case 23:return Ua(),null;case 24:default:return null}}Sl=function(e,n,t,r){for(var l=n.child;null!==l;){if(5===l.tag){var a=l.stateNode;t&&r&&(a=et(a)),Hn(e.node,a.node)}else if(6===l.tag){if(a=l.stateNode,t&&r)throw Error("Not yet implemented.");Hn(e.node,a.node)}else if(4!==l.tag){if(13===l.tag&&0!=(4&l.flags)&&(a=null!==l.memoizedState)){var i=l.child;if(null!==i&&(null!==i.child&&(i.child.return=i,Sl(e,i,!0,a)),null!==(a=i.sibling))){a.return=l,l=a;continue}}if(null!==l.child){l.child.return=l,l=l.child;continue}}if(l===n)break;for(;null===l.sibling;){if(null===l.return||l.return===n)return;l=l.return}l.sibling.return=l.return,l=l.sibling}},kl=function(e,n){var t=n.stateNode;if(!Ul(e,n)){e=t.containerInfo;var r=An(e);Ml(r,n,!1,!1),t.pendingChildren=r,n.flags|=4,jn(e,r)}},wl=function(e,n,t,r){t=e.stateNode;var l=e.memoizedProps;if((e=Ul(e,n))&&l===r)n.stateNode=t;else{var a=n.stateNode;cr(ur.current);var i=null;l!==r&&(l=an(null,l,r,a.canonical.viewConfig.validAttributes),a.canonical.currentProps=r,i=l),e&&null===i?n.stateNode=t:(r=i,l=t.node,t={node:e?null!==r?Dn(l,r):Un(l):null!==r?Fn(l,r):Mn(l),canonical:t.canonical},n.stateNode=t,e?n.flags|=4:Sl(t,n,!1,!1))}},xl=function(e,n,t,r){t!==r?(e=cr(sr.current),t=cr(ur.current),n.stateNode=Jn(r,e,t,n),n.flags|=4):n.stateNode=e.stateNode};var Ql="function"==typeof WeakSet?WeakSet:Set,jl=null;function Bl(e,n){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(t){qa(e,n,t)}else t.current=null}var Wl=!1;function Ol(e,n){for(jl=n;null!==jl;)if(n=(e=jl).child,0!=(516&e.subtreeFlags)&&null!==n)n.return=e,jl=n;else for(;null!==jl;){e=jl;try{var t=e.alternate;if(0!=(512&e.flags))switch(e.tag){case 0:case 11:case 15:break;case 1:if(null!==t){var r=t.memoizedProps,l=t.memoizedState,a=e.stateNode,i=a.getSnapshotBeforeUpdate(e.elementType===e.type?r:Et(e.type,r),l);a.__reactInternalSnapshotBeforeUpdate=i}break;case 3:break;case 5:case 6:case 4:case 17:break;default:throw 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.")}}catch(n){qa(e,e.return,n)}if(null!==(n=e.sibling)){n.return=e.return,jl=n;break}jl=e.return}return t=Wl,Wl=!1,t}function Vl(e,n,t){var r=n.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var l=r=r.next;do{if((l.tag&e)===e){var a=l.destroy;if(l.destroy=void 0,void 0!==a){var i=n,u=t;try{a()}catch(e){qa(i,u,e)}}}l=l.next}while(l!==r)}}function Yl(e,n){if(null!==(n=null!==(n=n.updateQueue)?n.lastEffect:null)){var t=n=n.next;do{if((t.tag&e)===e){var r=t.create;t.destroy=r()}t=t.next}while(t!==n)}}function ql(e){var n=e.alternate;null!==n&&(e.alternate=null,ql(n)),e.child=null,e.deletions=null,e.sibling=null,e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function Xl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:return void Vl(3,t,t.return);case 12:return;case 13:return null!==t.memoizedState&&(ha=n(i[4]).unstable_now()),void $l(t);case 19:return void $l(t);case 22:case 23:return}e:{switch(t.tag){case 1:case 5:case 6:break e;case 3:case 4:break e}throw 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.")}}function $l(e){var n=e.updateQueue;if(null!==n){e.updateQueue=null;var t=e.stateNode;null===t&&(t=e.stateNode=new Ql),n.forEach(function(n){var r=$a.bind(null,e,n);t.has(n)||(t.add(n),n.then(r,r))})}}function Gl(e,n){for(jl=n;null!==jl;){if(null!==(n=(e=jl).deletions))for(var t=0;ta&&(a=o),l&=~u}if(l=a,10<(l=(120>(l=n(i[4]).unstable_now()-l)?120:480>l?480:1080>l?1080:1920>l?1920:3e3>l?3e3:4320>l?4320:1960*Zl(l/1960))-l)){e.timeoutHandle=Kn(Wa.bind(null,e),l);break}Wa(e);break;case 5:Wa(e);break;default:throw Error("Unknown root exit status.")}}return Ca(e,n(i[4]).unstable_now()),e.callbackNode===r?za.bind(null,e):null}function Ia(e,n){for(n&=~pa,n&=~fa,e.suspendedLanes|=n,e.pingedLanes&=~n,e=e.expirationTimes;0 component higher in the tree to provide a loading indicator or placeholder to display.")}5!==sa&&(sa=2),o=rl(o,u),p=i;do{switch(p.tag){case 3:a=o,p.flags|=16384,n&=-n,p.lanes|=n,Vt(p,il(p,a,n));break e;case 1:a=o;var w=p.type,x=p.stateNode;if(0==(128&p.flags)&&("function"==typeof w.getDerivedStateFromError||null!==x&&"function"==typeof x.componentDidCatch&&(null===ba||!ba.has(x)))){p.flags|=16384,n&=-n,p.lanes|=n,Vt(p,ul(p,a,n));break e}}p=p.return}while(null!==p)}Ba(t)}catch(e){n=e,aa===t&&null!==t&&(aa=t=t.return);continue}break}}function Da(){var e=ea.current;return ea.current=Zr,null===e?Zr:e}function Aa(e,n){var t=ra;ra|=8;var r=Da();for(la===e&&ia===n||Ma(e,n);;)try{Ha();break}catch(n){Fa(e,n)}if(Lt(),ra=t,ea.current=r,null!==aa)throw Error("Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.");return la=null,ia=0,sa}function Ha(){for(;null!==aa;)ja(aa)}function Qa(){for(;null!==aa&&!n(i[4]).unstable_shouldYield();)ja(aa)}function ja(e){var n=Kl(e.alternate,e,ua);e.memoizedProps=e.pendingProps,null===n?Ba(e):aa=n,na.current=null}function Ba(e){var n=e;do{var t=n.alternate;if(e=n.return,0==(8192&n.flags)){if(null!==(t=Al(t,n,ua)))return void(aa=t)}else{if(null!==(t=Hl(n)))return t.flags&=8191,void(aa=t);null!==e&&(e.flags|=8192,e.subtreeFlags=0,e.deletions=null)}if(null!==(n=n.sibling))return void(aa=n);aa=n=e}while(null!==n);0===sa&&(sa=5)}function Wa(e){var n=En,t=ta.transition;try{ta.transition=0,En=1,Oa(e,n)}finally{ta.transition=t,En=n}return null}function Oa(e,t){do{Va()}while(null!==Sa);if(0!=(24&ra))throw Error("Should not already be working.");var r=e.finishedWork,l=e.finishedLanes;if(null===r)return null;if(e.finishedWork=null,e.finishedLanes=0,r===e.current)throw Error("Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.");e.callbackNode=null,e.callbackPriority=0;var a=r.lanes|r.childLanes;if(xn(e,a),e===la&&(aa=la=null,ia=0),0==(1040&r.subtreeFlags)&&0==(1040&r.flags)||ya||(ya=!0,n(i[4]).unstable_scheduleCallback(n(i[4]).unstable_NormalPriority,function(){return Va(),null})),a=0!=(8054&r.flags),0!=(8054&r.subtreeFlags)||a){a=ta.transition,ta.transition=0;var u=En;En=1;var o=ra;ra|=16,na.current=null,Ol(e,r),Gl(e,r),e.current=r,Jl(r),n(i[4]).unstable_requestPaint(),ra=o,En=u,ta.transition=a}else e.current=r;if(ya&&(ya=!1,Sa=e,ka=l),0===(a=e.pendingLanes)&&(ba=null),0!=(1&a)?e===xa?wa++:(wa=0,xa=e):wa=0,hn(r.stateNode),Ca(e,n(i[4]).unstable_now()),ma)throw ma=!1,e=va,va=null,e;return 0!=(4&ra)?null:(0!=(1&ka)&&0!==e.tag&&Va(),xt(),null)}function Va(){if(null!==Sa){var e=Nn(ka),n=ta.transition,t=En;try{if(ta.transition=0,En=16>e?16:e,null===Sa)var r=!1;else{if(e=Sa,Sa=null,ka=0,0!=(24&ra))throw Error("Cannot flush passive effects while already rendering.");var l=ra;for(ra|=16,jl=e.current;null!==jl;){var a=jl,i=a.child;if(0!=(16&jl.flags)){var u=a.deletions;if(null!==u){for(var o=0;on(i[4]).unstable_now()-ha?Ma(e,0):pa|=r),Ca(e,t)}function $a(e,n){var t=e.stateNode;null!==t&&t.delete(n),0===(n=0)&&(0==(1&e.mode)?n=1:(n=mn,0==(130023424&(mn<<=1))&&(mn=4194304))),t=Ra(),null!==(e=Na(e,n))&&(wn(e,n,t),Ca(e,t))}function Ga(e,n,t,r){this.tag=e,this.key=t,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ja(e,n,t,r){return new Ga(e,n,t,r)}function Ka(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Za(e){if("function"==typeof e)return Ka(e)?1:0;if(void 0!==e&&null!==e){if((e=e.$$typeof)===Ce)return 11;if(e===Le)return 14}return 2}function ei(e,n){var t=e.alternate;return null===t?((t=Ja(e.tag,n,e.key,e.mode)).elementType=e.elementType,t.type=e.type,t.stateNode=e.stateNode,t.alternate=e,e.alternate=t):(t.pendingProps=n,t.type=e.type,t.flags=0,t.subtreeFlags=0,t.deletions=null),t.flags=1835008&e.flags,t.childLanes=e.childLanes,t.lanes=e.lanes,t.child=e.child,t.memoizedProps=e.memoizedProps,t.memoizedState=e.memoizedState,t.updateQueue=e.updateQueue,n=e.dependencies,t.dependencies=null===n?null:{lanes:n.lanes,firstContext:n.firstContext},t.sibling=e.sibling,t.index=e.index,t.ref=e.ref,t}function ni(e,n,t,r,l,a){var i=2;if(r=e,"function"==typeof e)Ka(e)&&(i=1);else if("string"==typeof e)i=5;else e:switch(e){case _e:return ti(t.children,l,a,n);case Me:i=8,l|=4;break;case Re:i=8,l|=8;break;case Te:return(e=Ja(12,t,n,2|l)).elementType=Te,e.lanes=a,e;case ze:return(e=Ja(13,t,n,l)).elementType=ze,e.lanes=a,e;case Ie:return(e=Ja(19,t,n,l)).elementType=Ie,e.lanes=a,e;case Fe:return ri(t,l,a,n);case De:return(e=Ja(23,t,n,l)).elementType=De,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case Ee:i=10;break e;case Ne:i=9;break e;case Ce:i=11;break e;case Le:i=14;break e;case Ue:i=16,r=null;break e}throw Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: "+(null==e?e:typeof e)+".")}return(n=Ja(i,t,n,l)).elementType=e,n.type=r,n.lanes=a,n}function ti(e,n,t,r){return(e=Ja(7,e,r,n)).lanes=t,e}function ri(e,n,t,r){return(e=Ja(22,e,r,n)).elementType=Fe,e.lanes=t,e}function li(e,n,t){return(e=Ja(6,e,null,n)).lanes=t,e}function ai(e,n,t){return(n=Ja(4,null!==e.children?e.children:[],e.key,n)).lanes=t,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function ii(e,n,t){this.tag=n,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=t,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=kn(0),this.expirationTimes=kn(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=kn(0)}function ui(e,n,t){var r=3=t.length?{done:!0}:{done:!1,value:t[o++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function f(t,n){if(t){if("string"==typeof t)return s(t,n);var u=Object.prototype.toString.call(t).slice(8,-1);return"Object"===u&&t.constructor&&(u=t.constructor.name),"Map"===u||"Set"===u?Array.from(t):"Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u)?s(t,n):void 0}}function s(t,n){(null==n||n>t.length)&&(n=t.length);for(var u=0,o=new Array(n);ui&&(f+=u&&o?h.currentPageX:u&&!o?h.currentPageY:!u&&o?h.previousPageX:h.previousPageY,s=1);else for(var v=0;v=i){f+=u&&o?C.currentPageX:u&&!o?C.currentPageY:!u&&o?C.previousPageX:C.previousPageY,s++}}return s>0?f/s:n.noCentroid},currentCentroidXOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!0,!0)},currentCentroidYOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!1,!0)},previousCentroidXOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!0,!1)},previousCentroidYOfTouchesChangedAfter:function(t,i){return n.centroidDimension(t,i,!1,!1)},currentCentroidX:function(t){return n.centroidDimension(t,0,!0,!0)},currentCentroidY:function(t){return n.centroidDimension(t,0,!1,!0)},noCentroid:-1};m.exports=n},781,[]); +__d(function(g,r,i,a,m,e,d){var n=r(d[0])(r(d[1])),s=r(d[0])(r(d[2])),o=r(d[0])(r(d[3])),t=r(d[0])(r(d[4])),E=r(d[0])(r(d[5])),A=r(d[0])(r(d[6])),_=r(d[0])(r(d[7])),u=Object.freeze({GRANTED:'granted',DENIED:'denied',NEVER_ASK_AGAIN:'never_ask_again'}),S=Object.freeze({READ_CALENDAR:'android.permission.READ_CALENDAR',WRITE_CALENDAR:'android.permission.WRITE_CALENDAR',CAMERA:'android.permission.CAMERA',READ_CONTACTS:'android.permission.READ_CONTACTS',WRITE_CONTACTS:'android.permission.WRITE_CONTACTS',GET_ACCOUNTS:'android.permission.GET_ACCOUNTS',ACCESS_FINE_LOCATION:'android.permission.ACCESS_FINE_LOCATION',ACCESS_COARSE_LOCATION:'android.permission.ACCESS_COARSE_LOCATION',ACCESS_BACKGROUND_LOCATION:'android.permission.ACCESS_BACKGROUND_LOCATION',RECORD_AUDIO:'android.permission.RECORD_AUDIO',READ_PHONE_STATE:'android.permission.READ_PHONE_STATE',CALL_PHONE:'android.permission.CALL_PHONE',READ_CALL_LOG:'android.permission.READ_CALL_LOG',WRITE_CALL_LOG:'android.permission.WRITE_CALL_LOG',ADD_VOICEMAIL:'com.android.voicemail.permission.ADD_VOICEMAIL',USE_SIP:'android.permission.USE_SIP',PROCESS_OUTGOING_CALLS:'android.permission.PROCESS_OUTGOING_CALLS',BODY_SENSORS:'android.permission.BODY_SENSORS',SEND_SMS:'android.permission.SEND_SMS',RECEIVE_SMS:'android.permission.RECEIVE_SMS',READ_SMS:'android.permission.READ_SMS',RECEIVE_WAP_PUSH:'android.permission.RECEIVE_WAP_PUSH',RECEIVE_MMS:'android.permission.RECEIVE_MMS',READ_EXTERNAL_STORAGE:'android.permission.READ_EXTERNAL_STORAGE',WRITE_EXTERNAL_STORAGE:'android.permission.WRITE_EXTERNAL_STORAGE',BLUETOOTH_CONNECT:'android.permission.BLUETOOTH_CONNECT',BLUETOOTH_SCAN:'android.permission.BLUETOOTH_SCAN',BLUETOOTH_ADVERTISE:'android.permission.BLUETOOTH_ADVERTISE'}),O=new((function(){function O(){(0,o.default)(this,O),this.PERMISSIONS=S,this.RESULTS=u}return(0,t.default)(O,[{key:"checkPermission",value:function(n){return console.warn('"PermissionsAndroid.checkPermission" is deprecated. Use "PermissionsAndroid.check" instead'),(0,_.default)(A.default,'PermissionsAndroid is not installed correctly.'),A.default.checkPermission(n)}},{key:"check",value:function(n){return(0,_.default)(A.default,'PermissionsAndroid is not installed correctly.'),A.default.checkPermission(n)}},{key:"requestPermission",value:function(s,o){var t;return n.default.async(function(E){for(;;)switch(E.prev=E.next){case 0:console.warn('"PermissionsAndroid.requestPermission" is deprecated. Use "PermissionsAndroid.request" instead'),E.next=4;break;case 4:return E.next=6,n.default.awrap(this.request(s,o));case 6:return t=E.sent,E.abrupt("return",t===this.RESULTS.GRANTED);case 8:case"end":return E.stop()}},null,this,null,Promise)}},{key:"request",value:function(o,t){return n.default.async(function(u){for(;;)switch(u.prev=u.next){case 0:u.next=3;break;case 3:if((0,_.default)(A.default,'PermissionsAndroid is not installed correctly.'),!t){u.next=10;break}return u.next=7,n.default.awrap(A.default.shouldShowRequestPermissionRationale(o));case 7:if(!u.sent||!E.default){u.next=10;break}return u.abrupt("return",new Promise(function(n,_){var u=(0,s.default)({},t);E.default.showAlert(u,function(){return _(new Error('Error showing rationale'))},function(){return n(A.default.requestPermission(o))})}));case 10:return u.abrupt("return",A.default.requestPermission(o));case 11:case"end":return u.stop()}},null,this,null,Promise)}},{key:"requestMultiple",value:function(n){return(0,_.default)(A.default,'PermissionsAndroid is not installed correctly.'),A.default.requestMultiplePermissions(n)}}]),O})());m.exports=O},782,[407,404,436,402,403,520,783,425]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('PermissionsAndroid');e.default=n},783,[428]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),o=r(d[0])(r(d[2])),n=r(d[0])(r(d[3])),l=r(d[0])(r(d[4])),u=r(d[0])(r(d[5])),c=r(d[0])(r(d[6])),f=new n.default('ios'!==c.default.OS?null:l.default),s=new Map,v=(function(){function n(o){var l=this;(0,t.default)(this,n),this._data={},this._remoteNotificationCompleteCallbackCalled=!1,this._isRemote=o.remote,this._isRemote&&(this._notificationId=o.notificationId),o.remote?Object.keys(o).forEach(function(t){var n=o[t];'aps'===t?(l._alert=n.alert,l._sound=n.sound,l._badgeCount=n.badge,l._category=n.category,l._contentAvailable=n['content-available'],l._threadID=n['thread-id']):l._data[t]=n}):(this._badgeCount=o.applicationIconBadgeNumber,this._sound=o.soundName,this._alert=o.alertBody,this._data=o.userInfo,this._category=o.category)}return(0,o.default)(n,[{key:"finish",value:function(t){this._isRemote&&this._notificationId&&!this._remoteNotificationCompleteCallbackCalled&&(this._remoteNotificationCompleteCallbackCalled=!0,(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.onFinishRemoteNotification(this._notificationId,t))}},{key:"getMessage",value:function(){return this._alert}},{key:"getSound",value:function(){return this._sound}},{key:"getCategory",value:function(){return this._category}},{key:"getAlert",value:function(){return this._alert}},{key:"getContentAvailable",value:function(){return this._contentAvailable}},{key:"getBadgeCount",value:function(){return this._badgeCount}},{key:"getData",value:function(){return this._data}},{key:"getThreadID",value:function(){return this._threadID}}],[{key:"presentLocalNotification",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.presentLocalNotification(t)}},{key:"scheduleLocalNotification",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.scheduleLocalNotification(t)}},{key:"cancelAllLocalNotifications",value:function(){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.cancelAllLocalNotifications()}},{key:"removeAllDeliveredNotifications",value:function(){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.removeAllDeliveredNotifications()}},{key:"getDeliveredNotifications",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.getDeliveredNotifications(t)}},{key:"removeDeliveredNotifications",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.removeDeliveredNotifications(t)}},{key:"setApplicationIconBadgeNumber",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.setApplicationIconBadgeNumber(t)}},{key:"getApplicationIconBadgeNumber",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.getApplicationIconBadgeNumber(t)}},{key:"cancelLocalNotifications",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.cancelLocalNotifications(t)}},{key:"getScheduledLocalNotifications",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.getScheduledLocalNotifications(t)}},{key:"addEventListener",value:function(t,o){var l;(0,u.default)('notification'===t||'register'===t||'registrationError'===t||'localNotification'===t,'PushNotificationIOS only supports `notification`, `register`, `registrationError`, and `localNotification` events'),'notification'===t?l=f.addListener("remoteNotificationReceived",function(t){o(new n(t))}):'localNotification'===t?l=f.addListener("localNotificationReceived",function(t){o(new n(t))}):'register'===t?l=f.addListener("remoteNotificationsRegistered",function(t){o(t.deviceToken)}):'registrationError'===t&&(l=f.addListener("remoteNotificationRegistrationError",function(t){o(t)})),s.set(t,l)}},{key:"removeEventListener",value:function(t,o){(0,u.default)('notification'===t||'register'===t||'registrationError'===t||'localNotification'===t,'PushNotificationIOS only supports `notification`, `register`, `registrationError`, and `localNotification` events');var n=s.get(t);n&&(n.remove(),s.delete(t))}},{key:"requestPermissions",value:function(t){var o={alert:!0,badge:!0,sound:!0};return t&&(o={alert:!!t.alert,badge:!!t.badge,sound:!!t.sound}),(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.requestPermissions(o)}},{key:"abandonPermissions",value:function(){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.abandonPermissions()}},{key:"checkPermissions",value:function(t){(0,u.default)('function'==typeof t,'Must provide a valid callback'),(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.checkPermissions(t)}},{key:"getInitialNotification",value:function(){return(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.getInitialNotification().then(function(t){return t&&new n(t)})}},{key:"getAuthorizationStatus",value:function(t){(0,u.default)(l.default,'PushNotificationManager is not available.'),l.default.getAuthorizationStatus(t)}}]),n})();v.FetchResult={NewData:'UIBackgroundFetchResultNewData',NoData:'UIBackgroundFetchResultNoData',ResultFailed:'UIBackgroundFetchResultFailed'},m.exports=v},784,[407,402,403,500,785,425,426]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(f,l,p):f[l]=n[l]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('PushNotificationManager');e.default=n},785,[428]); +__d(function(g,r,i,a,m,e,d){'use strict';var n={get:function(n){return console.warn('Settings is not yet supported on Android'),null},set:function(n){console.warn('Settings is not yet supported on Android')},watchKeys:function(n,t){return console.warn('Settings is not yet supported on Android'),-1},clearWatch:function(n){console.warn('Settings is not yet supported on Android')}};m.exports=n},786,[]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),s=r(d[0])(r(d[3])),l=(r(d[0])(r(d[4])),r(d[0])(r(d[5]))),o=(function(){function o(){(0,n.default)(this,o)}return(0,s.default)(o,null,[{key:"share",value:function(n){var s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(d[6])('object'==typeof n&&null!==n,'Content to share must be a valid object'),r(d[6])('string'==typeof n.url||'string'==typeof n.message,'At least one of URL and message is required'),r(d[6])('object'==typeof s&&null!==s,'Options must be a valid object'),r(d[6])(l.default,'ShareModule should be registered on Android.'),r(d[6])(null==n.title||'string'==typeof n.title,'Invalid title: title should be a string.');var o={title:n.title,message:'string'==typeof n.message?n.message:void 0};return l.default.share(o,s.dialogTitle).then(function(n){return(0,t.default)({activityType:null},n)})}}]),o})();o.sharedAction='sharedAction',o.dismissedAction='dismissedAction',m.exports=o},787,[407,436,402,403,741,788,425]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,u=new WeakMap;return(t=function(t){return t?u:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var u=t(o);if(u&&u.has(n))return u.get(n);var f={},l=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in n)if("default"!==c&&Object.prototype.hasOwnProperty.call(n,c)){var p=l?Object.getOwnPropertyDescriptor(n,c):null;p&&(p.get||p.set)?Object.defineProperty(f,c,p):f[c]=n[c]}f.default=n,u&&u.set(n,f);return f})(r(d[0])).get('ShareModule');e.default=n},788,[428]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),f=t.default.getConstants(),n={SHORT:f.SHORT,LONG:f.LONG,TOP:f.TOP,BOTTOM:f.BOTTOM,CENTER:f.CENTER,show:function(f,n){t.default.show(f,n)},showWithGravity:function(f,n,o){t.default.showWithGravity(f,n,o)},showWithGravityAndOffset:function(f,n,o,O,s){t.default.showWithGravityAndOffset(f,n,o,O,s)}};m.exports=n},789,[407,790]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=n[l]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).getEnforcing('ToastAndroid');e.default=n},790,[428]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){var t=(0,n.useMemo)(function(){return{getCurrentValue:function(){return u.default.getColorScheme()},subscribe:function(n){var t=u.default.addChangeListener(n);return function(){t.remove()}}}},[]);return(0,r(d[3]).useSubscription)(t)};var n=r(d[0]),u=r(d[1])(r(d[2]))},791,[534,407,742,792]); +__d(function(g,r,i,a,m,e,d){'use strict';m.exports=r(d[0])},792,[793]); +__d(function(_g,r,i,_a,m,e,_d){'use strict';var u=r(_d[0]);e.useSubscription=function(t){var n=t.getCurrentValue,a=t.subscribe,s=u.useState(function(){return{getCurrentValue:n,subscribe:a,value:n()}});t=s[0];var c=s[1];return s=t.value,t.getCurrentValue===n&&t.subscribe===a||(s=n(),c({getCurrentValue:n,subscribe:a,value:s})),u.useDebugValue(s),u.useEffect(function(){function u(){if(!t){var u=n();c(function(t){return t.getCurrentValue!==n||t.subscribe!==a||t.value===u?t:r(_d[1])({},t,{value:u})})}}var t=!1,s=a(u);return u(),function(){t=!0,s()}},[n,a]),s}},793,[534,536]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(){var f=(0,u.useState)(function(){return n.default.get('window')}),o=(0,t.default)(f,2),c=o[0],l=o[1];return(0,u.useEffect)(function(){function t(t){var n=t.window;c.width===n.width&&c.height===n.height&&c.scale===n.scale&&c.fontScale===n.fontScale||l(n)}var u=n.default.addEventListener('change',t);return t({window:n.default.get('window')}),function(){u.remove()}},[c]),c};var t=r(d[0])(r(d[1])),n=r(d[0])(r(d[2])),u=r(d[3])},794,[407,430,566,534]); +__d(function(g,r,i,a,m,e,d){'use strict';var A=r(d[0])({BOM:"\ufeff",BULLET:"\u2022",BULLET_SP:"\xa0\u2022\xa0",MIDDOT:"\xb7",MIDDOT_SP:"\xa0\xb7\xa0",MIDDOT_KATAKANA:"\u30fb",MDASH:"\u2014",MDASH_SP:"\xa0\u2014\xa0",NDASH:"\u2013",NDASH_SP:"\xa0\u2013\xa0",NBSP:"\xa0",PIZZA:"\ud83c\udf55",TRIANGLE_LEFT:"\u25c0",TRIANGLE_RIGHT:"\u25b6"});m.exports=A},795,[572]); +__d(function(g,r,i,a,m,e,d){var t=r(d[0])(r(d[1])),n=400;var o={vibrate:function(){var o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:n,f=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if('number'==typeof o)t.default.vibrate(o);else{if(!Array.isArray(o))throw new Error('Vibration pattern should be a number or array');t.default.vibrateByPattern(o,f?0:-1)}},cancel:function(){t.default.cancel()}};m.exports=o},796,[407,797]); +__d(function(g,r,i,a,m,e,d){function t(n){if("function"!=typeof WeakMap)return null;var o=new WeakMap,f=new WeakMap;return(t=function(t){return t?f:o})(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n=(function(n,o){if(!o&&n&&n.__esModule)return n;if(null===n||"object"!=typeof n&&"function"!=typeof n)return{default:n};var f=t(o);if(f&&f.has(n))return f.get(n);var u={},c=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var l in n)if("default"!==l&&Object.prototype.hasOwnProperty.call(n,l)){var p=c?Object.getOwnPropertyDescriptor(n,l):null;p&&(p.get||p.set)?Object.defineProperty(u,l,p):u[l]=n[l]}u.default=n,f&&f.set(n,u);return u})(r(d[0])).getEnforcing('Vibration');e.default=n},797,[428]); +__d(function(g,r,i,a,m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var n;n=(function(n){r(d[3])(o,n);var e,u,c=(e=o,u=t(),function(){var t,n=r(d[0])(e);if(u){var c=r(d[0])(this).constructor;t=Reflect.construct(n,arguments,c)}else t=n.apply(this,arguments);return r(d[1])(this,t)});function o(){return r(d[4])(this,o),c.apply(this,arguments)}return r(d[5])(o,[{key:"render",value:function(){return null}}],[{key:"ignoreWarnings",value:function(t){}},{key:"install",value:function(){}},{key:"uninstall",value:function(){}}]),o})(r(d[2]).Component),m.exports=n},798,[422,419,534,417,402,403]); +__d(function(g,r,i,a,m,e,d){Object.defineProperty(e,"__esModule",{value:!0}),e.DynamicColorIOS=void 0;e.DynamicColorIOS=function(o){throw new Error('DynamicColorIOS is not available on this platform.')}},799,[]); +__d(function(g,r,i,a,m,e,d){'use strict';var n=r(d[0]).shape({x:r(d[0]).number,y:r(d[0]).number});m.exports=n},800,[596]); +__d(function(g,r,_i,_a,_m,_e,d){'use strict';function t(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch(t){return!1}}var e='function'==typeof Symbol&&'function'==typeof Symbol.for?Symbol.for('nodejs.util.inspect.custom'):null;_e.Buffer=o,_e.SlowBuffer=function(t){+t!=t&&(t=0);return o.alloc(+t)},_e.INSPECT_MAX_BYTES=50;var n=2147483647;function i(t){if(t>n)throw new RangeError('The value "'+t+'" is invalid for option "size"');var e=new Uint8Array(t);return Object.setPrototypeOf(e,o.prototype),e}function o(t,e,n){if('number'==typeof t){if('string'==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return h(t)}return f(t,e,n)}function f(t,e,n){if('string'==typeof t)return a(t,e);if(ArrayBuffer.isView(t))return c(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(nt(t,ArrayBuffer)||t&&nt(t.buffer,ArrayBuffer))return l(t,e,n);if('undefined'!=typeof SharedArrayBuffer&&(nt(t,SharedArrayBuffer)||t&&nt(t.buffer,SharedArrayBuffer)))return l(t,e,n);if('number'==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var i=t.valueOf&&t.valueOf();if(null!=i&&i!==t)return o.from(i,e,n);var f=y(t);if(f)return f;if('undefined'!=typeof Symbol&&null!=Symbol.toPrimitive&&'function'==typeof t[Symbol.toPrimitive])return o.from(t[Symbol.toPrimitive]('string'),e,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function u(t){if('number'!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function s(t,e,n){return u(t),t<=0?i(t):void 0!==e?'string'==typeof n?i(t).fill(e,n):i(t).fill(e):i(t)}function h(t){return u(t),i(t<0?0:0|w(t))}function a(t,e){if('string'==typeof e&&''!==e||(e='utf8'),!o.isEncoding(e))throw new TypeError('Unknown encoding: '+e);var n=0|v(t,e),f=i(n),u=f.write(t,e);return u!==n&&(f=f.slice(0,u)),f}function p(t){for(var e=t.length<0?0:0|w(t.length),n=i(e),o=0;o=n)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+n.toString(16)+' bytes');return 0|t}function v(t,e){if(o.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||nt(t,ArrayBuffer))return t.byteLength;if('string'!=typeof t)throw new TypeError("The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type "+typeof t);var n=t.length,i=arguments.length>2&&!0===arguments[2];if(!i&&0===n)return 0;for(var f=!1;;)switch(e){case'ascii':case'latin1':case'binary':return n;case'utf8':case'utf-8':return K(t).length;case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return 2*n;case'hex':return n>>>1;case'base64':return rt(t).length;default:if(f)return i?-1:K(t).length;e=(''+e).toLowerCase(),f=!0}}function b(t,e,n){var i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return'';if((void 0===n||n>this.length)&&(n=this.length),n<=0)return'';if((n>>>=0)<=(e>>>=0))return'';for(t||(t='utf8');;)switch(t){case'hex':return P(this,e,n);case'utf8':case'utf-8':return L(this,e,n);case'ascii':return S(this,e,n);case'latin1':case'binary':return x(this,e,n);case'base64':return O(this,e,n);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return k(this,e,n);default:if(i)throw new TypeError('Unknown encoding: '+t);t=(t+'').toLowerCase(),i=!0}}function B(t,e,n){var i=t[e];t[e]=t[n],t[n]=i}function E(t,e,n,i,f){if(0===t.length)return-1;if('string'==typeof n?(i=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),it(n=+n)&&(n=f?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(f)return-1;n=t.length-1}else if(n<0){if(!f)return-1;n=0}if('string'==typeof e&&(e=o.from(e,i)),o.isBuffer(e))return 0===e.length?-1:m(t,e,n,i,f);if('number'==typeof e)return e&=255,'function'==typeof Uint8Array.prototype.indexOf?f?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):m(t,[e],n,i,f);throw new TypeError('val must be string, number or Buffer')}function m(t,e,n,i,o){var f,u=1,s=t.length,h=e.length;if(void 0!==i&&('ucs2'===(i=String(i).toLowerCase())||'ucs-2'===i||'utf16le'===i||'utf-16le'===i)){if(t.length<2||e.length<2)return-1;u=2,s/=2,h/=2,n/=2}function a(t,e){return 1===u?t[e]:t.readUInt16BE(e*u)}if(o){var p=-1;for(f=n;fs&&(n=s-h),f=n;f>=0;f--){for(var c=!0,l=0;lo&&(i=o):i=o;var f,u=e.length;for(i>u/2&&(i=u/2),f=0;f239?4:f>223?3:f>191?2:1;if(o+s<=n){var h=void 0,a=void 0,p=void 0,c=void 0;switch(s){case 1:f<128&&(u=f);break;case 2:128==(192&(h=t[o+1]))&&(c=(31&f)<<6|63&h)>127&&(u=c);break;case 3:h=t[o+1],a=t[o+2],128==(192&h)&&128==(192&a)&&(c=(15&f)<<12|(63&h)<<6|63&a)>2047&&(c<55296||c>57343)&&(u=c);break;case 4:h=t[o+1],a=t[o+2],p=t[o+3],128==(192&h)&&128==(192&a)&&128==(192&p)&&(c=(15&f)<<18|(63&h)<<12|(63&a)<<6|63&p)>65535&&c<1114112&&(u=c)}}null===u?(u=65533,s=1):u>65535&&(u-=65536,i.push(u>>>10&1023|55296),u=56320|1023&u),i.push(u),o+=s}return _(i)}_e.kMaxLength=n,o.TYPED_ARRAY_SUPPORT=(function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}})(),o.TYPED_ARRAY_SUPPORT||'undefined'==typeof console||'function'!=typeof console.error||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."),Object.defineProperty(o.prototype,'parent',{enumerable:!0,get:function(){if(o.isBuffer(this))return this.buffer}}),Object.defineProperty(o.prototype,'offset',{enumerable:!0,get:function(){if(o.isBuffer(this))return this.byteOffset}}),o.poolSize=8192,o.from=function(t,e,n){return f(t,e,n)},Object.setPrototypeOf(o.prototype,Uint8Array.prototype),Object.setPrototypeOf(o,Uint8Array),o.alloc=function(t,e,n){return s(t,e,n)},o.allocUnsafe=function(t){return h(t)},o.allocUnsafeSlow=function(t){return h(t)},o.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==o.prototype},o.compare=function(t,e){if(nt(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),nt(e,Uint8Array)&&(e=o.from(e,e.offset,e.byteLength)),!o.isBuffer(t)||!o.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;for(var n=t.length,i=e.length,f=0,u=Math.min(n,i);fi.length?(o.isBuffer(u)||(u=o.from(u)),u.copy(i,f)):Uint8Array.prototype.set.call(i,u,f);else{if(!o.isBuffer(u))throw new TypeError('"list" argument must be an Array of Buffers');u.copy(i,f)}f+=u.length}return i},o.byteLength=v,o.prototype._isBuffer=!0,o.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError('Buffer size must be a multiple of 16-bits');for(var e=0;ee&&(t+=' ... '),''},e&&(o.prototype[e]=o.prototype.inspect),o.prototype.compare=function(t,e,n,i,f){if(nt(t,Uint8Array)&&(t=o.from(t,t.offset,t.byteLength)),!o.isBuffer(t))throw new TypeError("The \"target\" argument must be one of type Buffer or Uint8Array. Received type "+typeof t);if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===i&&(i=0),void 0===f&&(f=this.length),e<0||n>t.length||i<0||f>this.length)throw new RangeError('out of range index');if(i>=f&&e>=n)return 0;if(i>=f)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,i>>>=0,f>>>=0,this===t)return 0;for(var u=f-i,s=n-e,h=Math.min(u,s),a=this.slice(i,f),p=t.slice(e,n),c=0;c>>=0,isFinite(n)?(n>>>=0,void 0===i&&(i='utf8')):(i=n,n=void 0)}var o=this.length-e;if((void 0===n||n>o)&&(n=o),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError('Attempt to write outside buffer bounds');i||(i='utf8');for(var f=!1;;)switch(i){case'hex':return I(this,t,e,n);case'utf8':case'utf-8':return U(this,t,e,n);case'ascii':case'latin1':case'binary':return A(this,t,e,n);case'base64':return R(this,t,e,n);case'ucs2':case'ucs-2':case'utf16le':case'utf-16le':return T(this,t,e,n);default:if(f)throw new TypeError('Unknown encoding: '+i);i=(''+i).toLowerCase(),f=!0}},o.prototype.toJSON=function(){return{type:'Buffer',data:Array.prototype.slice.call(this._arr||this,0)}};var M=4096;function _(t){var e=t.length;if(e<=M)return String.fromCharCode.apply(String,t);for(var n='',i=0;ii)&&(n=i);for(var o='',f=e;fn)throw new RangeError('Trying to access beyond buffer length')}function N(t,e,n,i,f,u){if(!o.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>f||et.length)throw new RangeError('Index out of range')}function F(t,e,n,i,o){X(e,i,o,t,n,7);var f=Number(e&BigInt(4294967295));t[n++]=f,f>>=8,t[n++]=f,f>>=8,t[n++]=f,f>>=8,t[n++]=f;var u=Number(e>>BigInt(32)&BigInt(4294967295));return t[n++]=u,u>>=8,t[n++]=u,u>>=8,t[n++]=u,u>>=8,t[n++]=u,n}function j(t,e,n,i,o){X(e,i,o,t,n,7);var f=Number(e&BigInt(4294967295));t[n+7]=f,f>>=8,t[n+6]=f,f>>=8,t[n+5]=f,f>>=8,t[n+4]=f;var u=Number(e>>BigInt(32)&BigInt(4294967295));return t[n+3]=u,u>>=8,t[n+2]=u,u>>=8,t[n+1]=u,u>>=8,t[n]=u,n+8}function D(t,e,n,i,o,f){if(n+i>t.length)throw new RangeError('Index out of range');if(n<0)throw new RangeError('Index out of range')}function z(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,4),r(d[3]).write(t,e,n,i,23,4),n+4}function Y(t,e,n,i,o){return e=+e,n>>>=0,o||D(t,0,n,8),r(d[3]).write(t,e,n,i,52,8),n+8}o.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e>>=0,e>>>=0,n||C(t,e,this.length);for(var i=this[t],o=1,f=0;++f>>=0,e>>>=0,n||C(t,e,this.length);for(var i=this[t+--e],o=1;e>0&&(o*=256);)i+=this[t+--e]*o;return i},o.prototype.readUint8=o.prototype.readUInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),this[t]},o.prototype.readUint16LE=o.prototype.readUInt16LE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]|this[t+1]<<8},o.prototype.readUint16BE=o.prototype.readUInt16BE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]<<8|this[t+1]},o.prototype.readUint32LE=o.prototype.readUInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},o.prototype.readUint32BE=o.prototype.readUInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},o.prototype.readBigUInt64LE=ft(function(t){J(t>>>=0,'offset');var e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);var i=e+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,24),o=this[++t]+this[++t]*Math.pow(2,8)+this[++t]*Math.pow(2,16)+n*Math.pow(2,24);return BigInt(i)+(BigInt(o)<>>=0,'offset');var e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);var i=e*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t],o=this[++t]*Math.pow(2,24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+n;return(BigInt(i)<>>=0,e>>>=0,n||C(t,e,this.length);for(var i=this[t],o=1,f=0;++f=(o*=128)&&(i-=Math.pow(2,8*e)),i},o.prototype.readIntBE=function(t,e,n){t>>>=0,e>>>=0,n||C(t,e,this.length);for(var i=e,o=1,f=this[t+--i];i>0&&(o*=256);)f+=this[t+--i]*o;return f>=(o*=128)&&(f-=Math.pow(2,8*e)),f},o.prototype.readInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},o.prototype.readInt16LE=function(t,e){t>>>=0,e||C(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},o.prototype.readInt16BE=function(t,e){t>>>=0,e||C(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},o.prototype.readInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},o.prototype.readInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},o.prototype.readBigInt64LE=ft(function(t){J(t>>>=0,'offset');var e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);var i=this[t+4]+this[t+5]*Math.pow(2,8)+this[t+6]*Math.pow(2,16)+(n<<24);return(BigInt(i)<>>=0,'offset');var e=this[t],n=this[t+7];void 0!==e&&void 0!==n||Z(t,this.length-8);var i=(e<<24)+this[++t]*Math.pow(2,16)+this[++t]*Math.pow(2,8)+this[++t];return(BigInt(i)<>>=0,e||C(t,4,this.length),r(d[3]).read(this,t,!0,23,4)},o.prototype.readFloatBE=function(t,e){return t>>>=0,e||C(t,4,this.length),r(d[3]).read(this,t,!1,23,4)},o.prototype.readDoubleLE=function(t,e){return t>>>=0,e||C(t,8,this.length),r(d[3]).read(this,t,!0,52,8)},o.prototype.readDoubleBE=function(t,e){return t>>>=0,e||C(t,8,this.length),r(d[3]).read(this,t,!1,52,8)},o.prototype.writeUintLE=o.prototype.writeUIntLE=function(t,e,n,i){(t=+t,e>>>=0,n>>>=0,i)||N(this,t,e,n,Math.pow(2,8*n)-1,0);var o=1,f=0;for(this[e]=255&t;++f>>=0,n>>>=0,i)||N(this,t,e,n,Math.pow(2,8*n)-1,0);var o=n-1,f=1;for(this[e+o]=255&t;--o>=0&&(f*=256);)this[e+o]=t/f&255;return e+n},o.prototype.writeUint8=o.prototype.writeUInt8=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,1,255,0),this[e]=255&t,e+1},o.prototype.writeUint16LE=o.prototype.writeUInt16LE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeUint16BE=o.prototype.writeUInt16BE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeUint32LE=o.prototype.writeUInt32LE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},o.prototype.writeUint32BE=o.prototype.writeUInt32BE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeBigUInt64LE=ft(function(t){return F(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt('0xffffffffffffffff'))}),o.prototype.writeBigUInt64BE=ft(function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,BigInt(0),BigInt('0xffffffffffffffff'))}),o.prototype.writeIntLE=function(t,e,n,i){if(t=+t,e>>>=0,!i){var o=Math.pow(2,8*n-1);N(this,t,e,n,o-1,-o)}var f=0,u=1,s=0;for(this[e]=255&t;++f>0)-s&255;return e+n},o.prototype.writeIntBE=function(t,e,n,i){if(t=+t,e>>>=0,!i){var o=Math.pow(2,8*n-1);N(this,t,e,n,o-1,-o)}var f=n-1,u=1,s=0;for(this[e+f]=255&t;--f>=0&&(u*=256);)t<0&&0===s&&0!==this[e+f+1]&&(s=1),this[e+f]=(t/u>>0)-s&255;return e+n},o.prototype.writeInt8=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},o.prototype.writeInt16LE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},o.prototype.writeInt16BE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},o.prototype.writeInt32LE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},o.prototype.writeInt32BE=function(t,e,n){return t=+t,e>>>=0,n||N(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},o.prototype.writeBigInt64LE=ft(function(t){return F(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt('0x8000000000000000'),BigInt('0x7fffffffffffffff'))}),o.prototype.writeBigInt64BE=ft(function(t){return j(this,t,arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,-BigInt('0x8000000000000000'),BigInt('0x7fffffffffffffff'))}),o.prototype.writeFloatLE=function(t,e,n){return z(this,t,e,!0,n)},o.prototype.writeFloatBE=function(t,e,n){return z(this,t,e,!1,n)},o.prototype.writeDoubleLE=function(t,e,n){return Y(this,t,e,!0,n)},o.prototype.writeDoubleBE=function(t,e,n){return Y(this,t,e,!1,n)},o.prototype.copy=function(t,e,n,i){if(!o.isBuffer(t))throw new TypeError('argument should be a Buffer');if(n||(n=0),i||0===i||(i=this.length),e>=t.length&&(e=t.length),e||(e=0),i>0&&i=this.length)throw new RangeError('Index out of range');if(i<0)throw new RangeError('sourceEnd out of bounds');i>this.length&&(i=this.length),t.length-e>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),'number'==typeof t)for(u=e;u=i+4;n-=3)e="_"+t.slice(n-3,n)+e;return""+t.slice(0,n)+e}function W(t,e,n){J(e,'offset'),void 0!==t[e]&&void 0!==t[e+n]||Z(e,t.length-(n+1))}function X(t,e,n,i,o,f){if(t>n||t3?0===e||e===BigInt(0)?">= 0"+s+" and < 2"+s+" ** "+8*(f+1)+s:">= -(2"+s+" ** "+(8*(f+1)-1)+s+") and < 2 ** "+(8*(f+1)-1)+s:">= "+e+s+" and <= "+n+s,new G.ERR_OUT_OF_RANGE('value',u,t)}W(i,o,f)}function J(t,e){if('number'!=typeof t)throw new G.ERR_INVALID_ARG_TYPE(e,'number',t)}function Z(t,e,n){if(Math.floor(t)!==t)throw J(t,n),new G.ERR_OUT_OF_RANGE(n||'offset','an integer',t);if(e<0)throw new G.ERR_BUFFER_OUT_OF_BOUNDS;throw new G.ERR_OUT_OF_RANGE(n||'offset',">= "+(n?1:0)+" and <= "+e,t)}V('ERR_BUFFER_OUT_OF_BOUNDS',function(t){return t?t+" is outside of buffer bounds":'Attempt to access memory outside buffer bounds'},RangeError),V('ERR_INVALID_ARG_TYPE',function(t,e){return"The \""+t+"\" argument must be of type number. Received type "+typeof e},TypeError),V('ERR_OUT_OF_RANGE',function(t,e,n){var i="The value of \""+t+"\" is out of range.",o=n;return Number.isInteger(n)&&Math.abs(n)>Math.pow(2,32)?o=q(String(n)):'bigint'==typeof n&&(o=String(n),(n>Math.pow(BigInt(2),BigInt(32))||n<-Math.pow(BigInt(2),BigInt(32)))&&(o=q(o)),o+='n'),i+=" It must be "+e+". Received "+o},RangeError);var $=/[^+/0-9A-Za-z-_]/g;function H(t){if((t=(t=t.split('=')[0]).trim().replace($,'')).length<2)return'';for(;t.length%4!=0;)t+='=';return t}function K(t,e){var n;e=e||1/0;for(var i=t.length,o=null,f=[],u=0;u55295&&n<57344){if(!o){if(n>56319){(e-=3)>-1&&f.push(239,191,189);continue}if(u+1===i){(e-=3)>-1&&f.push(239,191,189);continue}o=n;continue}if(n<56320){(e-=3)>-1&&f.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(e-=3)>-1&&f.push(239,191,189);if(o=null,n<128){if((e-=1)<0)break;f.push(n)}else if(n<2048){if((e-=2)<0)break;f.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;f.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error('Invalid code point');if((e-=4)<0)break;f.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return f}function Q(t){for(var e=[],n=0;n>8,o=n%256,f.push(o),f.push(i);return f}function rt(t){return r(d[2]).toByteArray(H(t))}function et(t,e,n,i){var o;for(o=0;o=e.length||o>=t.length);++o)e[o+n]=t[o];return o}function nt(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function it(t){return t!=t}var ot=(function(){for(var t=new Array(256),e=0;e<16;++e)for(var n=16*e,i=0;i<16;++i)t[n+i]="0123456789abcdef"[e]+"0123456789abcdef"[i];return t})();function ft(t){return'undefined'==typeof BigInt?ut:t}function ut(){throw new Error('BigInt not supported')}},801,[422,419,498,802,417,402,421,403]); +__d(function(g,r,_i,a,_m,_e,_d){_e.read=function(o,t,h,M,f){var w,p,i=8*f-M-1,n=(1<>1,e=-7,u=h?f-1:0,s=h?-1:1,c=o[t+u];for(u+=s,w=c&(1<<-e)-1,c>>=-e,e+=i;e>0;w=256*w+o[t+u],u+=s,e-=8);for(p=w&(1<<-e)-1,w>>=-e,e+=M;e>0;p=256*p+o[t+u],u+=s,e-=8);if(0===w)w=1-N;else{if(w===n)return p?NaN:1/0*(c?-1:1);p+=Math.pow(2,M),w-=N}return(c?-1:1)*p*Math.pow(2,w-M)},_e.write=function(o,t,h,M,f,w){var p,i,n,N=8*w-f-1,e=(1<>1,s=23===f?Math.pow(2,-24)-Math.pow(2,-77):0,c=M?0:w-1,l=M?1:-1,d=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(i=isNaN(t)?1:0,p=e):(p=Math.floor(Math.log(t)/Math.LN2),t*(n=Math.pow(2,-p))<1&&(p--,n*=2),(t+=p+u>=1?s/n:s*Math.pow(2,1-u))*n>=2&&(p++,n/=2),p+u>=e?(i=0,p=e):p+u>=1?(i=(t*n-1)*Math.pow(2,f),p+=u):(i=t*Math.pow(2,u-1)*Math.pow(2,f),p=0));f>=8;o[h+c]=255&i,c+=l,i/=256,f-=8);for(p=p<0;o[h+c]=255&p,c+=l,p/=256,N-=8);o[h+c-l]|=128*d}},802,[]); +__d(function(e,n,m,a,l,u,x){l.exports={name:"OnnxruntimeModuleExample",displayName:"OnnxruntimeModule Example"}},803,[]); +__r(52); +__r(0); \ No newline at end of file diff --git a/js/react_native/example/android/app/src/main/assets/mnist.ort b/js/react_native/e2e/android/app/src/main/assets/mnist.ort similarity index 100% rename from js/react_native/example/android/app/src/main/assets/mnist.ort rename to js/react_native/e2e/android/app/src/main/assets/mnist.ort diff --git a/js/react_native/example/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/DataHandlerPackage.java b/js/react_native/e2e/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/DataHandlerPackage.java similarity index 100% rename from js/react_native/example/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/DataHandlerPackage.java rename to js/react_native/e2e/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/DataHandlerPackage.java diff --git a/js/react_native/example/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MNISTDataHandler.java b/js/react_native/e2e/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MNISTDataHandler.java similarity index 99% rename from js/react_native/example/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MNISTDataHandler.java rename to js/react_native/e2e/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MNISTDataHandler.java index a6e80ca9b0bd6..8c9d71b76b34c 100644 --- a/js/react_native/example/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MNISTDataHandler.java +++ b/js/react_native/e2e/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MNISTDataHandler.java @@ -186,7 +186,7 @@ private WritableMap postprocess(ReadableMap result) throws Exception { if (maxValue == 0) { detectionResult = "No match"; } else { - detectionResult = "I guess, it's " + argmax; + detectionResult = String.valueOf(argmax); } WritableMap cookedMap = Arguments.createMap(); diff --git a/js/react_native/example/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainActivity.java b/js/react_native/e2e/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainActivity.java similarity index 100% rename from js/react_native/example/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainActivity.java rename to js/react_native/e2e/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainActivity.java diff --git a/js/react_native/example/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainApplication.java b/js/react_native/e2e/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainApplication.java similarity index 98% rename from js/react_native/example/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainApplication.java rename to js/react_native/e2e/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainApplication.java index 7c88c46d78c4c..2c59e5dd3d3b1 100644 --- a/js/react_native/example/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainApplication.java +++ b/js/react_native/e2e/android/app/src/main/java/com/example/reactnativeonnxruntimemodule/MainApplication.java @@ -27,7 +27,6 @@ public boolean getUseDeveloperSupport() { @Override protected List getPackages() { @SuppressWarnings("UnnecessaryLocalVariable") List packages = new PackageList(this).getPackages(); - packages.add(new OnnxruntimePackage()); packages.add(new DataHandlerPackage()); return packages; diff --git a/js/react_native/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/js/react_native/e2e/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from js/react_native/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to js/react_native/e2e/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/js/react_native/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/js/react_native/e2e/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from js/react_native/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png rename to js/react_native/e2e/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/js/react_native/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/js/react_native/e2e/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from js/react_native/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to js/react_native/e2e/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/js/react_native/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/js/react_native/e2e/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from js/react_native/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png rename to js/react_native/e2e/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/js/react_native/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/js/react_native/e2e/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from js/react_native/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to js/react_native/e2e/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/js/react_native/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/js/react_native/e2e/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from js/react_native/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png rename to js/react_native/e2e/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/js/react_native/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/js/react_native/e2e/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from js/react_native/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to js/react_native/e2e/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/js/react_native/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/js/react_native/e2e/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from js/react_native/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to js/react_native/e2e/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/js/react_native/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/js/react_native/e2e/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from js/react_native/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to js/react_native/e2e/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/js/react_native/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/js/react_native/e2e/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from js/react_native/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to js/react_native/e2e/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/js/react_native/example/app.json b/js/react_native/e2e/android/app/src/main/res/raw/app.json similarity index 100% rename from js/react_native/example/app.json rename to js/react_native/e2e/android/app/src/main/res/raw/app.json diff --git a/js/react_native/example/android/app/src/main/res/values/strings.xml b/js/react_native/e2e/android/app/src/main/res/values/strings.xml similarity index 100% rename from js/react_native/example/android/app/src/main/res/values/strings.xml rename to js/react_native/e2e/android/app/src/main/res/values/strings.xml diff --git a/js/react_native/example/android/app/src/main/res/values/styles.xml b/js/react_native/e2e/android/app/src/main/res/values/styles.xml similarity index 100% rename from js/react_native/example/android/app/src/main/res/values/styles.xml rename to js/react_native/e2e/android/app/src/main/res/values/styles.xml diff --git a/js/react_native/example/android/build.gradle b/js/react_native/e2e/android/build.gradle similarity index 91% rename from js/react_native/example/android/build.gradle rename to js/react_native/e2e/android/build.gradle index ad8671975386a..209d9a804881b 100644 --- a/js/react_native/example/android/build.gradle +++ b/js/react_native/e2e/android/build.gradle @@ -34,9 +34,5 @@ allprojects { google() jcenter() maven { url 'https://www.jitpack.io' } - - flatDir { - dir project(':onnxruntimereactnative').file('libs') - } } } diff --git a/js/react_native/example/android/gradle.properties b/js/react_native/e2e/android/gradle.properties similarity index 100% rename from js/react_native/example/android/gradle.properties rename to js/react_native/e2e/android/gradle.properties diff --git a/js/react_native/e2e/android/gradle/wrapper/gradle-wrapper.jar b/js/react_native/e2e/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..62d4c053550b91381bbd28b1afc82d634bf73a8a GIT binary patch literal 58910 zcma&ObC74zk}X`WF59+k+qTVL*+!RbS9RI8Z5v&-ZFK4Nn|tqzcjwK__x+Iv5xL`> zj94dg?X`0sMHx^qXds{;KY)OMg#H>35XgTVfq6#vc9ww|9) z@UMfwUqk)B9p!}NrNqTlRO#i!ALOPcWo78-=iy}NsAr~T8T0X0%G{DhX~u-yEwc29WQ4D zuv2j{a&j?qB4wgCu`zOXj!~YpTNFg)TWoV>DhYlR^Gp^rkOEluvxkGLB?!{fD!T@( z%3cy>OkhbIKz*R%uoKqrg1%A?)uTZD&~ssOCUBlvZhx7XHQ4b7@`&sPdT475?*zWy z>xq*iK=5G&N6!HiZaD{NSNhWL;+>Quw_#ZqZbyglna!Fqn3N!$L`=;TFPrhodD-Q` z1l*=DP2gKJP@)cwI@-M}?M$$$%u~=vkeC%>cwR$~?y6cXx-M{=wdT4|3X(@)a|KkZ z`w$6CNS@5gWS7s7P86L<=vg$Mxv$?)vMj3`o*7W4U~*Nden}wz=y+QtuMmZ{(Ir1D zGp)ZsNiy{mS}Au5;(fYf93rs^xvi(H;|H8ECYdC`CiC&G`zw?@)#DjMc7j~daL_A$ z7e3nF2$TKlTi=mOftyFBt8*Xju-OY@2k@f3YBM)-v8+5_o}M?7pxlNn)C0Mcd@87?+AA4{Ti2ptnYYKGp`^FhcJLlT%RwP4k$ad!ho}-^vW;s{6hnjD0*c39k zrm@PkI8_p}mnT&5I@=O1^m?g}PN^8O8rB`;t`6H+?Su0IR?;8txBqwK1Au8O3BZAX zNdJB{bpQWR@J|e=Z>XSXV1DB{uhr3pGf_tb)(cAkp)fS7*Qv))&Vkbb+cvG!j}ukd zxt*C8&RN}5ck{jkw0=Q7ldUp0FQ&Pb_$M7a@^nf`8F%$ftu^jEz36d#^M8Ia{VaTy z5(h$I)*l3i!VpPMW+XGgzL~fcN?{~1QWu9!Gu0jOWWE zNW%&&by0DbXL&^)r-A*7R@;T$P}@3eOj#gqJ!uvTqBL5bupU91UK#d|IdxBUZAeh1 z>rAI#*Y4jv>uhOh7`S@mnsl0g@1C;k$Z%!d*n8#_$)l}-1&z2kr@M+xWoKR z!KySy-7h&Bf}02%JeXmQGjO3ntu={K$jy$rFwfSV8!zqAL_*&e2|CJ06`4&0+ceI026REfNT>JzAdwmIlKLEr2? zaZ#d*XFUN*gpzOxq)cysr&#6zNdDDPH% zd8_>3B}uA7;bP4fKVdd~Og@}dW#74ceETOE- zlZgQqQfEc?-5ly(Z5`L_CCM!&Uxk5#wgo=OLs-kFHFG*cTZ)$VE?c_gQUW&*!2@W2 z7Lq&_Kf88OCo?BHCtwe*&fu&8PQ(R5&lnYo8%+U73U)Ec2&|A)Y~m7(^bh299REPe zn#gyaJ4%o4>diN3z%P5&_aFUmlKytY$t21WGwx;3?UC}vlxi-vdEQgsKQ;=#sJ#ll zZeytjOad$kyON4XxC}frS|Ybh`Yq!<(IrlOXP3*q86ImyV*mJyBn$m~?#xp;EplcM z+6sez%+K}Xj3$YN6{}VL;BZ7Fi|iJj-ywlR+AP8lq~mnt5p_%VmN{Sq$L^z!otu_u znVCl@FgcVXo510e@5(wnko%Pv+^r^)GRh;>#Z(|#cLnu_Y$#_xG&nvuT+~gzJsoSi zBvX`|IS~xaold!`P!h(v|=>!5gk)Q+!0R1Ge7!WpRP{*Ajz$oGG$_?Ajvz6F0X?809o`L8prsJ*+LjlGfSziO;+ zv>fyRBVx#oC0jGK8$%$>Z;0+dfn8x;kHFQ?Rpi7(Rc{Uq{63Kgs{IwLV>pDK7yX-2 zls;?`h!I9YQVVbAj7Ok1%Y+F?CJa-Jl>1x#UVL(lpzBBH4(6v0^4 z3Tf`INjml5`F_kZc5M#^J|f%7Hgxg3#o}Zwx%4l9yYG!WaYUA>+dqpRE3nw#YXIX%= ziH3iYO~jr0nP5xp*VIa#-aa;H&%>{mfAPPlh5Fc!N7^{!z$;p-p38aW{gGx z)dFS62;V;%%fKp&i@+5x=Cn7Q>H`NofJGXmNeh{sOL+Nk>bQJJBw3K*H_$}%*xJM=Kh;s#$@RBR z|75|g85da@#qT=pD777m$wI!Q8SC4Yw3(PVU53bzzGq$IdGQoFb-c_(iA_~qD|eAy z@J+2!tc{|!8fF;%6rY9`Q!Kr>MFwEH%TY0y>Q(D}xGVJM{J{aGN0drG&|1xO!Ttdw z-1^gQ&y~KS5SeslMmoA$Wv$ly={f}f9<{Gm!8ycp*D9m*5Ef{ymIq!MU01*)#J1_! zM_i4{LYButqlQ>Q#o{~W!E_#(S=hR}kIrea_67Z5{W>8PD>g$f;dTvlD=X@T$8D0;BWkle@{VTd&D5^)U>(>g(jFt4lRV6A2(Te->ooI{nk-bZ(gwgh zaH4GT^wXPBq^Gcu%xW#S#p_&x)pNla5%S5;*OG_T^PhIIw1gXP&u5c;{^S(AC*+$> z)GuVq(FT@zq9;i{*9lEsNJZ)??BbSc5vF+Kdh-kL@`(`l5tB4P!9Okin2!-T?}(w% zEpbEU67|lU#@>DppToestmu8Ce=gz=e#V+o)v)#e=N`{$MI5P0O)_fHt1@aIC_QCv=FO`Qf=Ga%^_NhqGI)xtN*^1n{ z&vgl|TrKZ3Vam@wE0p{c3xCCAl+RqFEse@r*a<3}wmJl-hoJoN<|O2zcvMRl<#BtZ z#}-bPCv&OTw`GMp&n4tutf|er`@#d~7X+);##YFSJ)BitGALu}-N*DJdCzs(cQ?I- z6u(WAKH^NUCcOtpt5QTsQRJ$}jN28ZsYx+4CrJUQ%egH zo#tMoywhR*oeIkS%}%WUAIbM`D)R6Ya&@sZvvUEM7`fR0Ga03*=qaEGq4G7-+30Ck zRkje{6A{`ebq?2BTFFYnMM$xcQbz0nEGe!s%}O)m={`075R0N9KTZ>vbv2^eml>@}722%!r#6Wto}?vNst? zs`IasBtcROZG9+%rYaZe^=5y3chDzBf>;|5sP0!sP(t^= z^~go8msT@|rp8LJ8km?4l?Hb%o10h7(ixqV65~5Y>n_zG3AMqM3UxUNj6K-FUgMT7 z*Dy2Y8Ws+%`Z*~m9P zCWQ8L^kA2$rf-S@qHow$J86t)hoU#XZ2YK~9GXVR|*`f6`0&8j|ss_Ai-x=_;Df^*&=bW$1nc{Gplm zF}VF`w)`5A;W@KM`@<9Bw_7~?_@b{Z`n_A6c1AG#h#>Z$K>gX6reEZ*bZRjCup|0# zQ{XAb`n^}2cIwLTN%5Ix`PB*H^(|5S{j?BwItu+MS`1)VW=TnUtt6{3J!WR`4b`LW z?AD#ZmoyYpL=903q3LSM=&5eNP^dwTDRD~iP=}FXgZ@2WqfdyPYl$9do?wX{RU*$S zgQ{OqXK-Yuf4+}x6P#A*la&^G2c2TC;aNNZEYuB(f25|5eYi|rd$;i0qk7^3Ri8of ziP~PVT_|4$n!~F-B1_Et<0OJZ*e+MN;5FFH`iec(lHR+O%O%_RQhvbk-NBQ+$)w{D+dlA0jxI;z|P zEKW`!X)${xzi}Ww5G&@g0akBb_F`ziv$u^hs0W&FXuz=Ap>SUMw9=M?X$`lgPRq11 zqq+n44qL;pgGO+*DEc+Euv*j(#%;>p)yqdl`dT+Og zZH?FXXt`<0XL2@PWYp|7DWzFqxLK)yDXae&3P*#+f+E{I&h=$UPj;ey9b`H?qe*Oj zV|-qgI~v%&oh7rzICXfZmg$8$B|zkjliQ=e4jFgYCLR%yi!9gc7>N z&5G#KG&Hr+UEfB;M(M>$Eh}P$)<_IqC_WKOhO4(cY@Gn4XF(#aENkp&D{sMQgrhDT zXClOHrr9|POHqlmm+*L6CK=OENXbZ+kb}t>oRHE2xVW<;VKR@ykYq04LM9L-b;eo& zl!QQo!Sw{_$-qosixZJWhciN>Gbe8|vEVV2l)`#5vKyrXc6E`zmH(76nGRdL)pqLb@j<&&b!qJRLf>d`rdz}^ZSm7E;+XUJ ziy;xY&>LM?MA^v0Fu8{7hvh_ynOls6CI;kQkS2g^OZr70A}PU;i^~b_hUYN1*j-DD zn$lHQG9(lh&sDii)ip*{;Sb_-Anluh`=l~qhqbI+;=ZzpFrRp&T+UICO!OoqX@Xr_ z32iJ`xSpx=lDDB_IG}k+GTYG@K8{rhTS)aoN8D~Xfe?ul&;jv^E;w$nhu-ICs&Q)% zZ=~kPNZP0-A$pB8)!`TEqE`tY3Mx^`%O`?EDiWsZpoP`e-iQ#E>fIyUx8XN0L z@S-NQwc;0HjSZKWDL}Au_Zkbh!juuB&mGL0=nO5)tUd_4scpPy&O7SNS^aRxUy0^< zX}j*jPrLP4Pa0|PL+nrbd4G;YCxCK-=G7TG?dby~``AIHwxqFu^OJhyIUJkO0O<>_ zcpvg5Fk$Wpj}YE3;GxRK67P_Z@1V#+pu>pRj0!mFf(m_WR3w3*oQy$s39~U7Cb}p(N&8SEwt+)@%o-kW9Ck=^?tvC2$b9% ze9(Jn+H`;uAJE|;$Flha?!*lJ0@lKfZM>B|c)3lIAHb;5OEOT(2453m!LgH2AX=jK zQ93An1-#l@I@mwB#pLc;M7=u6V5IgLl>E%gvE|}Hvd4-bE1>gs(P^C}gTv*&t>W#+ zASLRX$y^DD3Jrht zwyt`yuA1j(TcP*0p*Xkv>gh+YTLrcN_HuaRMso~0AJg`^nL#52dGBzY+_7i)Ud#X) zVwg;6$WV20U2uyKt8<)jN#^1>PLg`I`@Mmut*Zy!c!zshSA!e^tWVoKJD%jN&ml#{ z@}B$j=U5J_#rc%T7(DGKF+WwIblEZ;Vq;CsG~OKxhWYGJx#g7fxb-_ya*D0=_Ys#f zhXktl=Vnw#Z_neW>Xe#EXT(4sT^3p6srKby4Ma5LLfh6XrHGFGgM;5Z}jv-T!f~=jT&n>Rk z4U0RT-#2fsYCQhwtW&wNp6T(im4dq>363H^ivz#>Sj;TEKY<)dOQU=g=XsLZhnR>e zd}@p1B;hMsL~QH2Wq>9Zb; zK`0`09fzuYg9MLJe~cdMS6oxoAD{kW3sFAqDxvFM#{GpP^NU@9$d5;w^WgLYknCTN z0)N425mjsJTI@#2kG-kB!({*+S(WZ-{SckG5^OiyP%(6DpRsx60$H8M$V65a_>oME z^T~>oG7r!ew>Y)&^MOBrgc-3PezgTZ2xIhXv%ExMFgSf5dQbD=Kj*!J4k^Xx!Z>AW ziZfvqJvtm|EXYsD%A|;>m1Md}j5f2>kt*gngL=enh<>#5iud0dS1P%u2o+>VQ{U%(nQ_WTySY(s#~~> zrTsvp{lTSup_7*Xq@qgjY@1#bisPCRMMHnOL48qi*jQ0xg~TSW%KMG9zN1(tjXix()2$N}}K$AJ@GUth+AyIhH6Aeh7qDgt#t*`iF5#A&g4+ zWr0$h9Zx6&Uo2!Ztcok($F>4NA<`dS&Js%L+67FT@WmI)z#fF~S75TUut%V($oUHw z$IJsL0X$KfGPZYjB9jaj-LaoDD$OMY4QxuQ&vOGo?-*9@O!Nj>QBSA6n$Lx|^ zky)4+sy{#6)FRqRt6nM9j2Lzba!U;aL%ZcG&ki1=3gFx6(&A3J-oo|S2_`*w9zT)W z4MBOVCp}?4nY)1))SOX#6Zu0fQQ7V{RJq{H)S#;sElY)S)lXTVyUXTepu4N)n85Xo zIpWPT&rgnw$D2Fsut#Xf-hO&6uA0n~a;a3!=_!Tq^TdGE&<*c?1b|PovU}3tfiIUu z){4W|@PY}zJOXkGviCw^x27%K_Fm9GuKVpd{P2>NJlnk^I|h2XW0IO~LTMj>2<;S* zZh2uRNSdJM$U$@=`zz}%;ucRx{aKVxxF7?0hdKh6&GxO6f`l2kFncS3xu0Ly{ew0& zeEP*#lk-8-B$LD(5yj>YFJ{yf5zb41PlW7S{D9zC4Aa4nVdkDNH{UsFJp)q-`9OYt zbOKkigbmm5hF?tttn;S4g^142AF^`kiLUC?e7=*JH%Qe>uW=dB24NQa`;lm5yL>Dyh@HbHy-f%6Vz^ zh&MgwYsh(z#_fhhqY$3*f>Ha}*^cU-r4uTHaT?)~LUj5``FcS46oyoI5F3ZRizVD% zPFY(_S&5GN8$Nl2=+YO6j4d|M6O7CmUyS&}m4LSn6}J`$M0ZzT&Ome)ZbJDFvM&}A zZdhDn(*viM-JHf84$!I(8eakl#zRjJH4qfw8=60 z11Ely^FyXjVvtv48-Fae7p=adlt9_F^j5#ZDf7)n!#j?{W?@j$Pi=k`>Ii>XxrJ?$ z^bhh|X6qC8d{NS4rX5P!%jXy=>(P+r9?W(2)|(=a^s^l~x*^$Enw$~u%WRuRHHFan{X|S;FD(Mr z@r@h^@Bs#C3G;~IJMrERd+D!o?HmFX&#i|~q(7QR3f8QDip?ms6|GV_$86aDb|5pc?_-jo6vmWqYi{P#?{m_AesA4xX zi&ki&lh0yvf*Yw~@jt|r-=zpj!bw<6zI3Aa^Wq{|*WEC}I=O!Re!l~&8|Vu<$yZ1p zs-SlwJD8K!$(WWyhZ+sOqa8cciwvyh%zd`r$u;;fsHn!hub0VU)bUv^QH?x30#;tH zTc_VbZj|prj7)d%ORU;Vs{#ERb>K8>GOLSImnF7JhR|g$7FQTU{(a7RHQ*ii-{U3X z^7+vM0R$8b3k1aSU&kxvVPfOz3~)0O2iTYinV9_5{pF18j4b{o`=@AZIOAwwedB2@ ztXI1F04mg{<>a-gdFoRjq$6#FaevDn$^06L)k%wYq03&ysdXE+LL1#w$rRS1Y;BoS zH1x}{ms>LHWmdtP(ydD!aRdAa(d@csEo z0EF9L>%tppp`CZ2)jVb8AuoYyu;d^wfje6^n6`A?6$&%$p>HcE_De-Zh)%3o5)LDa zskQ}%o7?bg$xUj|n8gN9YB)z!N&-K&!_hVQ?#SFj+MpQA4@4oq!UQ$Vm3B`W_Pq3J z=ngFP4h_y=`Iar<`EESF9){%YZVyJqLPGq07TP7&fSDmnYs2NZQKiR%>){imTBJth zPHr@p>8b+N@~%43rSeNuOz;rgEm?14hNtI|KC6Xz1d?|2J`QS#`OW7gTF_;TPPxu@ z)9J9>3Lx*bc>Ielg|F3cou$O0+<b34_*ZJhpS&$8DP>s%47a)4ZLw`|>s=P_J4u z?I_%AvR_z8of@UYWJV?~c4Yb|A!9n!LEUE6{sn@9+D=0w_-`szJ_T++x3MN$v-)0d zy`?1QG}C^KiNlnJBRZBLr4G~15V3$QqC%1G5b#CEB0VTr#z?Ug%Jyv@a`QqAYUV~^ zw)d|%0g&kl{j#FMdf$cn(~L@8s~6eQ)6{`ik(RI(o9s0g30Li{4YoxcVoYd+LpeLz zai?~r)UcbYr@lv*Z>E%BsvTNd`Sc?}*}>mzJ|cr0Y(6rA7H_6&t>F{{mJ^xovc2a@ zFGGDUcGgI-z6H#o@Gj29C=Uy{wv zQHY2`HZu8+sBQK*_~I-_>fOTKEAQ8_Q~YE$c?cSCxI;vs-JGO`RS464Ft06rpjn+a zqRS0Y3oN(9HCP@{J4mOWqIyD8PirA!pgU^Ne{LHBG;S*bZpx3|JyQDGO&(;Im8!ed zNdpE&?3U?E@O~>`@B;oY>#?gXEDl3pE@J30R1;?QNNxZ?YePc)3=NS>!STCrXu*lM z69WkLB_RBwb1^-zEm*tkcHz3H;?v z;q+x0Jg$|?5;e1-kbJnuT+^$bWnYc~1qnyVTKh*cvM+8yJT-HBs1X@cD;L$su65;i z2c1MxyL~NuZ9+)hF=^-#;dS#lFy^Idcb>AEDXu1!G4Kd8YPy~0lZz$2gbv?su}Zn} zGtIbeYz3X8OA9{sT(aleold_?UEV{hWRl(@)NH6GFH@$<8hUt=dNte%e#Jc>7u9xi zuqv!CRE@!fmZZ}3&@$D>p0z=*dfQ_=IE4bG0hLmT@OP>x$e`qaqf_=#baJ8XPtOpWi%$ep1Y)o2(sR=v)M zt(z*pGS$Z#j_xq_lnCr+x9fwiT?h{NEn#iK(o)G&Xw-#DK?=Ms6T;%&EE${Gq_%99 z6(;P~jPKq9llc+cmI(MKQ6*7PcL)BmoI}MYFO)b3-{j>9FhNdXLR<^mnMP`I7z0v` zj3wxcXAqi4Z0kpeSf>?V_+D}NULgU$DBvZ^=0G8Bypd7P2>;u`yW9`%4~&tzNJpgp zqB+iLIM~IkB;ts!)exn643mAJ8-WlgFE%Rpq!UMYtB?$5QAMm)%PT0$$2{>Yu7&U@ zh}gD^Qdgu){y3ANdB5{75P;lRxSJPSpQPMJOiwmpMdT|?=q;&$aTt|dl~kvS z+*i;6cEQJ1V`R4Fd>-Uzsc=DPQ7A7#VPCIf!R!KK%LM&G%MoZ0{-8&99H!|UW$Ejv zhDLX3ESS6CgWTm#1ZeS2HJb`=UM^gsQ84dQpX(ESWSkjn>O zVxg%`@mh(X9&&wN$lDIc*@>rf?C0AD_mge3f2KkT6kGySOhXqZjtA?5z`vKl_{(5g z&%Y~9p?_DL{+q@siT~*3Q*$nWXQfNN;%s_eHP_A;O`N`SaoB z6xYR;z_;HQ2xAa9xKgx~2f2xEKiEDpGPH1d@||v#f#_Ty6_gY>^oZ#xac?pc-F`@ z*}8sPV@xiz?efDMcmmezYVw~qw=vT;G1xh+xRVBkmN66!u(mRG3G6P#v|;w@anEh7 zCf94arw%YB*=&3=RTqX?z4mID$W*^+&d6qI*LA-yGme;F9+wTsNXNaX~zl2+qIK&D-aeN4lr0+yP;W>|Dh?ms_ogT{DT+ ztXFy*R7j4IX;w@@R9Oct5k2M%&j=c_rWvoul+` z<18FH5D@i$P38W9VU2(EnEvlJ(SHCqTNBa)brkIjGP|jCnK&Qi%97tikU}Y#3L?s! z2ujL%YiHO-#!|g5066V01hgT#>fzls7P>+%D~ogOT&!Whb4iF=CnCto82Yb#b`YoVsj zS2q^W0Rj!RrM@=_GuPQy5*_X@Zmu`TKSbqEOP@;Ga&Rrr>#H@L41@ZX)LAkbo{G8+ z;!5EH6vv-ip0`tLB)xUuOX(*YEDSWf?PIxXe`+_B8=KH#HFCfthu}QJylPMTNmoV; zC63g%?57(&osaH^sxCyI-+gwVB|Xs2TOf=mgUAq?V~N_5!4A=b{AXbDae+yABuuu3B_XSa4~c z1s-OW>!cIkjwJf4ZhvT|*IKaRTU)WAK=G|H#B5#NB9<{*kt?7`+G*-^<)7$Iup@Um z7u*ABkG3F*Foj)W9-I&@BrN8(#$7Hdi`BU#SR1Uz4rh&=Ey!b76Qo?RqBJ!U+rh(1 znw@xw5$)4D8OWtB_^pJO*d~2Mb-f~>I!U#*=Eh*xa6$LX?4Evp4%;ENQR!mF4`f7F zpG!NX=qnCwE8@NAbQV`*?!v0;NJ(| zBip8}VgFVsXFqslXUV>_Z>1gmD(7p#=WACXaB|Y`=Kxa=p@_ALsL&yAJ`*QW^`2@% zW7~Yp(Q@ihmkf{vMF?kqkY%SwG^t&CtfRWZ{syK@W$#DzegcQ1>~r7foTw3^V1)f2Tq_5f$igmfch;8 zT-<)?RKcCdQh6x^mMEOS;4IpQ@F2q-4IC4%*dU@jfHR4UdG>Usw4;7ESpORL|2^#jd+@zxz{(|RV*1WKrw-)ln*8LnxVkKDfGDHA%7`HaiuvhMu%*mY9*Ya{Ti#{DW?i0 zXXsp+Bb(_~wv(3t70QU3a$*<$1&zm1t++x#wDLCRI4K)kU?Vm9n2c0m@TyUV&&l9%}fulj!Z9)&@yIcQ3gX}l0b1LbIh4S z5C*IDrYxR%qm4LVzSk{0;*npO_SocYWbkAjA6(^IAwUnoAzw_Uo}xYFo?Y<-4Zqec z&k7HtVlFGyt_pA&kX%P8PaRD8y!Wsnv}NMLNLy-CHZf(ObmzV|t-iC#@Z9*d-zUsx zxcYWw{H)nYXVdnJu5o-U+fn~W z-$h1ax>h{NlWLA7;;6TcQHA>UJB$KNk74T1xNWh9)kwK~wX0m|Jo_Z;g;>^E4-k4R zRj#pQb-Hg&dAh}*=2;JY*aiNZzT=IU&v|lQY%Q|=^V5pvTR7^t9+@+ST&sr!J1Y9a z514dYZn5rg6@4Cy6P`-?!3Y& z?B*5zw!mTiD2)>f@3XYrW^9V-@%YFkE_;PCyCJ7*?_3cR%tHng9%ZpIU}LJM=a+0s z(SDDLvcVa~b9O!cVL8)Q{d^R^(bbG=Ia$)dVN_tGMee3PMssZ7Z;c^Vg_1CjZYTnq z)wnF8?=-MmqVOMX!iE?YDvHCN?%TQtKJMFHp$~kX4}jZ;EDqP$?jqJZjoa2PM@$uZ zF4}iab1b5ep)L;jdegC3{K4VnCH#OV;pRcSa(&Nm50ze-yZ8*cGv;@+N+A?ncc^2z9~|(xFhwOHmPW@ zR5&)E^YKQj@`g=;zJ_+CLamsPuvppUr$G1#9urUj+p-mPW_QSSHkPMS!52t>Hqy|g z_@Yu3z%|wE=uYq8G>4`Q!4zivS}+}{m5Zjr7kMRGn_p&hNf|pc&f9iQ`^%78rl#~8 z;os@rpMA{ZioY~(Rm!Wf#Wx##A0PthOI341QiJ=G*#}pDAkDm+{0kz&*NB?rC0-)glB{0_Tq*^o zVS1>3REsv*Qb;qg!G^9;VoK)P*?f<*H&4Su1=}bP^Y<2PwFpoqw#up4IgX3L z`w~8jsFCI3k~Y9g(Y9Km`y$0FS5vHb)kb)Jb6q-9MbO{Hbb zxg?IWQ1ZIGgE}wKm{axO6CCh~4DyoFU+i1xn#oyfe+<{>=^B5tm!!*1M?AW8c=6g+%2Ft97_Hq&ZmOGvqGQ!Bn<_Vw`0DRuDoB6q8ME<;oL4kocr8E$NGoLI zXWmI7Af-DR|KJw!vKp2SI4W*x%A%5BgDu%8%Iato+pWo5`vH@!XqC!yK}KLzvfS(q z{!y(S-PKbk!qHsgVyxKsQWk_8HUSSmslUA9nWOjkKn0%cwn%yxnkfxn?Y2rysXKS=t-TeI%DN$sQ{lcD!(s>(4y#CSxZ4R} zFDI^HPC_l?uh_)-^ppeYRkPTPu~V^0Mt}#jrTL1Q(M;qVt4zb(L|J~sxx7Lva9`mh zz!#A9tA*6?q)xThc7(gB2Ryam$YG4qlh00c}r&$y6u zIN#Qxn{7RKJ+_r|1G1KEv!&uKfXpOVZ8tK{M775ws%nDyoZ?bi3NufNbZs)zqXiqc zqOsK@^OnlFMAT&mO3`@3nZP$3lLF;ds|;Z{W(Q-STa2>;)tjhR17OD|G>Q#zJHb*> zMO<{WIgB%_4MG0SQi2;%f0J8l_FH)Lfaa>*GLobD#AeMttYh4Yfg22@q4|Itq};NB z8;o*+@APqy@fPgrc&PTbGEwdEK=(x5K!If@R$NiO^7{#j9{~w=RBG)ZkbOw@$7Nhl zyp{*&QoVBd5lo{iwl2gfyip@}IirZK;ia(&ozNl!-EEYc=QpYH_= zJkv7gA{!n4up6$CrzDJIBAdC7D5D<_VLH*;OYN>_Dx3AT`K4Wyx8Tm{I+xplKP6k7 z2sb!i7)~%R#J0$|hK?~=u~rnH7HCUpsQJujDDE*GD`qrWWog+C+E~GGy|Hp_t4--} zrxtrgnPh}r=9o}P6jpAQuDN}I*GI`8&%Lp-C0IOJt#op)}XSr!ova@w{jG2V=?GXl3zEJJFXg)U3N>BQP z*Lb@%Mx|Tu;|u>$-K(q^-HG!EQ3o93%w(A7@ngGU)HRWoO&&^}U$5x+T&#zri>6ct zXOB#EF-;z3j311K`jrYyv6pOPF=*`SOz!ack=DuEi({UnAkL5H)@R?YbRKAeP|06U z?-Ns0ZxD0h9D8)P66Sq$w-yF+1hEVTaul%&=kKDrQtF<$RnQPZ)ezm1`aHIjAY=!S z`%vboP`?7mItgEo4w50C*}Ycqp9_3ZEr^F1;cEhkb`BNhbc6PvnXu@wi=AoezF4~K zkxx%ps<8zb=wJ+9I8o#do)&{(=yAlNdduaDn!=xGSiuo~fLw~Edw$6;l-qaq#Z7?# zGrdU(Cf-V@$x>O%yRc6!C1Vf`b19ly;=mEu8u9|zitcG^O`lbNh}k=$%a)UHhDwTEKis2yc4rBGR>l*(B$AC7ung&ssaZGkY-h(fpwcPyJSx*9EIJMRKbMP9}$nVrh6$g-Q^5Cw)BeWqb-qi#37ZXKL!GR;ql)~ z@PP*-oP?T|ThqlGKR84zi^CN z4TZ1A)7vL>ivoL2EU_~xl-P{p+sE}9CRwGJDKy{>0KP+gj`H9C+4fUMPnIB1_D`A- z$1`G}g0lQmqMN{Y&8R*$xYUB*V}dQPxGVZQ+rH!DVohIoTbh%#z#Tru%Px@C<=|og zGDDwGq7yz`%^?r~6t&>x*^We^tZ4!E4dhwsht#Pb1kCY{q#Kv;z%Dp#Dq;$vH$-(9 z8S5tutZ}&JM2Iw&Y-7KY4h5BBvS=Ove0#+H2qPdR)WyI zYcj)vB=MA{7T|3Ij_PN@FM@w(C9ANBq&|NoW30ccr~i#)EcH)T^3St~rJ0HKKd4wr z@_+132;Bj+>UC@h)Ap*8B4r5A1lZ!Dh%H7&&hBnlFj@eayk=VD*i5AQc z$uN8YG#PL;cuQa)Hyt-}R?&NAE1QT>svJDKt*)AQOZAJ@ zyxJoBebiobHeFlcLwu_iI&NEZuipnOR;Tn;PbT1Mt-#5v5b*8ULo7m)L-eti=UcGf zRZXidmxeFgY!y80-*PH-*=(-W+fK%KyUKpg$X@tuv``tXj^*4qq@UkW$ZrAo%+hay zU@a?z&2_@y)o@D!_g>NVxFBO!EyB&6Z!nd4=KyDP^hl!*(k{dEF6@NkXztO7gIh zQ&PC+p-8WBv;N(rpfKdF^@Z~|E6pa)M1NBUrCZvLRW$%N%xIbv^uv?=C!=dDVq3%* zgvbEBnG*JB*@vXx8>)7XL*!{1Jh=#2UrByF7U?Rj_}VYw88BwqefT_cCTv8aTrRVjnn z1HNCF=44?*&gs2`vCGJVHX@kO z240eo#z+FhI0=yy6NHQwZs}a+J~4U-6X`@ zZ7j+tb##m`x%J66$a9qXDHG&^kp|GkFFMmjD(Y-k_ClY~N$H|n@NkSDz=gg?*2ga5 z)+f)MEY>2Lp15;~o`t`qj;S>BaE;%dv@Ux11yq}I(k|o&`5UZFUHn}1kE^gIK@qV& z!S2IhyU;->VfA4Qb}m7YnkIa9%z{l~iPWo2YPk-`hy2-Eg=6E$21plQA5W2qMZDFU z-a-@Dndf%#on6chT`dOKnU9}BJo|kJwgGC<^nfo34zOKH96LbWY7@Wc%EoFF=}`VU zksP@wd%@W;-p!e^&-)N7#oR331Q)@9cx=mOoU?_Kih2!Le*8fhsZ8Qvo6t2vt+UOZ zw|mCB*t2%z21YqL>whu!j?s~}-L`OS+jdg1(XnmYw$rg~r(?5Y+qTg`$F}q3J?GtL z@BN&8#`u2RqkdG4yGGTus@7U_%{6C{XAhFE!2SelH?KtMtX@B1GBhEIDL-Bj#~{4! zd}p7!#XE9Lt;sy@p5#Wj*jf8zGv6tTotCR2X$EVOOup;GnRPRVU5A6N@Lh8?eA7k? zn~hz&gY;B0ybSpF?qwQ|sv_yO=8}zeg2$0n3A8KpE@q26)?707pPw?H76lCpjp=5r z6jjp|auXJDnW}uLb6d7rsxekbET9(=zdTqC8(F5@NNqII2+~yB;X5iJNQSiv`#ozm zf&p!;>8xAlwoxUC3DQ#!31ylK%VrcwS<$WeCY4V63V!|221oj+5#r}fGFQ}|uwC0) zNl8(CF}PD`&Sj+p{d!B&&JtC+VuH z#>US`)YQrhb6lIAYb08H22y(?)&L8MIQsA{26X`R5Km{YU)s!x(&gIsjDvq63@X`{ z=7{SiH*_ZsPME#t2m|bS76Uz*z{cpp1m|s}HIX}Ntx#v7Eo!1%G9__4dGSGl`p+xi zZ!VK#Qe;Re=9bqXuW+0DSP{uZ5-QXrNn-7qW19K0qU}OhVru7}3vqsG?#D67 zb}crN;QwsH*vymw(maZr_o|w&@sQki(X+D)gc5Bt&@iXisFG;eH@5d43~Wxq|HO(@ zV-rip4n#PEkHCWCa5d?@cQp^B;I-PzOfag|t-cuvTapQ@MWLmh*41NH`<+A+JGyKX zyYL6Ba7qqa5j@3lOk~`OMO7f0!@FaOeZxkbG@vXP(t3#U*fq8=GAPqUAS>vW2uxMk{a(<0=IxB;# zMW;M+owrHaZBp`3{e@7gJCHP!I(EeyGFF;pdFPdeP+KphrulPSVidmg#!@W`GpD&d z9p6R`dpjaR2E1Eg)Ws{BVCBU9-aCgN57N~uLvQZH`@T+2eOBD%73rr&sV~m#2~IZx zY_8f8O;XLu2~E3JDXnGhFvsyb^>*!D>5EtlKPe%kOLv6*@=Jpci`8h0z?+fbBUg_7 zu6DjqO=$SjAv{|Om5)nz41ZkS4E_|fk%NDY509VV5yNeo%O|sb>7C#wj8mL9cEOFh z>nDz%?vb!h*!0dHdnxDA>97~EoT~!N40>+)G2CeYdOvJr5^VnkGz)et&T9hrD(VAgCAJjQ7V$O?csICB*HFd^k@$M5*v$PZJD-OVL?Ze(U=XGqZPVG8JQ z<~ukO%&%nNXYaaRibq#B1KfW4+XMliC*Tng2G(T1VvP;2K~;b$EAqthc${gjn_P!b zs62UT(->A>!ot}cJXMZHuy)^qfqW~xO-In2);e>Ta{LD6VG2u&UT&a@>r-;4<)cJ9 zjpQThb4^CY)Ev0KR7TBuT#-v}W?Xzj{c7$S5_zJA57Qf=$4^npEjl9clH0=jWO8sX z3Fuu0@S!WY>0XX7arjH`?)I<%2|8HfL!~#c+&!ZVmhbh`wbzy0Ux|Jpy9A{_7GGB0 zadZ48dW0oUwUAHl%|E-Q{gA{z6TXsvU#Hj09<7i)d}wa+Iya)S$CVwG{4LqtB>w%S zKZx(QbV7J9pYt`W4+0~f{hoo5ZG<0O&&5L57oF%hc0xGJ@Zrg_D&lNO=-I^0y#3mxCSZFxN2-tN_mU@7<@PnWG?L5OSqkm8TR!`| zRcTeWH~0z1JY^%!N<(TtxSP5^G9*Vw1wub`tC-F`=U)&sJVfvmh#Pi`*44kSdG};1 zJbHOmy4Ot|%_?@$N?RA9fF?|CywR8Sf(SCN_luM8>(u0NSEbKUy7C(Sk&OuWffj)f za`+mo+kM_8OLuCUiA*CNE|?jra$M=$F3t+h-)?pXz&r^F!ck;r##`)i)t?AWq-9A9 zSY{m~TC1w>HdEaiR*%j)L);H{IULw)uxDO>#+WcBUe^HU)~L|9#0D<*Ld459xTyew zbh5vCg$a>`RCVk)#~ByCv@Ce!nm<#EW|9j><#jQ8JfTmK#~jJ&o0Fs9jz0Ux{svdM4__<1 zrb>H(qBO;v(pXPf5_?XDq!*3KW^4>(XTo=6O2MJdM^N4IIcYn1sZZpnmMAEdt}4SU zPO54j2d|(xJtQ9EX-YrlXU1}6*h{zjn`in-N!Ls}IJsG@X&lfycsoCemt_Ym(PXhv zc*QTnkNIV=Ia%tg%pwJtT^+`v8ng>;2~ps~wdqZSNI7+}-3r+#r6p`8*G;~bVFzg= z!S3&y)#iNSUF6z;%o)%h!ORhE?CUs%g(k2a-d576uOP2@QwG-6LT*G!I$JQLpd`cz z-2=Brr_+z96a0*aIhY2%0(Sz=|D`_v_7h%Yqbw2)8@1DwH4s*A82krEk{ zoa`LbCdS)R?egRWNeHV8KJG0Ypy!#}kslun?67}^+J&02!D??lN~t@;h?GS8#WX`)6yC**~5YNhN_Hj}YG<%2ao^bpD8RpgV|V|GQwlL27B zEuah|)%m1s8C6>FLY0DFe9Ob66fo&b8%iUN=y_Qj;t3WGlNqP9^d#75ftCPA*R4E8 z)SWKBKkEzTr4JqRMEs`)0;x8C35yRAV++n(Cm5++?WB@ya=l8pFL`N0ag`lWhrYo3 zJJ$< zQ*_YAqIGR*;`VzAEx1Pd4b3_oWtdcs7LU2#1#Ls>Ynvd8k^M{Ef?8`RxA3!Th-?ui{_WJvhzY4FiPxA?E4+NFmaC-Uh*a zeLKkkECqy>Qx&1xxEhh8SzMML=8VP}?b*sgT9ypBLF)Zh#w&JzP>ymrM?nnvt!@$2 zh>N$Q>mbPAC2kNd&ab;FkBJ}39s*TYY0=@e?N7GX>wqaM>P=Y12lciUmve_jMF0lY zBfI3U2{33vWo(DiSOc}!5##TDr|dgX1Uojq9!vW3$m#zM_83EGsP6&O`@v-PDdO3P z>#!BEbqpOXd5s?QNnN!p+92SHy{sdpePXHL{d@c6UilT<#~I!tH$S(~o}c#(j<2%! zQvm}MvAj-95Ekx3D4+|e%!?lO(F+DFw9bxb-}rsWQl)b44###eUg4N?N-P(sFH2hF z`{zu?LmAxn2=2wCE8?;%ZDi#Y;Fzp+RnY8fWlzVz_*PDO6?Je&aEmuS>=uCXgdP6r zoc_JB^TA~rU5*geh{G*gl%_HnISMS~^@{@KVC;(aL^ZA-De+1zwUSXgT>OY)W?d6~ z72znET0m`53q%AVUcGraYxIcAB?OZA8AT!uK8jU+=t;WneL~|IeQ>$*dWa#x%rB(+ z5?xEkZ&b{HsZ4Ju9TQ|)c_SIp`7r2qMJgaglfSBHhl)QO1aNtkGr0LUn{@mvAt=}nd7#>7ru}&I)FNsa*x?Oe3-4G`HcaR zJ}c%iKlwh`x)yX1vBB;-Nr=7>$~(u=AuPX2#&Eh~IeFw%afU+U)td0KC!pHd zyn+X$L|(H3uNit-bpn7%G%{&LsAaEfEsD?yM<;U2}WtD4KuVKuX=ec9X zIe*ibp1?$gPL7<0uj*vmj2lWKe`U(f9E{KVbr&q*RsO;O>K{i-7W)8KG5~~uS++56 zm@XGrX@x+lGEjDQJp~XCkEyJG5Y57omJhGN{^2z5lj-()PVR&wWnDk2M?n_TYR(gM zw4kQ|+i}3z6YZq8gVUN}KiYre^sL{ynS}o{z$s&I z{(rWaLXxcQ=MB(Cz7W$??Tn*$1y(7XX)tv;I-{7F$fPB%6YC7>-Dk#=Y8o1=&|>t5 zV_VVts>Eb@)&4%m}!K*WfLoLl|3FW)V~E1Z!yu`Sn+bAP5sRDyu7NEbLt?khAyz-ZyL-}MYb&nQ zU16f@q7E1rh!)d%f^tTHE3cVoa%Xs%rKFc|temN1sa)aSlT*)*4k?Z>b3NP(IRXfq zlB^#G6BDA1%t9^Nw1BD>lBV(0XW5c?l%vyB3)q*;Z5V~SU;HkN;1kA3Nx!$!9wti= zB8>n`gt;VlBt%5xmDxjfl0>`K$fTU-C6_Z;!A_liu0@Os5reMLNk;jrlVF^FbLETI zW+Z_5m|ozNBn7AaQ<&7zk}(jmEdCsPgmo%^GXo>YYt82n&7I-uQ%A;k{nS~VYGDTn zlr3}HbWQG6xu8+bFu^9%%^PYCbkLf=*J|hr>Sw+#l(Y#ZGKDufa#f-f0k-{-XOb4i zwVG1Oa0L2+&(u$S7TvedS<1m45*>a~5tuOZ;3x%!f``{=2QQlJk|b4>NpD4&L+xI+ z+}S(m3}|8|Vv(KYAGyZK5x*sgwOOJklN0jsq|BomM>OuRDVFf_?cMq%B*iQ*&|vS9 zVH7Kh)SjrCBv+FYAE=$0V&NIW=xP>d-s7@wM*sdfjVx6-Y@=~>rz%2L*rKp|*WXIz z*vR^4tV&7MQpS9%{9b*>E9d_ls|toL7J|;srnW{l-}1gP_Qr-bBHt=}PL@WlE|&KH zCUmDLZb%J$ZzNii-5VeygOM?K8e$EcK=z-hIk63o4y63^_*RdaitO^THC{boKstphXZ2Z+&3ToeLQUG(0Frs?b zCxB+65h7R$+LsbmL51Kc)pz_`YpGEzFEclzb=?FJ=>rJwgcp0QH-UuKRS1*yCHsO) z-8t?Zw|6t($Eh&4K+u$I7HqVJBOOFCRcmMMH};RX_b?;rnk`rz@vxT_&|6V@q0~Uk z9ax|!pA@Lwn8h7syrEtDluZ6G!;@=GL> zse#PRQrdDs=qa_v@{Wv(3YjYD0|qocDC;-F~&{oaTP?@pi$n z1L6SlmFU2~%)M^$@C(^cD!y)-2SeHo3t?u3JiN7UBa7E2 z;<+_A$V084@>&u)*C<4h7jw9joHuSpVsy8GZVT;(>lZ(RAr!;)bwM~o__Gm~exd`K zKEgh2)w?ReH&syI`~;Uo4`x4$&X+dYKI{e`dS~bQuS|p zA`P_{QLV3r$*~lb=9vR^H0AxK9_+dmHX}Y} zIV*#65%jRWem5Z($ji{!6ug$En4O*=^CiG=K zp4S?+xE|6!cn$A%XutqNEgUqYY3fw&N(Z6=@W6*bxdp~i_yz5VcgSj=lf-6X1Nz75 z^DabwZ4*70$$8NsEy@U^W67tcy7^lNbu;|kOLcJ40A%J#pZe0d#n zC{)}+p+?8*ftUlxJE*!%$`h~|KZSaCb=jpK3byAcuHk7wk@?YxkT1!|r({P*KY^`u z!hw#`5$JJZGt@nkBK_nwWA31_Q9UGvv9r-{NU<&7HHMQsq=sn@O?e~fwl20tnSBG* zO%4?Ew6`aX=I5lqmy&OkmtU}bH-+zvJ_CFy z_nw#!8Rap5Wcex#5}Ldtqhr_Z$}@jPuYljTosS1+WG+TxZ>dGeT)?ZP3#3>sf#KOG z0)s%{cEHBkS)019}-1A2kd*it>y65-C zh7J9zogM74?PU)0c0YavY7g~%j%yiWEGDb+;Ew5g5Gq@MpVFFBNOpu0x)>Yn>G6uo zKE%z1EhkG_N5$a8f6SRm(25iH#FMeaJ1^TBcBy<04ID47(1(D)q}g=_6#^V@yI?Y&@HUf z`;ojGDdsvRCoTmasXndENqfWkOw=#cV-9*QClpI03)FWcx(m5(P1DW+2-{Hr-`5M{v##Zu-i-9Cvt;V|n)1pR^y ztp3IXzHjYWqabuPqnCY9^^;adc!a%Z35VN~TzwAxq{NU&Kp35m?fw_^D{wzB}4FVXX5Zk@#={6jRh%wx|!eu@Xp;%x+{2;}!&J4X*_SvtkqE#KDIPPn@ z5BE$3uRlb>N<2A$g_cuRQM1T#5ra9u2x9pQuqF1l2#N{Q!jVJ<>HlLeVW|fN|#vqSnRr<0 zTVs=)7d`=EsJXkZLJgv~9JB&ay16xDG6v(J2eZy;U%a@EbAB-=C?PpA9@}?_Yfb&) zBpsih5m1U9Px<+2$TBJ@7s9HW>W){i&XKLZ_{1Wzh-o!l5_S+f$j^RNYo85}uVhN# zq}_mN-d=n{>fZD2Lx$Twd2)}X2ceasu91}n&BS+4U9=Y{aZCgV5# z?z_Hq-knIbgIpnkGzJz-NW*=p?3l(}y3(aPCW=A({g9CpjJfYuZ%#Tz81Y)al?!S~ z9AS5#&nzm*NF?2tCR#|D-EjBWifFR=da6hW^PHTl&km-WI9*F4o>5J{LBSieVk`KO z2(^9R(zC$@g|i3}`mK-qFZ33PD34jd_qOAFj29687wCUy>;(Hwo%Me&c=~)V$ua)V zsaM(aThQ3{TiM~;gTckp)LFvN?%TlO-;$y+YX4i`SU0hbm<})t0zZ!t1=wY&j#N>q zONEHIB^RW6D5N*cq6^+?T}$3m|L{Fe+L!rxJ=KRjlJS~|z-&CC{#CU8`}2|lo~)<| zk?Wi1;Cr;`?02-C_3^gD{|Ryhw!8i?yx5i0v5?p)9wZxSkwn z3C;pz25KR&7{|rc4H)V~y8%+6lX&KN&=^$Wqu+}}n{Y~K4XpI-#O?L=(2qncYNePX zTsB6_3`7q&e0K67=Kg7G=j#?r!j0S^w7;0?CJbB3_C4_8X*Q%F1%cmB{g%XE&|IA7 z(#?AeG{l)s_orNJp!$Q~qGrj*YnuKlV`nVdg4vkTNS~w$4d^Oc3(dxi(W5jq0e>x} z(GN1?u2%Sy;GA|B%Sk)ukr#v*UJU%(BE9X54!&KL9A^&rR%v zIdYt0&D59ggM}CKWyxGS@ z>T#})2Bk8sZMGJYFJtc>D#k0+Rrrs)2DG;(u(DB_v-sVg=GFMlSCx<&RL;BH}d6AG3VqP!JpC0Gv6f8d|+7YRC@g|=N=C2 zo>^0CE0*RW?W))S(N)}NKA)aSwsR{1*rs$(cZIs?nF9)G*bSr%%SZo^YQ|TSz={jX z4Z+(~v_>RH0(|IZ-_D_h@~p_i%k^XEi+CJVC~B zsPir zA0Jm2yIdo4`&I`hd%$Bv=Rq#-#bh{Mxb_{PN%trcf(#J3S1UKDfC1QjH2E;>wUf5= ze8tY9QSYx0J;$JUR-0ar6fuiQTCQP#P|WEq;Ez|*@d?JHu-(?*tTpGHC+=Q%H>&I> z*jC7%nJIy+HeoURWN%3X47UUusY2h7nckRxh8-)J61Zvn@j-uPA@99|y48pO)0XcW zX^d&kW^p7xsvdX?2QZ8cEUbMZ7`&n{%Bo*xgFr4&fd#tHOEboQos~xm8q&W;fqrj} z%KYnnE%R`=`+?lu-O+J9r@+$%YnqYq!SVs>xp;%Q8p^$wA~oynhnvIFp^)Z2CvcyC zIN-_3EUHW}1^VQ0;Oj>q?mkPx$Wj-i7QoXgQ!HyRh6Gj8p~gH22k&nmEqUR^)9qni{%uNeV{&0-H60C zibHZtbV=8=aX!xFvkO}T@lJ_4&ki$d+0ns3FXb+iP-VAVN`B7f-hO)jyh#4#_$XG%Txk6M<+q6D~ zi*UcgRBOoP$7P6RmaPZ2%MG}CMfs=>*~(b97V4+2qdwvwA@>U3QQAA$hiN9zi%Mq{ z*#fH57zUmi)GEefh7@`Uy7?@@=BL7cXbd{O9)*lJh*v!@ z-6}p9u0AreiGauxn7JBEa-2w&d=!*TLJ49`U@D7%2ppIh)ynMaAE2Q4dl@47cNu{9 z&3vT#pG$#%hrXzXsj=&Ss*0;W`Jo^mcy4*L8b^sSi;H{*`zW9xX2HAtQ*sO|x$c6UbRA(7*9=;D~(%wfo(Z6#s$S zuFk`dr%DfVX5KC|Af8@AIr8@OAVj=6iX!~8D_P>p7>s!Hj+X0_t}Y*T4L5V->A@Zx zcm1wN;TNq=h`5W&>z5cNA99U1lY6+!!u$ib|41VMcJk8`+kP{PEOUvc@2@fW(bh5pp6>C3T55@XlpsAd#vn~__3H;Dz2w=t9v&{v*)1m4)vX;4 zX4YAjM66?Z7kD@XX{e`f1t_ZvYyi*puSNhVPq%jeyBteaOHo7vOr8!qqp7wV;)%jtD5>}-a?xavZ;i|2P3~7c)vP2O#Fb`Y&Kce zQNr7%fr4#S)OOV-1piOf7NgQvR{lcvZ*SNbLMq(olrdDC6su;ubp5un!&oT=jVTC3uTw7|r;@&y*s)a<{J zkzG(PApmMCpMmuh6GkM_`AsBE@t~)EDcq1AJ~N@7bqyW_i!mtHGnVgBA`Dxi^P93i z5R;}AQ60wy=Q2GUnSwz+W6C^}qn`S-lY7=J(3#BlOK%pCl=|RVWhC|IDj1E#+|M{TV0vE;vMZLy7KpD1$Yk zi0!9%qy8>CyrcRK`juQ)I};r)5|_<<9x)32b3DT1M`>v^ld!yabX6@ihf`3ZVTgME zfy(l-ocFuZ(L&OM4=1N#Mrrm_<>1DZpoWTO70U8+x4r3BpqH6z@(4~sqv!A9_L}@7 z7o~;|?~s-b?ud&Wx6==9{4uTcS|0-p@dKi0y#tPm2`A!^o3fZ8Uidxq|uz2vxf;wr zM^%#9)h^R&T;}cxVI(XX7kKPEVb);AQO?cFT-ub=%lZPwxefymBk+!H!W(o(>I{jW z$h;xuNUr#^0ivvSB-YEbUqe$GLSGrU$B3q28&oA55l)ChKOrwiTyI~e*uN;^V@g-Dm4d|MK!ol8hoaSB%iOQ#i_@`EYK_9ZEjFZ8Ho7P^er z^2U6ZNQ{*hcEm?R-lK)pD_r(e=Jfe?5VkJ$2~Oq^7YjE^5(6a6Il--j@6dBHx2Ulq z!%hz{d-S~i9Eo~WvQYDt7O7*G9CP#nrKE#DtIEbe_uxptcCSmYZMqT2F}7Kw0AWWC zPjwo0IYZ6klc(h9uL|NY$;{SGm4R8Bt^^q{e#foMxfCSY^-c&IVPl|A_ru!ebwR#7 z3<4+nZL(mEsU}O9e`^XB4^*m)73hd04HH%6ok^!;4|JAENnEr~%s6W~8KWD)3MD*+ zRc46yo<}8|!|yW-+KulE86aB_T4pDgL$XyiRW(OOcnP4|2;v!m2fB7Hw-IkY#wYfF zP4w;k-RInWr4fbz=X$J;z2E8pvAuy9kLJUSl8_USi;rW`kZGF?*Ur%%(t$^{Rg!=v zg;h3@!Q$eTa7S0#APEDHLvK%RCn^o0u!xC1Y0Jg!Baht*a4mmKHy~88md{YmN#x) zBOAp_i-z2h#V~*oO-9k(BizR^l#Vm%uSa^~3337d;f=AhVp?heJ)nlZGm`}D(U^2w z#vC}o1g1h?RAV^90N|Jd@M00PoNUPyA?@HeX0P7`TKSA=*4s@R;Ulo4Ih{W^CD{c8 ze(ipN{CAXP(KHJ7UvpOc@9SUAS^wKo3h-}BDZu}-qjdNlVtp^Z{|CxKOEo?tB}-4; zEXyDzGbXttJ3V$lLo-D?HYwZm7vvwdRo}P#KVF>F|M&eJ44n*ZO~0)#0e0Vy&j00I z{%IrnUvKp70P?>~J^$^0Wo%>le>re2ZSvRfes@dC-*e=DD1-j%<$^~4^4>Id5w^Fr z{RWL>EbUCcyC%1980kOYqZAcgdz5cS8c^7%vvrc@CSPIx;X=RuodO2dxk17|am?HJ@d~Mp_l8H?T;5l0&WGFoTKM{eP!L-a0O8?w zgBPhY78tqf^+xv4#OK2I#0L-cSbEUWH2z+sDur85*!hjEhFfD!i0Eyr-RRLFEm5(n z-RV6Zf_qMxN5S6#8fr9vDL01PxzHr7wgOn%0Htmvk9*gP^Um=n^+7GLs#GmU&a#U^4jr)BkIubQO7oUG!4CneO2Ixa`e~+Jp9m{l6apL8SOqA^ zvrfEUPwnHQ8;yBt!&(hAwASmL?Axitiqvx%KZRRP?tj2521wyxN3ZD9buj4e;2y6U zw=TKh$4%tt(eh|y#*{flUJ5t4VyP*@3af`hyY^YU3LCE3Z|22iRK7M7E;1SZVHbXF zKVw!L?2bS|kl7rN4(*4h2qxyLjWG0vR@`M~QFPsf^KParmCX;Gh4OX6Uy9#4e_%oK zv1DRnfvd$pu(kUoV(MmAc09ckDiuqS$a%!AQ1Z>@DM#}-yAP$l`oV`BDYpkqpk(I|+qk!yoo$TwWr6dRzLy(c zi+qbVlYGz0XUq@;Fm3r~_p%by)S&SVWS+wS0rC9bk^3K^_@6N5|2rtF)wI>WJ=;Fz zn8$h<|Dr%kN|nciMwJAv;_%3XG9sDnO@i&pKVNEfziH_gxKy{l zo`2m4rnUT(qenuq9B0<#Iy(RPxP8R)=5~9wBku=%&EBoZ82x1GlV<>R=hIqf0PK!V zw?{z9e^B`bGyg2nH!^x}06oE%J_JLk)^QyHLipoCs2MWIqc>vaxsJj(=gg1ZSa=u{ zt}od#V;e7sA4S(V9^<^TZ#InyVBFT(V#$fvI7Q+pgsr_2X`N~8)IOZtX}e(Bn(;eF zsNj#qOF_bHl$nw5!ULY{lNx@93Fj}%R@lewUuJ*X*1$K`DNAFpE z7_lPE+!}uZ6c?+6NY1!QREg#iFy=Z!OEW}CXBd~wW|r_9%zkUPR0A3m+@Nk%4p>)F zXVut7$aOZ6`w}%+WV$te6-IX7g2yms@aLygaTlIv3=Jl#Nr}nN zp|vH-3L03#%-1-!mY`1z?+K1E>8K09G~JcxfS)%DZbteGQnQhaCGE2Y<{ut#(k-DL zh&5PLpi9x3$HM82dS!M?(Z zEsqW?dx-K_GMQu5K54pYJD=5+Rn&@bGjB?3$xgYl-|`FElp}?zP&RAd<522c$Rv6} zcM%rYClU%JB#GuS>FNb{P2q*oHy}UcQ-pZ2UlT~zXt5*k-ZalE(`p7<`0n7i(r2k{ zb84&^LA7+aW1Gx5!wK!xTbw0slM?6-i32CaOcLC2B>ZRI16d{&-$QBEu1fKF0dVU>GTP05x2>Tmdy`75Qx! z^IG;HB9V1-D5&&)zjJ&~G}VU1-x7EUlT3QgNT<&eIDUPYey$M|RD6%mVkoDe|;2`8Z+_{0&scCq>Mh3hj|E*|W3;y@{$qhu77D)QJ` znD9C1AHCKSAHQqdWBiP`-cAjq7`V%~JFES1=i-s5h6xVT<50kiAH_dn0KQB4t*=ua zz}F@mcKjhB;^7ka@WbSJFZRPeYI&JFkpJ-!B z!ju#!6IzJ;D@$Qhvz9IGY5!%TD&(db3<*sCpZ?U#1^9RWQ zs*O-)j!E85SMKtoZzE^8{w%E0R0b2lwwSJ%@E}Lou)iLmPQyO=eirG8h#o&E4~eew z;h><=|4m0$`ANTOixHQOGpksXlF0yy17E&JksB4_(vKR5s$Ve+i;gco2}^RRJI+~R zWJ82WGigLIUwP!uSELh3AAs9HmY-kz=_EL-w|9}noKE#(a;QBpEx9 z4BT-zY=6dJT>72Hkz=9J1E=}*MC;zzzUWb@x(Ho8cU_aRZ?fxse5_Ru2YOvcr?kg&pt@v;{ai7G--k$LQtoYj+Wjk+nnZty;XzANsrhoH#7=xVqfPIW(p zX5{YF+5=k4_LBnhLUZxX*O?29olfPS?u*ybhM_y z*XHUqM6OLB#lyTB`v<BZ&YRs$N)S@5Kn_b3;gjz6>fh@^j%y2-ya({>Hd@kv{CZZ2e)tva7gxLLp z`HoGW);eRtov~Ro5tetU2y72~ zQh>D`@dt@s^csdfN-*U&o*)i3c4oBufCa0e|BwT2y%Y~=U7A^ny}tx zHwA>Wm|!SCko~UN?hporyQHRUWl3djIc722EKbTIXQ6>>iC!x+cq^sUxVSj~u)dsY zW8QgfZlE*2Os%=K;_vy3wx{0u!2%A)qEG-$R^`($%AOfnA^LpkB_}Dd7AymC)zSQr z>C&N8V57)aeX8ap!|7vWaK6=-3~ko9meugAlBKYGOjc#36+KJwQKRNa_`W@7;a>ot zdRiJkz?+QgC$b}-Owzuaw3zBVLEugOp6UeMHAKo2$m4w zpw?i%Lft^UtuLI}wd4(-9Z^*lVoa}11~+0|Hs6zAgJ01`dEA&^>Ai=mr0nC%eBd_B zzgv2G_~1c1wr*q@QqVW*Wi1zn=}KCtSwLjwT>ndXE_Xa22HHL_xCDhkM( zhbw+j4uZM|r&3h=Z#YrxGo}GX`)AZyv@7#7+nd-D?BZV>thtc|3jt30j$9{aIw9)v zDY)*fsSLPQTNa&>UL^RWH(vpNXT7HBv@9=*=(Q?3#H*crA2>KYx7Ab?-(HU~a275)MBp~`P)hhzSsbj|d`aBe(L*(;zif{iFJu**ZR zkL-tPyh!#*r-JVQJq>5b0?cCy!uSKef+R=$s3iA7*k*_l&*e!$F zYwGI;=S^0)b`mP8&Ry@{R(dPfykD&?H)na^ihVS7KXkxb36TbGm%X1!QSmbV9^#>A z-%X>wljnTMU0#d;tpw?O1W@{X-k*>aOImeG z#N^x?ehaaQd}ReQykp>i;92q@%$a!y1PNyPYDIvMm& zyYVwn;+0({W@3h(r&i#FuCDE)AC(y&Vu>4?1@j0|CWnhHUx4|zL7cdaA32RSk?wl% zMK^n42@i5AU>f70(huWfOwaucbaToxj%+)7hnG^CjH|O`A}+GHZyQ-X57(WuiyRXV zPf>0N3GJ<2Myg!sE4XJY?Z7@K3ZgHy8f7CS5ton0Eq)Cp`iLROAglnsiEXpnI+S8; zZn>g2VqLxi^p8#F#Laf3<00AcT}Qh&kQnd^28u!9l1m^`lfh9+5$VNv=?(~Gl2wAl zx(w$Z2!_oESg_3Kk0hUsBJ<;OTPyL(?z6xj6LG5|Ic4II*P+_=ac7KRJZ`(k2R$L# zv|oWM@116K7r3^EL*j2ktjEEOY9c!IhnyqD&oy7+645^+@z5Y|;0+dyR2X6^%7GD* zXrbPqTO}O={ z4cGaI#DdpP;5u?lcNb($V`l>H7k7otl_jQFu1hh>=(?CTPN#IPO%O_rlVX}_Nq;L< z@YNiY>-W~&E@=EC5%o_z<^3YEw)i_c|NXxHF{=7U7Ev&C`c^0Z4-LGKXu*Hkk&Av= zG&RAv{cR7o4${k~f{F~J48Ks&o(D@j-PQ2`LL@I~b=ifx3q!p6`d>~Y!<-^mMk3)e zhi1;(YLU5KH}zzZNhl^`0HT(r`5FfmDEzxa zk&J7WQ|!v~TyDWdXQ)!AN_Y%xM*!jv^`s)A`|F%;eGg27KYsrCE2H}7*r)zvum6B{ z$k5Har9pv!dcG%f|3hE(#hFH+12RZPycVi?2y`-9I7JHryMn3 z9Y8?==_(vOAJ7PnT<0&85`_jMD0#ipta~Q3M!q5H1D@Nj-YXI$W%OQplM(GWZ5Lpq z-He6ul|3<;ZQsqs!{Y7x`FV@pOQc4|N;)qgtRe(Uf?|YqZv^$k8On7DJ5>f2%M=TV zw~x}9o=mh$JVF{v4H5Su1pq66+mhTG6?F>Do}x{V(TgFwuLfvNP^ijkrp5#s4UT!~ zEU7pr8aA)2z1zb|X9IpmJykQcqI#(rS|A4&=TtWu@g^;JCN`2kL}%+K!KlgC z>P)v+uCeI{1KZpewf>C=?N7%1e10Y3pQCZST1GT5fVyB1`q)JqCLXM zSN0qlreH1=%Zg-5`(dlfSHI&2?^SQdbEE&W4#%Eve2-EnX>NfboD<2l((>>34lE%) zS6PWibEvuBG7)KQo_`?KHSPk+2P;`}#xEs}0!;yPaTrR#j(2H|#-CbVnTt_?9aG`o z(4IPU*n>`cw2V~HM#O`Z^bv|cK|K};buJ|#{reT8R)f+P2<3$0YGh!lqx3&a_wi2Q zN^U|U$w4NP!Z>5|O)>$GjS5wqL3T8jTn%Vfg3_KnyUM{M`?bm)9oqZP&1w1)o=@+(5eUF@=P~ zk2B5AKxQ96n-6lyjh&xD!gHCzD$}OOdKQQk7LXS-fk2uy#h{ktqDo{o&>O!6%B|)` zg?|JgcH{P*5SoE3(}QyGc=@hqlB5w;bnmF#pL4iH`TSuft$dE5j^qP2S)?)@pjRQZ zBfo6g>c!|bN-Y|(Wah2o61Vd|OtXS?1`Fu&mFZ^yzUd4lgu7V|MRdGj3e#V`=mnk- zZ@LHn?@dDi=I^}R?}mZwduik!hC%=Hcl56u{Wrk1|1SxlgnzG&e7Vzh*wNM(6Y!~m z`cm8Ygc1$@z9u9=m5vs1(XXvH;q16fxyX4&e5dP-{!Kd555FD6G^sOXHyaCLka|8j zKKW^E>}>URx736WWNf?U6Dbd37Va3wQkiE;5F!quSnVKnmaIRl)b5rM_ICu4txs+w zj}nsd0I_VG^<%DMR8Zf}vh}kk;heOQTbl ziEoE;9@FBIfR7OO9y4Pwyz02OeA$n)mESpj zdd=xPwA`nO06uGGsXr4n>Cjot7m^~2X~V4yH&- zv2llS{|und45}Pm1-_W@)a-`vFBpD~>eVP(-rVHIIA|HD@%7>k8JPI-O*<7X{L*Ik zh^K`aEN!BteiRaY82FVo6<^8_22=aDIa8P&2A3V<(BQ;;x8Zs-1WuLRWjQvKv1rd2 zt%+fZ!L|ISVKT?$3iCK#7whp|1ivz1rV*R>yc5dS3kIKy_0`)n*%bfNyw%e7Uo}Mnnf>QwDgeH$X5eg_)!pI4EJjh6?kkG2oc6Af0py z(txE}$ukD|Zn=c+R`Oq;m~CSY{ebu9?!is}01sOK_mB?{lSY33E=!KkKtMeI*FO2b z%95awv9;Z|UDp3xm+aP*5I!R-_M2;GxeCRx3ATS0iF<_Do2Mi)Hk2 zjBF35VB>(oamIYjunu?g0O-?LuOvtfs5F(iiIicbu$HMPPF%F>pE@hIRjzT)>aa=m zwe;H9&+2|S!m74!E3xfO{l3E_ab`Q^tZ4yH9=~o2DUEtEMDqG=&D*8!>?2uao%w`&)THr z^>=L3HJquY>6)>dW4pCWbzrIB+>rdr{s}}cL_?#!sOPztRwPm1B=!jP7lQG|Iy6rP zVqZDNA;xaUx&xUt?Ox|;`9?oz`C0#}mc<1Urs#vTW4wd{1_r`eX=BeSV z_9WV*9mz>PH6b^z{VYQJ1nSTSqOFHE9u>cY)m`Q>=w1NzUShxcHsAxasnF2BG;NQ; zqL1tjLjImz_`q=|bAOr_i5_NEijqYZ^;d5y3ZFj6kCYakJh**N_wbfH;ICXq?-p#r z{{ljNDPSytOaG#7=yPmA&5gyYI%^7pLnMOw-RK}#*dk=@usL;|4US?{@K%7esmc&n z5$D*+l&C9)Bo@$d;Nwipd!68&+NnOj^<~vRcKLX>e03E|;to;$ndgR;9~&S-ly5gf z{rzj+j-g$;O|u?;wwxrEpD=8iFzUHQfl{B>bLHqH(9P zI59SS2PEBE;{zJUlcmf(T4DrcO?XRWR}?fekN<($1&AJTRDyW+D*2(Gyi?Qx-i}gy z&BpIO!NeVdLReO!YgdUfnT}7?5Z#~t5rMWqG+$N2n%5o#Np6ccNly}#IZQsW4?|NV zR9hrcyP(l#A+U4XcQvT;4{#i)dU>HK>aS!k1<3s2LyAhm2(!Nu%vRC9T`_yn9D+r} z1i&U~IcQ?4xhZYyH6WL-f%}qIhZkc&}n2N0PM| z6|XA9d-y;!`D{p;xu*gv7a|zaZ*MiQ)}zPzW4GB0mr)}N-DmB&hl1&x`2@sxN572_ zS)RdJyR%<7kW0v3Q_|57JKy&9tUdbqz}|hwn84}U*0r^jt6Ssrp+#1y=JBcZ+F`f(N?O0XL1OFGN`1-r?S<#t4*C9|y~e)!UYZ zRQ3M8m%~M)VriIvn~XzoP;5qeu(ZI>Y#r zAd)J)G9)*BeE%gmm&M@Olg3DI_zokjh9NvdGbT z+u4(Y&uC6tBBefIg~e=J#8i1Zxr>RT)#rGaB2C71usdsT=}mm`<#WY^6V{L*J6v&l z1^Tkr6-+^PA)yC;s1O^3Q!)Reb=fxs)P~I*?i&j{Vbb(Juc?La;cA5(H7#FKIj0Or zgV0BO{DUs`I9HgQ{-!g@5P^Vr|C4}~w6b=#`Zx0XcVSd?(04HUHwK(gJNafgQNB9Z zCi3TgNXAeJ+x|X|b@27$RxuYYuNSUBqo#uyiH6H(b~K*#!@g__4i%HP5wb<+Q7GSb zTZjJw96htUaGZ89$K_iBo4xEOJ#DT#KRu9ozu!GH0cqR>hP$nk=KXM%Y!(%vWQ#}s zy=O#BZ>xjUejMH^F39Bf0}>D}yiAh^toa-ts#gt6Mk9h1D<9_mGMBhLT0Ce2O3d_U znaTkBaxd-8XgwSp5)x-pqX5=+{cSuk6kyl@k|5DQ!5zLUVV%1X9vjY0gerbuG6nwZu5KDMdq(&UMLZ zy?jW#F6joUtVyz`Y?-#Yc0=i*htOFwQ3`hk$8oq35D}0m$FAOp#UFTV3|U3F>@N?d zeXLZCZjRC($%?dz(41e~)CN10qjh^1CdAcY(<=GMGk@`b1ptA&L*{L@_M{%Vd5b*x#b1(qh=7((<_l%ZUaHtmgq} zjchBdiis{Afxf@3CjPR09E*2#X(`W#-n`~6PcbaL_(^3tfDLk?Nb6CkW9v!v#&pWJ3iV-9hz zngp#Q`w`r~2wt&cQ9#S7z0CA^>Mzm7fpt72g<0y-KT{G~l-@L#edmjZQ}7{*$mLgSdJfS$Ge{hrD=mr;GD)uYq8}xS zT>(w_;}894Kb}(P5~FOpFIEjadhmxD(PsZbKwa-qxVa7Oc7~ebPKMeN(pCRzq8s@l z`|l^*X1eK1+Spz--WkSW_nK`Cs@JmkY4+p=U91nJoy{tSH;TzuIyS)Q_(S@;Iakua zpuDo5W54Mo;jY@Ly1dY)j|+M%$FJ0`C=FW#%UvOd&?p}0QqL20Xt!#pr8ujy6CA-2 zFz6Ex5H1i)c9&HUNwG{8K%FRK7HL$RJwvGakleLLo}tsb>t_nBCIuABNo$G--_j!gV&t8L^4N6wC|aLC)l&w04CD6Vc#h^(YH@Zs4nwUGkhc_-yt{dK zMZ<%$swLmUl8`E~RLihGt@J5v;r;vT&*Q!Cx zZ55-zpb;W7_Q{tf$mQvF61(K>kwTq0x{#Din||)B{+6O#ArLi)kiHWVC4`fOT&B(h zw&YV`J1|^FLx~9Q%r-SFhYl4PywI7sF2Q$>4o50~dfp5nn}XHv-_DM?RGs#+4gM;% znU>k=81G~f6u%^Z{bcX&sUv*h|L+|mNq=W43y@{~C zpL-TW3hYPs0^*OqS#KQwA^CGG_A-6#`_{1LBCD&*3nY0UHWJj1D|VP%oQlFxLllaA zVI@2^)HZ%E*=RbQcFOKIP7?+|_xVK+2oG(t_EGl2y;Ovox zZb^qVpe!4^reKvpIBFzx;Ji=PmrV>uu-Hb>`s?k?YZQ?>av45>i(w0V!|n?AP|v5H zm`e&Tgli#lqGEt?=(?~fy<(%#nDU`O@}Vjib6^rfE2xn;qgU6{u36j_+Km%v*2RLnGpsvS+THbZ>p(B zgb{QvqE?~50pkLP^0(`~K& zjT=2Pt2nSnwmnDFi2>;*C|OM1dY|CAZ5R|%SAuU|5KkjRM!LW_)LC*A zf{f>XaD+;rl6Y>Umr>M8y>lF+=nSxZX_-Z7lkTXyuZ(O6?UHw^q; z&$Zsm4U~}KLWz8>_{p*WQ!OgxT1JC&B&>|+LE3Z2mFNTUho<0u?@r^d=2 z-av!n8r#5M|F%l;=D=S1mGLjgFsiYAOODAR}#e^a8 zfVt$k=_o}kt3PTz?EpLkt54dY}kyd$rU zVqc9SN>0c z753j-gdN~UiW*FUDMOpYEkVzP)}{Ds*3_)ZBi)4v26MQr140|QRqhFoP=a|;C{#KS zD^9b-9HM11W+cb1Y)HAuk<^GUUo(ut!5kILBzAe)Vaxwu4Up!7Ql*#DDu z>EB84&xSrh>0jT!*X81jJQq$CRHqNj29!V3FN9DCx)~bvZbLwSlo3l^zPb1sqBnp) zfZpo|amY^H*I==3#8D%x3>zh#_SBf?r2QrD(Y@El!wa;Ja6G9Y1947P*DC|{9~nO& z*vDnnU!8(cV%HevsraF%Y%2{Z>CL0?64eu9r^t#WjW4~3uw8d}WHzsV%oq-T)Y z0-c!FWX5j1{1##?{aTeCW2b$PEnwe;t`VPCm@sQ`+$$L2=3kBR%2XU1{_|__XJ$xt zibjY2QlDVs)RgHH*kl&+jn*JqquF)k_Ypibo00lcc<2RYqsi-G%}k0r(N97H7JEn7@E3ZTH0JK>d8)E~A-D z!B&z9zJw0Bi^fgQZI%LirYaBKnWBXgc`An*qvO^*$xymqKOp(+3}IsnVhu?YnN7qz zNJxDN-JWd7-vIiv2M9ih>x3gNVY%DzzY~dCnA}76IRl!`VM=6=TYQ=o&uuE8kHqZT zoUNod0v+s9D)7aLJ|hVqL0li1hg)%&MAciI(4YJ=%D4H$fGQ&Lu-?@>>@pEgC;ERrL= zI^cS&3q8fvEGTJZgZwL5j&jp%j9U^Of6pR{wA^u=tVt#yCQepXNIbynGnuWbsC_EE zRyMFq{5DK692-*kyGy~An>AdVR9u___fzmmJ4;^s0yAGgO^h{YFmqJ%ZJ_^0BgCET zE6(B*SzeZ4pAxear^B-YW<%BK->X&Cr`g9_;qH~pCle# zdY|UB5cS<}DFRMO;&czbmV(?vzikf)Ks`d$LL801@HTP5@r><}$xp}+Ip`u_AZ~!K zT}{+R9Wkj}DtC=4QIqJok5(~0Ll&_6PPVQ`hZ+2iX1H{YjI8axG_Bw#QJy`6T>1Nn z%u^l`>XJ{^vX`L0 z1%w-ie!dE|!SP<>#c%ma9)8K4gm=!inHn2U+GR+~ zqZVoa!#aS0SP(|**WfQSe?cA=1|Jwk`UDsny%_y{@AV??N>xWekf>_IZLUEK3{Ksi zWWW$if&Go~@Oz)`#=6t_bNtD$d9FMBN#&97+XKa+K2C@I9xWgTE{?Xnhc9_KKPcujj@NprM@e|KtV_SR+ zSpeJ!1FGJ=Te6={;;+;a46-*DW*FjTnBfeuzI_=I1yk8M(}IwEIGWV0Y~wia;}^dg z{BK#G7^J`SE10z4(_Me=kF&4ld*}wpNs91%2Ute>Om`byv9qgK4VfwPj$`axsiZ)wxS4k4KTLb-d~!7I@^Jq`>?TrixHk|9 zqCX7@sWcVfNP8N;(T>>PJgsklQ#GF>F;fz_Rogh3r!dy*0qMr#>hvSua;$d z3TCZ4tlkyWPTD<=5&*bUck~J;oaIzSQ0E03_2x{?weax^jL3o`ZP#uvK{Z5^%H4b6 z%Kbp6K?>{;8>BnQy64Jy$~DN?l(ufkcs6TpaO&i~dC>0fvi-I^7YT#h?m;TVG|nba%CKRG%}3P*wejg) zI(ow&(5X3HR_xk{jrnkA-hbwxEQh|$CET9Qv6UpM+-bY?E!XVorBvHoU59;q<9$hK z%w5K-SK zWT#1OX__$ceoq0cRt>9|)v}$7{PlfwN}%Wh3rwSl;%JD|k~@IBMd5}JD#TOvp=S57 zae=J#0%+oH`-Av}a(Jqhd4h5~eG5ASOD)DfuqujI6p!;xF_GFcc;hZ9k^a7c%%h(J zhY;n&SyJWxju<+r`;pmAAWJmHDs{)V-x7(0-;E?I9FWK@Z6G+?7Py8uLc2~Fh1^0K zzC*V#P88(6U$XBjLmnahi2C!a+|4a)5Ho5>owQw$jaBm<)H2fR=-B*AI8G@@P-8I8 zHios92Q6Nk-n0;;c|WV$Q);Hu4;+y%C@3alP`cJ2{z~*m-@de%OKVgiWp;4Q)qf9n zJ!vmx(C=_>{+??w{U^Bh|LFJ<6t}Er<-Tu{C{dv8eb(kVQ4!fOuopTo!^x1OrG}0D zR{A#SrmN`=7T29bzQ}bwX8OUufW9d9T4>WY2n15=k3_rfGOp6sK0oj7(0xGaEe+-C zVuWa;hS*MB{^$=0`bWF(h|{}?53{5Wf!1M%YxVw}io4u-G2AYN|FdmhI13HvnoK zNS2fStm=?8ZpKt}v1@Dmz0FD(9pu}N@aDG3BY8y`O*xFsSz9f+Y({hFx;P_h>ER_& z`~{z?_vCNS>agYZI?ry*V96_uh;|EFc0*-x*`$f4A$*==p`TUVG;YDO+I4{gJGrj^ zn?ud(B4BlQr;NN?vaz_7{&(D9mfd z8esj=a4tR-ybJjCMtqV8>zn`r{0g$hwoWRUI3}X5=dofN){;vNoftEwX>2t@nUJro z#%7rpie2eH1sRa9i6TbBA4hLE8SBK@blOs=ouBvk{zFCYn4xY;v3QSM%y6?_+FGDn z4A;m)W?JL!gw^*tRx$gqmBXk&VU=Nh$gYp+Swu!h!+e(26(6*3Q!(!MsrMiLri`S= zKItik^R9g!0q7y$lh+L4zBc-?Fsm8`CX1+f>4GK7^X2#*H|oK}reQnT{Mm|0ar<+S zRc_dM%M?a3bC2ILD`|;6vKA`a3*N~(cjw~Xy`zhuY2s{(7KLB{S>QtR3NBQ3>vd+= z#}Q)AJr7Y_-eV(sMN#x!uGX08oE*g=grB*|bBs}%^3!RVA4f%m3=1f0K=T^}iI&2K zuM2GG5_%+#v-&V>?x4W9wQ|jE2Q7Be8mOyJtZrqn#gXy-1fF1P$C8+We&B*-pi#q5 zETp%H6g+%#sH+L4=ww?-h;MRCd2J9zwQUe4gHAbCbH08gDJY;F6F)HtWCRW1fLR;)ysGZanlz*a+|V&@(ipWdB!tz=m_0 z6F}`d$r%33bw?G*azn*}Z;UMr{z4d9j~s`0*foZkUPwpJsGgoR0aF>&@DC;$A&(av z?b|oo;`_jd>_5nye`DVOcMLr-*Nw&nA z82E8Dw^$Lpso)gEMh?N|Uc^X*NIhg=U%enuzZOGi-xcZRUZmkmq~(cP{S|*+A6P;Q zprIkJkIl51@ng)8cR6QSXJtoa$AzT@*(zN3M+6`BTO~ZMo0`9$s;pg0HE3C;&;D@q zd^0zcpT+jC%&=cYJF+j&uzX87d(gP9&kB9|-zN=69ymQS9_K@h3ph&wD5_!4q@qI@ zBMbd`2JJ2%yNX?`3(u&+nUUJLZ=|{t7^Rpw#v-pqD2_3}UEz!QazhRty%|Q~WCo7$ z+sIugHA%Lmm{lBP#bnu_>G}Ja<*6YOvSC;89z67M%iG0dagOt1HDpDn$<&H0DWxMU zxOYaaks6%R@{`l~zlZ*~2}n53mn2|O&gE+j*^ypbrtBv{xd~G(NF?Z%F3>S6+qcry z?ZdF9R*a;3lqX_!rI(Cov8ER_mOqSn6g&ZU(I|DHo7Jj`GJ}mF;T(vax`2+B8)H_D zD0I;%I?*oGD616DsC#j0x*p+ZpBfd=9gR|TvB)832CRhsW_7g&WI@zp@r7dhg}{+4f=(cO2s+)jg0x(*6|^+6W_=YIfSH0lTcK* z%)LyaOL6em@*-_u)}Swe8rU)~#zT-vNiW(D*~?Zp3NWl1y#fo!3sK-5Ek6F$F5l3| zrFFD~WHz1}WHmzzZ!n&O8rTgfytJG*7iE~0`0;HGXgWTgx@2fD`oodipOM*MOWN-} zJY-^>VMEi8v23ZlOn0NXp{7!QV3F1FY_URZjRKMcY(2PV_ms}EIC^x z=EYB5UUQ{@R~$2Mwiw$_JAcF+szKB*n(`MYpDCl>~ss54uDQ%Xf-8|dgO zY)B_qju=IaShS|XsQo=nSYxV$_vQR@hd~;qW)TEfU|BA0&-JSwO}-a*T;^}l;MgLM zz}CjPlJX|W2vCzm3oHw3vqsRc3RY=2()}iw_k2#eKf&VEP7TQ;(DDzEAUgj!z_h2Br;Z3u=K~LqM6YOrlh)v9`!n|6M-s z?XvA~y<5?WJ{+yM~uPh7uVM&g-(;IC3>uA}ud?B3F zelSyc)Nx>(?F=H88O&_70%{ATsLVTAp88F-`+|egQ7C4rpIgOf;1tU1au+D3 zlz?k$jJtTOrl&B2%}D}8d=+$NINOZjY$lb{O<;oT<zXoAp01KYG$Y4*=)!&4g|FL(!54OhR-?)DXC&VS5E|1HGk8LY;)FRJqnz zb_rV2F7=BGwHgDK&4J3{%&IK~rQx<&Kea|qEre;%A~5YD6x`mo>mdR)l?Nd%T2(5U z_ciT02-zt_*C|vn?BYDuqSFrk3R(4B0M@CRFmG{5sovIq4%8AhjXA5UwRGo)MxZlI zI%vz`v8B+#ff*XtGnciczFG}l(I}{YuCco#2E6|+5WJ|>BSDfz0oT+F z%QI^ixD|^(AN`MS6J$ zXlKNTFhb>KDkJp*4*LaZ2WWA5YR~{`={F^hwXGG*rJYQA7kx|nwnC58!eogSIvy{F zm1C#9@$LhK^Tl>&iM0wsnbG7Y^MnQ=q))MgApj4)DQt!Q5S`h+5a%c7M!m%)?+h65 z0NHDiEM^`W+M4)=q^#sk(g!GTpB}edwIe>FJQ+jAbCo#b zXmtd3raGJNH8vnqMtjem<_)9`gU_-RF&ZK!aIenv7B2Y0rZhon=2yh&VsHzM|`y|0x$Zez$bUg5Nqj?@~^ zPN43MB}q0kF&^=#3C;2T*bDBTyO(+#nZnULkVy0JcGJ36or7yl1wt7HI_>V7>mdud zv2II9P61FyEXZuF$=69dn%Z6F;SOwyGL4D5mKfW)q4l$8yUhv7|>>h_-4T*_CwAyu7;DW}_H zo>N_7Gm6eed=UaiEp_7aZko@CC61@(E1be&5I9TUq%AOJW>s^9w%pR5g2{7HW9qyF zh+ZvX;5}PN0!B4q2FUy+C#w5J?0Tkd&S#~94(AP4%fRb^742pgH7Tb1))siXWXHUT z1Wn5CG&!mGtr#jq6(P#!ck@K+FNprcWP?^wA2>mHA03W?kj>5b|P0ErXS) zg2qDTjQ|grCgYhrH-RapWCvMq5vCaF?{R%*mu}1)UDll~6;}3Q*^QOfj!dlt02lSzK z?+P)02Rrq``NbU3j&s*;<%i4Y>y9NK&=&KsYwvEmf5jwTG6?+Pu1q9M8lLlx)uZZ7 zizhr~e0ktGs-=$li-2jz^_48-jk**y&5u0`B2gc#i$T1~t+AS*kEfR*b{^Ec>2-F~ zKYRl&uQ5yO@EtAZX8ZSqx;8+AKf+CqhlUSpp*VfyBMv+%wxN5GukZEi^_to%MFRc0 zdXqJ*jk?#uYT6EJe446@(f6G4vhnxQP|pGeJ?-#|Ksq?g*ky=}x+Qnx+!<>Y(XStN zQIND`{KU}&l)E*ntI^}kJ=ly8DML{!(58Xk4_bzIc@v~e;>wKl_`7G%pGz~4KH*CTp;_|52)d!+ximd$|8v@zzEq%j68QXkgf$7eM~xdM5q5i z{?qFx_W|eq@L03bWJfjy^z@()-iCjzjREuf zb_a(yTz)ZKWCF%Lp>^2-%Q?*t{06}x#DLN3cO=i>h6#-a`z;<5rBGGM6GA(WqvRcX%Pn?Uvs1#e|ePSNJEC%+X(YI$x)`s$%>O#%}D9dgqWfq4yfVz^%FglokdFR}uJQhx|}_w`9Ulx38Ha>ZslKs58c-@IFI&f;?xM zbK>rKNfPFsf>%+k6%(A6=7Aac^_qrOCNqb3ZVJ;8pt!?1DR*ynJb#@II9h?)xB)A~ zm9Kk)Hy}!Z+W}i6ZJDy+?yY_=#kWrzgV)2eZAx_E=}Nh7*#<&mQz`Umfe$+l^P(xd zN}PA2qII4}ddCU+PN+yxkH%y!Qe(;iH3W%bwM3NKbU_saBo<8x9fGNtTAc_SizU=o zC3n2;c%LoU^j90Sz>B_p--Fzqv7x7*?|~-x{haH8RP)p|^u$}S9pD-}5;88pu0J~9 zj}EC`Q^Fw}`^pvAs4qOIuxKvGN@DUdRQ8p-RXh=3S#<`3{+Qv6&nEm)uV|kRVnu6f zco{(rJaWw(T0PWim?kkj9pJ)ZsUk9)dSNLDHf`y&@wbd;_ita>6RXFJ+8XC*-wsiN z(HR|9IF283fn=DI#3Ze&#y3yS5;!yoIBAH(v}3p5_Zr+F99*%+)cp!Sy8e+lG?dOc zuEz<;3X9Z5kkpL_ZYQa`sioR_@_cG z8tT~GOSTWnO~#?$u)AcaBSaV7P~RT?Nn8(OSL1RmzPWRWQ$K2`6*)+&7^zZBeWzud z*xb3|Fc~|R9eH+lQ#4wF#c;)Gka6lL(63C;>(bZob!i8F-3EhYU3|6-JBC0*5`y0| zBs!Frs=s!Sy0qmQNgIH|F`6(SrD1js2prni_QbG9Sv@^Pu2szR9NZl8GU89gWWvVg z2^-b*t+F{Nt>v?js7hnlC`tRU(an0qQG7;h6T~ z-`vf#R-AE$pzk`M{gCaia}F`->O2)60AuGFAJg> z*O2IZqTx=AzDvC49?A92>bQLdb&32_4>0Bgp0ESXXnd4B)!$t$g{*FG%HYdt3b3a^J9#so%BJMyr2 z{y?rzW!>lr097b9(75#&4&@lkB1vT*w&0E>!dS+a|ZOu6t^zro2tiP)bhcNNxn zbJs3_Fz+?t;4bkd8GfDI7ccJ5zU`Bs~ zN~bci`c`a%DoCMel<-KUCBdZRmew`MbZEPYE|R#|*hhvhyhOL#9Yt7$g_)!X?fK^F z8UDz)(zpsvriJ5aro5>qy`Fnz%;IR$@Kg3Z3EE!fv9CAdrAym6QU82=_$_N5*({_1 z7!-=zy(R{xg9S519S6W{HpJZ8Is|kQ!0?`!vxDggmslD59)>iQ15f z7J8NqdR`9f8H|~iFGNsPV!N)(CC9JRmzL9S}7U-K@`X893f3f<8|8Ls!^eA^#(O6nA+ByFIXcz_WLbfeG|nHJ5_sJJ^gNJ%SI9#XEfNRbzV+!RkI zXS$MOVYb2!0vU}Gt7oUy*|WpF^*orBot~b2J@^be?Gq;U%#am8`PmH-UCFZ&uTJlnetYij0z{K1mmivk$bdPbLodu;-R@@#gAV!=d%(caz$E?r zURX0pqAn7UuF6dULnoF1dZ$WM)tHAM{eZK6DbU1J`V5Dw<;xk}Nl`h+nfMO_Rdv z3SyOMzAbYaD;mkxA7_I_DOs#Bk;e5D%gsS3q)hlmi1w{FsjKNJE22`AjmNiAPRnIc zcIkN25;rOn3FipAFd(PnlK9{03w6Q<(68#1Jw`{axEGQE{Ac>^U$h);h2ADICmaNxrfpb`Jdr*)Y1SicpYKCFv$3vf~;5aW>n^7QGa63MJ z;B1+Z>WQ615R2D8JmmT`T{QcgZ+Kz1hTu{9FOL}Q8+iFx-Vyi}ZVVcGjTe>QfA`7W zFoS__+;E_rQIQxd(Bq4$egKeKsk#-9=&A!)(|hBvydsr5ts0Zjp*%*C0lM2sIOx1s zg$xz?Fh?x!P^!vWa|}^+SY8oZHub7f;E!S&Q;F?dZmvBxuFEISC}$^B_x*N-xRRJh zn4W*ThEWaPD*$KBr8_?}XRhHY7h^U1aN6>m=n~?YJQd8+!Uyq_3^)~4>XjelM&!c9 zCo|0KsGq7!KsZ~9@%G?i>LaU7#uSTMpypocm*oqJHR|wOgVWc7_8PVuuw>x{kEG4T z$p^DV`}jUK39zqFc(d5;N+M!Zd3zhZN&?Ww(<@AV-&f!v$uV>%z+dg9((35o@4rqLvTC-se@hkn^6k7+xHiK-vTRvM8{bCejbU;1@U=*r}GTI?Oc$!b6NRcj83-zF; z=TB#ESDB`F`jf4)z=OS76Se}tQDDHh{VKJk#Ad6FDB_=afpK#pyRkGrk~OuzmQG)} z*$t!nZu$KN&B;|O-aD=H<|n6aGGJZ=K9QFLG0y=Jye_ElJFNZJT;fU8P8CZcLBERjioAOC0Vz_pIXIc};)8HjfPwNy zE!g|lkRv3qpmU?shz(BBt5%TbpJC3HzP9!t7k*Fh48!-HlJ4TTgdCr3rCU!iF}kgu z4Qs;K@XOY~4f~N}Jl8V_mGbwzvNLbl&0e9UG4W;kvjTK|5`-Ld+eQ6YRF`N0ct%u% z^3J_{7r#_W1zm|>IPN!yWCRrN)N!7v`~ptNkIXKipQ6ogFvcnI5ugxdoa{d;uD67g zgo^}QuZRkB540Vc!@c80(wFG=$ct}oHq(#W0+-XX(;Rrt`x=<45X}ficNtI2(&}=~ zb(!}tNz?s`wm{gK?2tdf+OEF;tzx<(3fMd7_tM@Ghs$Z(Os-H(kYq#qB|J-aC9Ku?fsWwJhB36c)A zu|a7ZF?V8X7l2g5~xqZf>2=6Dsi5lfo zKIRL&@MLJyaBE)V_9=pJYu%U2wxR*-(0MI5_|yqP`?h@cks(5LR@XUKLMI_xuVtiu zRvpDS8MyUMRFM6`P+Sjc!A_e^H38Qu7b{b7QZ>NHyA6k-YYygQuW&C_OGO(7V7?}r)zedSVpBI zuk29Z4GW3C0GpfozbZQya454sjt@ndQmsp=DA&@sWw&xmOlDk1JIcMNp~-ES$&A~k zG#W(6hBj?!Fu8Q4WYexoSBa8_5=v20xnx6H?e;$t)5|f&{7=vOye^&3_c-Ug?|a@e z=X`&qT_5B7N9vZoPBhXOTEDV;4&x2Je4}T(UB~O-$D#CjX77$R?RZ*`ed~$G;$4YS z4n*|Pop(!NN79Hk2}U#cfEEwdxM)xQm}$~rV03xc=#U@@Y*}qEmot5KvDb=8{!E-n zl4p?}&g2h^sUGyTcGh=0aQzQb*k;K;dvbeZUgmwEv>%#(EPtj=gHKdi|E8@w+|>KC zxEU>b>P+9Xf}pEyQK(}#QrBG4Jaf!iE!qpMbTu>gb!gtdq<`@xO+roQl+S_7)!G(% zdy)$iGmJ1cwP?F=IyyV1-$|kf|EKM3B@I&lZ%NI@VV;*mQdLWjc#t|Vbk_Q~>&O03 zIcSr$(qLAINj7a z;!||v&1D5SX#X@5jNd}jUsi-CH_Scjyht&}q2p*CJCC-`&NyXf)vD5{e!HO629D-O z%bZelTcq=DoRX>zeWCa^RmR3*{x9;3lZ75M#S)!W0bRIFH#P6b%{|HRSZ5!!I#s)W z_|XXZQ<0_`>b^^0Z>LU64Yg1w)8}#M^9se(OZ9~baZ7fsKFc;EtnB>kesci#>=icG zuHdjax2^=!_(9?0l7;G7^-}9>Y#M zm;9*GT~dBuYWdk49%mZM0=H#FY1)}7NE5DE_vsqrA0`?0R0q535qHjWXcl|gz9Fq$ zMKxgL;68l!gm3y0durIr3LHv~y*ABm` zYhQG0UW#hg@*A{&G!;$FS43}rIF$e6yRdGJWVR<}uuJ_5_8qa3xaHH^!VzUteVp;> z<0`M>3tnY$ZFb$(`0sg93TwGyP;`9UYUWxO&CvAnSzei&ap))NcW;R`tA=y^?mBmG+M*&bqW5kL$V(O;(p)aEk`^ci?2Jwxu>0sy>a7+Wa9t z5#I2o;+gr^9^&km^z7>xJWbN&Ft>Vna34E zI@BBzwX)R}K3SL?)enrDJ45QLt;-7CFJk{`cF3L4Z^CtG_r5)0)HV>BOYPIUh#D%| zYQAu31f{bm-D*`_k7DTTr?Nkw_gY%J1cb2&TdtibY?V=|SSIOlA;|5C!2@?YQ z-$?G0jj^mG|MP>DmbF7}T~C$H6=CpZ~hd zZ1C|xV@=h#^~`3LSCnmI(vZ|5r3>eq5*UB)dhdy``*gKY3Eg%jSK8I-`G+OWWlD)T zt$wSQ=||lSkiKy}YF-k}@W9EiS?)z`hK{R!dd-$BCJvBtAN-yXn3njU$MisEtp!?Q z%Vk-*(wy9dd15(-WFw_&^tT;;IpF?ox1`Qq3-0zVTk+$W_?q}GfAQlPcrB^?&tWSI z2BB!K=sH7FUYmXa_dcV^Z3>5z8}~W{S!$jVR_3hu_|wl2|gmRH8ftn^z@fW75*;-`;wU+fY+BR_yx6BZnE5_Hna({jrPiubRp$jZ=T=t$hx&NeCV1!vuCcl4PJ0p0Fjp>6K} zHkoD1gQk=P2hYcT%)cJ2Q5WuA|5_x+dX0%hnozfTF>$#Wz~X!MY>){H4#fB#7^ID* z1*o2Hzp}?WVs&gbS?Uq(CT0sP+F)u9{xfgg6o_{8J#m;|NeJqDHhb(Q8%z8aM_qeM zn83>d`uDd47WIuKp78JBYo2SYupGcNXIzeou^eMY`@%Bv8elZ>q~3uq#~IX)g%g;h zoUXymEd>|kVsMkyb&1l~lrE-`w(0PObapYa35DJ4Y03Jv_!DKp}0HTbOgZRM=;PSsuAJJJ1 zItc+tu9;ANG;qHaCI|T85!euhFK~VK^G2LZV1+cbzS?>ar@>emg;JTI5VAn1g5U~| zU=p&k0OlSzc$U=s#9_uL3&n|6A1X$XvrE9vFV@`A4G#!D1QcFCeE`F2N(deJx>)*A z$XIW0P~-NbAd=5i6`s<~(vAQX9t$dbVqc5|E|CHRtb$1(l&KSNh_t2#k_l95KnP86 z)ns_DGspv-M0z0#h2a+*oH|{5~j{ zXGD=}cLrBSESQ0u$XmQlFfWMCAWaS;wKK%#aSSYK=qljBiY(s zT$v;We24&$w=avIILsMt0%1fDyah|AlLNg#WL$Lu)tf}YfqO%+pH~QC*bZO4aM*i9 zrPFf|5!hv@XY8CzaFh*Dy9vH|2fKKr(@x}`L#9^*vOae|lk`adG#oZZAyk|TOV8`9L zc-sQu%y1MQes&J?)a1}Zc*>-P!6j-T#75V$lLC!TuMB(!G-+D2;XptUxymSPFI-K&0x}B1?h$ z3-9**-9!);fwyiWB5gS$i;P~c=^}5-6G@{4TWDBRDc6(M|%qa-mS`z`u9kWo{Xl_uc;hXOkRd literal 0 HcmV?d00001 diff --git a/js/react_native/example/android/gradle/wrapper/gradle-wrapper.properties b/js/react_native/e2e/android/gradle/wrapper/gradle-wrapper.properties similarity index 80% rename from js/react_native/example/android/gradle/wrapper/gradle-wrapper.properties rename to js/react_native/e2e/android/gradle/wrapper/gradle-wrapper.properties index 57c966f75cae0..442d9132ea328 100644 --- a/js/react_native/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/js/react_native/e2e/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Jan 26 22:27:34 PST 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip diff --git a/js/react_native/e2e/android/gradlew b/js/react_native/e2e/android/gradlew new file mode 100755 index 0000000000000..fbd7c515832da --- /dev/null +++ b/js/react_native/e2e/android/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/js/react_native/e2e/android/gradlew.bat b/js/react_native/e2e/android/gradlew.bat new file mode 100644 index 0000000000000..5093609d512a9 --- /dev/null +++ b/js/react_native/e2e/android/gradlew.bat @@ -0,0 +1,104 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/js/react_native/example/android/settings.gradle b/js/react_native/e2e/android/settings.gradle similarity index 60% rename from js/react_native/example/android/settings.gradle rename to js/react_native/e2e/android/settings.gradle index e0ca0eca3ce83..fd02678d9bb4b 100644 --- a/js/react_native/example/android/settings.gradle +++ b/js/react_native/e2e/android/settings.gradle @@ -1,6 +1,3 @@ rootProject.name = 'OnnxruntimeModuleExample' apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' - -include ':onnxruntimereactnative' -project(':onnxruntimereactnative').projectDir = new File(rootProject.projectDir, '../../android') diff --git a/js/react_native/e2e/app.json b/js/react_native/e2e/app.json new file mode 100644 index 0000000000000..3763f86f058e7 --- /dev/null +++ b/js/react_native/e2e/app.json @@ -0,0 +1,4 @@ +{ + "name": "OnnxruntimeModuleExample", + "displayName": "OnnxruntimeModule Example" +} diff --git a/js/react_native/example/babel.config.js b/js/react_native/e2e/babel.config.js similarity index 100% rename from js/react_native/example/babel.config.js rename to js/react_native/e2e/babel.config.js diff --git a/js/react_native/example/index.tsx b/js/react_native/e2e/index.tsx similarity index 100% rename from js/react_native/example/index.tsx rename to js/react_native/e2e/index.tsx diff --git a/js/react_native/example/ios/File.swift b/js/react_native/e2e/ios/File.swift similarity index 100% rename from js/react_native/example/ios/File.swift rename to js/react_native/e2e/ios/File.swift diff --git a/js/react_native/example/ios/MNISTDataHandler.h b/js/react_native/e2e/ios/MNISTDataHandler.h similarity index 100% rename from js/react_native/example/ios/MNISTDataHandler.h rename to js/react_native/e2e/ios/MNISTDataHandler.h diff --git a/js/react_native/example/ios/MNISTDataHandler.mm b/js/react_native/e2e/ios/MNISTDataHandler.mm similarity index 98% rename from js/react_native/example/ios/MNISTDataHandler.mm rename to js/react_native/e2e/ios/MNISTDataHandler.mm index 74477376c1da7..d639ec930daa4 100644 --- a/js/react_native/example/ios/MNISTDataHandler.mm +++ b/js/react_native/e2e/ios/MNISTDataHandler.mm @@ -156,7 +156,7 @@ - (NSDictionary *)postprocess:(NSDictionary *)result { if (maxValue == 0.0f) { detectionResult = [NSMutableString stringWithString:@"No match"]; } else { - detectionResult = [NSMutableString stringWithFormat:@"I guess, it's %d", argmax]; + detectionResult = [NSMutableString stringWithFormat:@"%d", argmax]; } NSDictionary *cookedMap = @{@"result" : detectionResult}; diff --git a/js/react_native/example/ios/OnnxruntimeModuleExample-Bridging-Header.h b/js/react_native/e2e/ios/OnnxruntimeModuleExample-Bridging-Header.h similarity index 100% rename from js/react_native/example/ios/OnnxruntimeModuleExample-Bridging-Header.h rename to js/react_native/e2e/ios/OnnxruntimeModuleExample-Bridging-Header.h diff --git a/js/react_native/example/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj b/js/react_native/e2e/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj similarity index 79% rename from js/react_native/example/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj rename to js/react_native/e2e/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj index 43a2dafa431ba..515550762a424 100644 --- a/js/react_native/example/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj +++ b/js/react_native/e2e/ios/OnnxruntimeModuleExample.xcodeproj/project.pbxproj @@ -12,11 +12,22 @@ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; A769E116237385B138BCB816 /* Pods_OnnxruntimeModuleExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C2AC7C168BAB1163669C38C /* Pods_OnnxruntimeModuleExample.framework */; }; + DB61BA27278684FB0096C971 /* OnnxruntimeModuleExampleUITests.m in Sources */ = {isa = PBXBuildFile; fileRef = DB61BA26278684FB0096C971 /* OnnxruntimeModuleExampleUITests.m */; }; DBA8BA87267293C4008CC55A /* mnist.ort in Resources */ = {isa = PBXBuildFile; fileRef = DBA8BA86267293C4008CC55A /* mnist.ort */; }; DBBF7412263B8C7100487C77 /* MNISTDataHandler.mm in Sources */ = {isa = PBXBuildFile; fileRef = DBBF7411263B8C7100487C77 /* MNISTDataHandler.mm */; }; DBBF7414263B8CCB00487C77 /* 3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = DBBF7413263B8CCB00487C77 /* 3.jpg */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + DB61BA2A278684FB0096C971 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 13B07F861A680F5B00A75B9A; + remoteInfo = OnnxruntimeModuleExample; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ DB8FCD9C25C3404B00C72F26 /* Embed Libraries */ = { isa = PBXCopyFilesBuildPhase; @@ -41,6 +52,8 @@ 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = OnnxruntimeModuleExample/main.m; sourceTree = ""; }; 47F7ED3B7971BE374F7B8635 /* Pods-OnnxruntimeModuleExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OnnxruntimeModuleExample.debug.xcconfig"; path = "Target Support Files/Pods-OnnxruntimeModuleExample/Pods-OnnxruntimeModuleExample.debug.xcconfig"; sourceTree = ""; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = OnnxruntimeModuleExample/LaunchScreen.storyboard; sourceTree = ""; }; + DB61BA24278684FB0096C971 /* OnnxruntimeModuleExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OnnxruntimeModuleExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + DB61BA26278684FB0096C971 /* OnnxruntimeModuleExampleUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OnnxruntimeModuleExampleUITests.m; sourceTree = ""; }; DBA8BA86267293C4008CC55A /* mnist.ort */ = {isa = PBXFileReference; lastKnownFileType = file; name = mnist.ort; path = ../src/mnist.ort; sourceTree = ""; }; DBBF7410263B8C5F00487C77 /* MNISTDataHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MNISTDataHandler.h; sourceTree = ""; }; DBBF7411263B8C7100487C77 /* MNISTDataHandler.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MNISTDataHandler.mm; sourceTree = ""; }; @@ -58,6 +71,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DB61BA21278684FB0096C971 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -109,6 +129,7 @@ DBBF7413263B8CCB00487C77 /* 3.jpg */, 13B07FAE1A68108700A75B9A /* OnnxruntimeModuleExample */, 832341AE1AAA6A7D00B99B32 /* Libraries */, + DB61BA25278684FB0096C971 /* OnnxruntimeModuleExampleUITests */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, 6B9684456A2045ADE5A6E47E /* Pods */, @@ -122,10 +143,19 @@ isa = PBXGroup; children = ( 13B07F961A680F5B00A75B9A /* OnnxruntimeModuleExample.app */, + DB61BA24278684FB0096C971 /* OnnxruntimeModuleExampleUITests.xctest */, ); name = Products; sourceTree = ""; }; + DB61BA25278684FB0096C971 /* OnnxruntimeModuleExampleUITests */ = { + isa = PBXGroup; + children = ( + DB61BA26278684FB0096C971 /* OnnxruntimeModuleExampleUITests.m */, + ); + path = OnnxruntimeModuleExampleUITests; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -151,6 +181,24 @@ productReference = 13B07F961A680F5B00A75B9A /* OnnxruntimeModuleExample.app */; productType = "com.apple.product-type.application"; }; + DB61BA23278684FB0096C971 /* OnnxruntimeModuleExampleUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = DB61BA2E278684FB0096C971 /* Build configuration list for PBXNativeTarget "OnnxruntimeModuleExampleUITests" */; + buildPhases = ( + DB61BA20278684FB0096C971 /* Sources */, + DB61BA21278684FB0096C971 /* Frameworks */, + DB61BA22278684FB0096C971 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + DB61BA2B278684FB0096C971 /* PBXTargetDependency */, + ); + name = OnnxruntimeModuleExampleUITests; + productName = OnnxruntimeModuleExampleUITests; + productReference = DB61BA24278684FB0096C971 /* OnnxruntimeModuleExampleUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -160,9 +208,13 @@ LastUpgradeCheck = 1130; TargetAttributes = { 13B07F861A680F5B00A75B9A = { - DevelopmentTeam = X7YWPPMK53; LastSwiftMigration = 1120; }; + DB61BA23278684FB0096C971 = { + CreatedOnToolsVersion = 13.2.1; + ProvisioningStyle = Automatic; + TestTargetID = 13B07F861A680F5B00A75B9A; + }; }; }; buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "OnnxruntimeModuleExample" */; @@ -179,6 +231,7 @@ projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* OnnxruntimeModuleExample */, + DB61BA23278684FB0096C971 /* OnnxruntimeModuleExampleUITests */, ); }; /* End PBXProject section */ @@ -195,6 +248,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DB61BA22278684FB0096C971 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ @@ -221,7 +281,7 @@ "${PODS_ROOT}/Target Support Files/Pods-OnnxruntimeModuleExample/Pods-OnnxruntimeModuleExample-frameworks.sh", "${BUILT_PRODUCTS_DIR}/DoubleConversion/DoubleConversion.framework", "${BUILT_PRODUCTS_DIR}/FBReactNativeSpec/FBReactNativeSpec.framework", - "${BUILT_PRODUCTS_DIR}/Folly/folly.framework", + "${BUILT_PRODUCTS_DIR}/RCT-Folly/folly.framework", "${BUILT_PRODUCTS_DIR}/RCTTypeSafety/RCTTypeSafety.framework", "${BUILT_PRODUCTS_DIR}/React-Core/React.framework", "${BUILT_PRODUCTS_DIR}/React-CoreModules/CoreModules.framework", @@ -237,8 +297,11 @@ "${BUILT_PRODUCTS_DIR}/React-jsi/jsi.framework", "${BUILT_PRODUCTS_DIR}/React-jsiexecutor/jsireact.framework", "${BUILT_PRODUCTS_DIR}/React-jsinspector/jsinspector.framework", + "${BUILT_PRODUCTS_DIR}/React-logger/logger.framework", + "${BUILT_PRODUCTS_DIR}/React-perflogger/reactperflogger.framework", "${BUILT_PRODUCTS_DIR}/ReactCommon/ReactCommon.framework", "${BUILT_PRODUCTS_DIR}/Yoga/yoga.framework", + "${BUILT_PRODUCTS_DIR}/fmt/fmt.framework", "${BUILT_PRODUCTS_DIR}/glog/glog.framework", ); name = "[CP] Embed Pods Frameworks"; @@ -261,8 +324,11 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/jsi.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/jsireact.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/jsinspector.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/logger.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/reactperflogger.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ReactCommon.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/yoga.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fmt.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/glog.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -324,8 +390,24 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DB61BA20278684FB0096C971 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB61BA27278684FB0096C971 /* OnnxruntimeModuleExampleUITests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + DB61BA2B278684FB0096C971 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 13B07F861A680F5B00A75B9A /* OnnxruntimeModuleExample */; + targetProxy = DB61BA2A278684FB0096C971 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; @@ -334,7 +416,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = X7YWPPMK53; + DEVELOPMENT_TEAM = ""; ENABLE_BITCODE = NO; INFOPLIST_FILE = OnnxruntimeModuleExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; @@ -358,7 +440,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = X7YWPPMK53; + DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = OnnxruntimeModuleExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( @@ -487,6 +569,60 @@ }; name = Release; }; + DB61BA2C278684FB0096C971 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = ai.onnxruntime.reactnative.OnnxruntimeModuleExampleUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = OnnxruntimeModuleExample; + }; + name = Debug; + }; + DB61BA2D278684FB0096C971 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu11; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.2; + MARKETING_VERSION = 1.0; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = ai.onnxruntime.reactnative.OnnxruntimeModuleExampleUITests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = OnnxruntimeModuleExample; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -508,6 +644,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + DB61BA2E278684FB0096C971 /* Build configuration list for PBXNativeTarget "OnnxruntimeModuleExampleUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DB61BA2C278684FB0096C971 /* Debug */, + DB61BA2D278684FB0096C971 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; diff --git a/js/react_native/example/ios/OnnxruntimeModuleExample.xcodeproj/xcshareddata/xcschemes/OnnxruntimeModuleExample.xcscheme b/js/react_native/e2e/ios/OnnxruntimeModuleExample.xcodeproj/xcshareddata/xcschemes/OnnxruntimeModuleExample.xcscheme similarity index 87% rename from js/react_native/example/ios/OnnxruntimeModuleExample.xcodeproj/xcshareddata/xcschemes/OnnxruntimeModuleExample.xcscheme rename to js/react_native/e2e/ios/OnnxruntimeModuleExample.xcodeproj/xcshareddata/xcschemes/OnnxruntimeModuleExample.xcscheme index 37863e7f94e6d..97ba7ee3e934c 100644 --- a/js/react_native/example/ios/OnnxruntimeModuleExample.xcodeproj/xcshareddata/xcschemes/OnnxruntimeModuleExample.xcscheme +++ b/js/react_native/e2e/ios/OnnxruntimeModuleExample.xcodeproj/xcshareddata/xcschemes/OnnxruntimeModuleExample.xcscheme @@ -50,9 +50,21 @@ ReferencedContainer = "container:OnnxruntimeModuleExample.xcodeproj"> + + + + + + + +@interface OnnxruntimeModuleExampleUITests : XCTestCase + +@end + +@implementation OnnxruntimeModuleExampleUITests + +- (void)setUp { + self.continueAfterFailure = NO; +} + +- (void)testExample { + XCUIApplication *app = [[XCUIApplication alloc] init]; + [app launch]; + + XCTAssert([app.textFields[@"output"] waitForExistenceWithTimeout:180]); + NSString* value = app.textFields[@"output"].value; + XCTAssertEqualObjects(value, @"Result: 3"); +} + +@end diff --git a/js/react_native/example/ios/Podfile b/js/react_native/e2e/ios/Podfile similarity index 86% rename from js/react_native/example/ios/Podfile rename to js/react_native/e2e/ios/Podfile index d497c6e229de2..a9eeeb7728418 100644 --- a/js/react_native/example/ios/Podfile +++ b/js/react_native/e2e/ios/Podfile @@ -13,6 +13,7 @@ target 'OnnxruntimeModuleExample' do if File.exist?('../../local_pods/onnxruntime-mobile-c.zip') pod 'onnxruntime-mobile-c', :podspec => '../../onnxruntime-mobile-c.podspec' end + #pod 'onnxruntime-react-native', :path => '../node_modules/onnxruntime-react-native' pod 'onnxruntime-react-native', :path => '../..' inherit! :search_paths diff --git a/js/react_native/example/ios/main.jsbundle b/js/react_native/e2e/ios/main.jsbundle similarity index 100% rename from js/react_native/example/ios/main.jsbundle rename to js/react_native/e2e/ios/main.jsbundle diff --git a/js/react_native/example/metro.config.js b/js/react_native/e2e/metro.config.js similarity index 84% rename from js/react_native/example/metro.config.js rename to js/react_native/e2e/metro.config.js index 584afea37647a..56941aa01458c 100644 --- a/js/react_native/example/metro.config.js +++ b/js/react_native/e2e/metro.config.js @@ -1,7 +1,7 @@ 'use strict'; const path = require('path'); -const exclusionList = require('metro-config/src/defaults/exclusionList'); +const exclusionlist = require('metro-config/src/defaults/exclusionList'); const escape = require('escape-string-regexp'); const pak = require('../package.json'); @@ -16,9 +16,9 @@ module.exports = { watchFolders: [root], // We need to make sure that only one version is loaded for peerDependencies - // So we exclusionList them at the root, and alias them to the versions in example's node_modules + // So we exclusionlist them at the root, and alias them to the versions in example's node_modules resolver: { - exclusionListRE: exclusionList( + exclusionlistRE: exclusionlist( modules.map( (m) => new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`) diff --git a/js/react_native/example/package.json b/js/react_native/e2e/package.json similarity index 88% rename from js/react_native/example/package.json rename to js/react_native/e2e/package.json index 9c16435dcd436..5350dc87715cf 100644 --- a/js/react_native/example/package.json +++ b/js/react_native/e2e/package.json @@ -13,8 +13,8 @@ "react-native": "^0.67.2" }, "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/runtime": "^7.12.5", + "@babel/core": "^7.17.0", + "@babel/runtime": "^7.17.0", "babel-plugin-module-resolver": "^4.0.0", "metro-react-native-babel-preset": "^0.67.0" } diff --git a/js/react_native/example/src/3.jpg b/js/react_native/e2e/src/3.jpg similarity index 100% rename from js/react_native/example/src/3.jpg rename to js/react_native/e2e/src/3.jpg diff --git a/js/react_native/example/src/App.tsx b/js/react_native/e2e/src/App.tsx similarity index 71% rename from js/react_native/example/src/App.tsx rename to js/react_native/e2e/src/App.tsx index 220afc1157f49..07d58f26af9b7 100644 --- a/js/react_native/example/src/App.tsx +++ b/js/react_native/e2e/src/App.tsx @@ -1,28 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -import *as React from 'react'; -import{Button, Image, Text, View} from 'react-native'; +import * as React from 'react'; +import{Image, Text, TextInput, View} from 'react-native'; +// onnxruntime-react-native package is installed when bootstraping +// eslint-disable-next-line import/no-extraneous-dependencies import{InferenceSession, Tensor} from 'onnxruntime-react-native'; import MNIST, {MNISTInput, MNISTOutput, MNISTResult, } from './mnist-data-handler'; import{Buffer} from 'buffer'; -interface Duration { -preprocess: - number; -inference: - number; -postprocess: - number; -} - interface State { session: InferenceSession | null; output: string | null; -duration: - Duration | null; imagePath: string | null; } @@ -36,7 +27,6 @@ export default class App extends React.PureComponent<{}, State> { this.state = { session : null, output : null, - duration : null, imagePath : null, }; } @@ -51,6 +41,8 @@ export default class App extends React.PureComponent<{}, State> { const modelPath = await MNIST.getLocalModelPath(); const session : InferenceSession = await InferenceSession.create(modelPath); this.setState({session}); + + void this.infer(); } catch (err) { console.log(err.message); } @@ -60,13 +52,8 @@ export default class App extends React.PureComponent<{}, State> { // Run a model with a given image infer = async() : Promise => { try { - let preprocessTime = 0; - let inferenceTime = 0; - let postprocessTime = 0; - const options : InferenceSession.RunOptions = {}; - let startTime = Date.now(); const mnistInput : MNISTInput = await MNIST.preprocess(this.state.imagePath !); const input : {[name:string] : Tensor} = {}; for (const key in mnistInput) { @@ -77,14 +64,10 @@ export default class App extends React.PureComponent<{}, State> { input[key] = new Tensor(mnistInput[key].type as keyof Tensor.DataTypeMap, tensorData, mnistInput[key].dims); } } - preprocessTime = Date.now() - startTime; - startTime = Date.now(); const output : InferenceSession.ReturnType = await this.state.session !.run(input, this.state.session !.outputNames, options); - inferenceTime = Date.now() - startTime; - startTime = Date.now(); const mnistOutput : MNISTOutput = {}; for (const key in output) { if (Object.hasOwnProperty.call(output, key)) { @@ -96,15 +79,9 @@ export default class App extends React.PureComponent<{}, State> { } } const result : MNISTResult = await MNIST.postprocess(mnistOutput); - postprocessTime = Date.now() - startTime; this.setState({ - output : result.result, - duration : { - preprocess : preprocessTime, - inference : inferenceTime, - postprocess : postprocessTime, - }, + output : result.result }); } catch (err) { console.log(err.message); @@ -112,16 +89,11 @@ export default class App extends React.PureComponent<{}, State> { }; render() : JSX.Element { - const {output, duration, imagePath} = this.state; + const {output, imagePath} = this.state; return ( {'\n'} -