Skip to content

Commit

Permalink
Fix spelling mistakes (RobotLocomotion#18614)
Browse files Browse the repository at this point in the history
  • Loading branch information
williamjallen authored Jan 19, 2023
1 parent ba2dd13 commit c78b95e
Show file tree
Hide file tree
Showing 193 changed files with 248 additions and 246 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ else()
endif()

# To allow the build type to be case-insensitive,
# use this variable for any string comparisions
# use this variable for any string comparisons
string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_LOWER)

string(TOLOWER "${SUPPORTED_BUILD_TYPES}" SUPPORTED_BUILD_TYPES_LOWER)
Expand Down
2 changes: 1 addition & 1 deletion bindings/pydrake/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ drake_py_library(
deps = [":all_py"],
)

# Roll-up for publicly acccessible testing utilities (for development with
# Roll-up for publicly accessible testing utilities (for development with
# workflows like drake-external-examples/drake_bazel_external).
drake_py_library(
name = "test_utilities_py",
Expand Down
2 changes: 1 addition & 1 deletion bindings/pydrake/common/serialize_pybind.h
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ class DefAttributesArchive {
const Docs* const cls_docs_;

// As we visit each field, we'll accumulate a list of [{name=, type=}, ...]
// to bind later as the `__fields__` static propery.
// to bind later as the `__fields__` static property.
py::list fields_;
};

Expand Down
2 changes: 1 addition & 1 deletion bindings/pydrake/common/text_logging_pybind.cc
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ class pylogging_sink final
// We don't pass msg.time along into the record time because we'd need to
// fix up record.created, record.msecs, and record.relativeCreated, and we'd
// still be brittle with respect to future changes to the record class's
// internal bookeeping. Instead, we'll allow the record's own time from its
// internal bookkeeping. Instead, we'll allow the record's own time from its
// constructor to survive.

// Publish the log record.
Expand Down
4 changes: 2 additions & 2 deletions bindings/pydrake/multibody/test/meshcat_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,15 +137,15 @@ def test_joint_sliders(self):
dut.SetPositions(q=[1, 2])

def test_internal_point_contact_visualizer(self):
"""A very basic existance test, since this class is internal use only.
"""A very basic existence test, since this class is internal use only.
The pydrake-internal user (meldis) has additional acceptance tests.
"""
meshcat = Meshcat()
params = ContactVisualizerParams()
dut = _PointContactVisualizer(meshcat=meshcat, params=params)

def test_internal_hydroelastic_contact_visualizer(self):
"""A very basic existance test, since this class is internal use only.
"""A very basic existence test, since this class is internal use only.
The pydrake-internal user (meldis) has additional acceptance tests.
"""
meshcat = Meshcat()
Expand Down
4 changes: 2 additions & 2 deletions bindings/pydrake/pydrake_doxygen.h
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ be named `.doc_deprecated...` instead of just `.doc...`.
@anchor PydrakeDeprecation
## Deprecation
Decorators and utilites for deprecation in pure Python are available in
Decorators and utilities for deprecation in pure Python are available in
[`pydrake.common.deprecation`](https://drake.mit.edu/pydrake/pydrake.common.deprecation.html).
Deprecations for Python bindings in C++ are available in
Expand Down Expand Up @@ -440,7 +440,7 @@ C++ has the ability to distinguish `T` and `const T` for both function arguments
and class methods. However, Python does not have a native mechanism for this. It
is possible to provide a feature like this in Python (see discussion and
prototypes in [#7793](https://github.com/RobotLocomotion/drake/issues/7793));
however, its pros (similarity to C++) have not yet outweighted the cons (awkard
however, its pros (similarity to C++) have not yet outweighted the cons (awkward
non-Pythonic types and workflows).
When a function is overloaded only by its `const`-ness, choose to bind the
Expand Down
2 changes: 1 addition & 1 deletion bindings/pydrake/solvers/test/noscipy_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ def test_linear_constraint(self):
self.assertEqual(dut.num_constraints(), 2)
self.assertEqual(dut.num_vars(), 3)

# UpdateCoefficients is similarily overloaded for sparse or dense, and
# UpdateCoefficients is similarly overloaded for sparse or dense, and
# the user should be able to invoke the dense overload without scipy.
dut.UpdateCoefficients(
new_A=np.array([[1E-10, 0, 0], [0, 1, 1]]),
Expand Down
2 changes: 1 addition & 1 deletion bindings/pydrake/systems/sensors_py.cc
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ PYBIND11_MODULE(sensors, m) {
using ImageTraitsT = ImageTraits<kPixelType>;
using T = typename ImageTraitsT::ChannelType;

// Get associated properites, and iterate.
// Get associated properties, and iterate.
const std::string pixel_type_name = pixel_type_names[pixel_type_index];
++pixel_type_index;

Expand Down
2 changes: 1 addition & 1 deletion bindings/pydrake/systems/test/custom_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ def calc_cache(context, abstract_value):
self.assertIsInstance(cache_entry_value, CacheEntryValue)
data = cache_entry_value.GetMutableValueOrThrow()
self.assertIsInstance(data, SimpleNamespace)
# This has not yet been upated.
# This has not yet been updated.
self.assertFalse(hasattr(data, "updated"))
# Const flavor access.
cache_entry_value_const = cache_entry.get_cache_entry_value(context)
Expand Down
2 changes: 1 addition & 1 deletion bindings/pydrake/test/pydrake_pybind_test.cc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/// @file
/// Test binding helper methods in `pydrake_pybind_test`.
/// @note `check_copy` is defind and documented in
/// @note `check_copy` is defined and documented in
/// `_pydrake_pybind_test_extra.py`.
#include "drake/bindings/pydrake/pydrake_pybind.h"

Expand Down
2 changes: 1 addition & 1 deletion common/ad/internal/standard_operations.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* This file contains free function operators for Drake's AutoDiff type.
The functions provide not only arithmetic (+,-,*,/) and boolean comparison
(<,<=,>,>=,==,!=) but also argument-dependent lookup ("ADL") compatiblity with
(<,<=,>,>=,==,!=) but also argument-dependent lookup ("ADL") compatibility with
the standard library's mathematical functions (abs, etc.)
(See https://en.cppreference.com/w/cpp/language/adl for details about ADL.)
Expand Down
2 changes: 1 addition & 1 deletion common/ad/test/standard_operations_pow_special_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ std::string ToAlphaNumeric(double value) {
return result;
}

// The test case name must be alpha-numeric only (a-z0-9_).
// The test case name must be alphanumeric only (a-z0-9_).
std::string CalcTestName(const testing::TestParamInfo<PowCase>& info) {
return fmt::format("{}__{}",
ToAlphaNumeric(info.param.base),
Expand Down
6 changes: 3 additions & 3 deletions common/copyable_unique_ptr.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@ namespace drake {
3. To allow for future copy-on-write optimizations, there is a distinction
between writable and const access, the get() method is modified to return
only a const pointer, with get_mutable() added to return a writable pointer.
Furthermore, derefencing (operator*()) a mutable pointer will give a mutable
reference (in so far as T is not declared const), and dereferencing a
const pointer will give a const reference.
Furthermore, dereferencing (operator*()) a mutable pointer will give a
mutable reference (in so far as T is not declared const), and dereferencing
a const pointer will give a const reference.
This class is entirely inline and has no computational or space overhead except
when copying is required; it contains just a single pointer and does no
Expand Down
2 changes: 1 addition & 1 deletion common/polynomial.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ namespace drake {
* number of distinct Terms (variables raised to positive integer powers).
*
* Variables are identified by integer indices rather than symbolic names, but
* an automatic facility is provided to covert variable names up to four
* an automatic facility is provided to convert variable names up to four
* characters into unique integers, provided those variables are named using
* only lowercase letters and the "@#_." characters followed by a number. For
* example, valid names include "dx4" and "m_x".
Expand Down
4 changes: 2 additions & 2 deletions common/schema/transform.cc
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ math::RigidTransformd Transform::Mean() const {
env.insert(var, 0.5);
}

// Extract the underlying matrix of the transform, subsitute the env so
// Extract the underlying matrix of the transform, substitute the env so
// that the expressions are now all constants, and then re-create the
// RigidTransform wrapper around the matrix.
const auto to_double = [&env](const auto& x) { return x.Evaluate(env); };
Expand All @@ -65,7 +65,7 @@ math::RigidTransformd Transform::Sample(
// We convert to symbolic, convert the symbolic to a vector and matrix of
// symbolic, `Evaluate` those, convert the result back to a
// `RigidTransform<double>`, and build the resulting values into a new
// fully determinstic `Transform`.
// fully deterministic `Transform`.
//
// This is *much* prettier written with `auto` but please do not be
// tempted to use it here: I have left the long type names in because it
Expand Down
2 changes: 1 addition & 1 deletion common/symbolic/chebyshev_basis_element.cc
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ std::map<ChebyshevBasisElement, double> operator*(
// both a and b.

// Number of variables that show up in both ChebyshevBasisElement a and b.
// I first count the nummber of common variables, so as to do memory
// I first count the number of common variables, so as to do memory
// allocation for the product result.
int num_common_variables = 0;
auto it_a = a.var_to_degree_map().begin();
Expand Down
2 changes: 1 addition & 1 deletion common/symbolic/expression.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/// @file
/// When using Drake's symbolic expressions library (e.g., the classes
/// drake::symbolic::Expression or drake::symbolic::Formula), we provide
/// a single include statement to cover all of he requied classes:
/// a single include statement to cover all of the required classes:
/// `#include <drake/common/symbolic/expression.h>`.

// Delegate the internal implementation details to our subdirectory.
Expand Down
2 changes: 1 addition & 1 deletion common/symbolic/expression/all.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
//
// This particular order ensures that everyone sees the order that respects the
// inter-dependencies of the symbolic headers. This shields us from triggering
// undefined behaviors due to varing the order of template specializations.
// undefined behaviors due to varying the order of template specializations.
//
// clang-format off
#include "drake/common/symbolic/expression/variable.h"
Expand Down
2 changes: 1 addition & 1 deletion common/symbolic/expression/formula.h
Original file line number Diff line number Diff line change
Expand Up @@ -1344,7 +1344,7 @@ namespace numext {
// guards as an optimization to skip expensive computation if it can show
// that the end result will remain unchanged. If our Expression has any
// unbound variables during that guard, we will throw instead of skipping
// the optimizaton. Therefore, we tweak these guards to special-case the
// the optimization. Therefore, we tweak these guards to special-case the
// result when either of the operands is a literal zero, with no throwing
// even if the other operand has unbound variables.
//
Expand Down
4 changes: 2 additions & 2 deletions common/symbolic/polynomial.h
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ class Polynomial {
/// Returns `p / v`.
[[nodiscard]] Polynomial operator/(Polynomial p, double v);

/// Returns polynomial @p rasied to @p n.
/// Returns polynomial @p raised to @p n.
[[nodiscard]] Polynomial pow(const Polynomial& p, int n);

std::ostream& operator<<(std::ostream& os, const Polynomial& p);
Expand Down Expand Up @@ -520,7 +520,7 @@ DRAKE_SYMBOLIC_SCALAR_SUM_DIFF_PRODUCT_CONJ_PRODUCT_TRAITS(
//
// Note that we inform Eigen that the return type of Monomial op Monomial is
// Polynomial, not Monomial, while Monomial * Monomial gets a Monomial in our
// implementation. This discrepency is due to the implementation of Eigen's
// implementation. This discrepancy is due to the implementation of Eigen's
// dot() method whose return type is scalar_product_op::ReturnType. For more
// information, check line 67 of Eigen/src/Core/Dot.h and line 767 of
// Eigen/src/Core/util/XprHelper.h.
Expand Down
2 changes: 1 addition & 1 deletion common/symbolic/test/generic_polynomial_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1746,7 +1746,7 @@ TEST_F(SymbolicGenericPolynomialTest, SetIndeterminates) {

{
// {x} -> {x, a}
// Grow the indeterminates with a varible moves from decision variables
// Grow the indeterminates with a variable moves from decision variables
// to indeterminates.
GenericPolynomial<MonomialBasisElement> p{e, {var_x_}};
const Variables new_indeterminates{var_x_, var_a_};
Expand Down
4 changes: 2 additions & 2 deletions common/symbolic/test/polynomial_basis_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,8 @@ TEST_F(ComputePolynomialBasisUpToDegreeTest, ChebyshevOddParity) {
EXPECT_EQ(result2(0), ChebyshevBasisElement(x_));
}

// The chebyshev basis of x up to requestd degree 3 or 4 (with odd degrees) is
// [T1(x), T3(x)].
// The chebyshev basis of x up to requested degree 3 or 4 (with odd degrees)
// is [T1(x), T3(x)].
for (int degree : {3, 4}) {
const auto result4 =
ComputePolynomialBasisUpToDegree<Eigen::Dynamic, ChebyshevBasisElement>(
Expand Down
2 changes: 1 addition & 1 deletion common/symbolic/trigonometric_polynomial.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ enum class SinCosSubstitutionType {
/** Substitutes s <=> sin(q/2), c <=> cos(q/2), and prefers sin when the
choice is ambiguous; e.g. cos(q) => 1 - 2s². */
kHalfAnglePreferSin,
/** Subsitutes s <=> sin(q/2), c <=> cos(q/2), and prefers cos when the
/** Substitutes s <=> sin(q/2), c <=> cos(q/2), and prefers cos when the
choice is ambiguous; e.g. cos(q) => 2c² - 1. */
kHalfAnglePreferCos,
};
Expand Down
2 changes: 1 addition & 1 deletion common/test/scalar_casting_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ GTEST_TEST(ScalarCastingTest, Casting) {
// const double ad_to_double = ad; // Compile error.
const double ad_to_double = ExtractDoubleOrThrow(ad);
EXPECT_EQ(ad_to_double, 1.0);
// const double sym_to_double = sym; // Compile errror.
// const double sym_to_double = sym; // Compile error.
const double sym_to_double = ExtractDoubleOrThrow(sym);
EXPECT_EQ(sym_to_double, 1.0);
}
Expand Down
2 changes: 1 addition & 1 deletion common/test/type_safe_index_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,7 @@ GTEST_TEST(IntegralComparisons, CompareSizeT) {
}

// Confirms that comparisons with unsigned types that have fewer bits than
// TypeSafeIndex's underlying int report propertly.
// TypeSafeIndex's underlying int report property.
GTEST_TEST(TypeSafeIndex, CompareUnsignedShort) {
TestScalarComparisons<uint16_t>();
TestScalarIncrement<uint16_t>();
Expand Down
2 changes: 1 addition & 1 deletion common/timer.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class Timer {
Timer() = default;
virtual ~Timer() = default;

/// Begins timing. Call Start everytime you want to reset the timer to zero.
/// Begins timing. Call Start every time you want to reset the timer to zero.
virtual void Start() = 0;

/// Obtains a timer measurement in seconds.
Expand Down
2 changes: 1 addition & 1 deletion common/value.h
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ constexpr bool hash_template_argument_from_pretty_func(
continue;
}
// GCC distinguishes between "<unnamed>" and "{anonymous}", while Clang does
// not. Map "<unamed>" to "{anonymous}" for consistency and to avoid
// not. Map "<unnamed>" to "{anonymous}" for consistency and to avoid
// confusion with nested types ("<>") below.
const char* const unnamed_spelling = "<unnamed>";
const char* unnamed_iter = unnamed_spelling;
Expand Down
2 changes: 1 addition & 1 deletion common/yaml/test/yaml_io_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ GTEST_TEST(YamlIoTest, SaveStringDefaults) {
EXPECT_EQ(result, "value:\n save_string_defaults: 1.0\n");
}

// The implemenation of SaveYamlFile calls SaveYamlString, so we only need
// The implementation of SaveYamlFile calls SaveYamlString, so we only need
// to lightly test it (specifically the file-writing function). We'll do
// one test case with minimal arguments (just the filename) and one test
// case with all arguments (to confirm that they are all forwarded).
Expand Down
2 changes: 1 addition & 1 deletion common/yaml/test/yaml_node_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ class YamlNodeParamaterizedTest : public testing::TestWithParam<Param> {
}

// Given a function name, returns the expected exception message in case the
// runtime type of the Node is incorect.
// runtime type of the Node is incorrect.
std::string GetExpectedCannot(std::string_view operation) {
return fmt::format(
".*Cannot.*{}.*on a {}.*",
Expand Down
4 changes: 2 additions & 2 deletions common/yaml/test/yaml_write_archive_defaults_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ TEST_F(YamlWriteArchiveDefaultsTest, DifferentMapValues) {
)""");
}

// In the ununsual case that the user provided two different schemas to
// In the unusual case that the user provided two different schemas to
// subtract, we notice the discrepancy without throwing any exceptions.
// This test case serves to help achieve code coverage; we do not intend
// for users to necessarily depend on this behavior.
Expand All @@ -216,7 +216,7 @@ TEST_F(YamlWriteArchiveDefaultsTest, DifferentSchemas) {
)""");
}

// In the ununsual case that the user provided two different (but similar)
// In the unusual case that the user provided two different (but similar)
// schemas to subtract, we notice the discrepancy without throwing any
// exceptions. This test case serves to help achieve code coverage; we do not
// intend for users to necessarily depend on this behavior. Here, we do
Expand Down
2 changes: 1 addition & 1 deletion common/yaml/yaml_read_archive.h
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ class YamlReadArchive final {
void VariantHelper(
const std::string& tag, const char* name, Variant<Types...>* storage) {
if (tag == internal::Node::kTagNull) {
// Our varaint parsing does not yet support nulls. When the tag indicates
// Our variant parsing does not yet support nulls. When the tag indicates
// null, don't try to match it to a variant type; instead, just parse into
// the first variant type in order to generate a useful error message.
// TODO(jwnimmer-tri) Allow for std::monostate as one of the Types...,
Expand Down
2 changes: 1 addition & 1 deletion doc/_pages/from_binary.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ Download the binary release ``*.tar.gz`` file, using one of the links above.
In the example below, we'll use ``drake.tar.gz`` to refer to it, but your
download will have a more version-specific filename.

Create and activate the envionment:
Create and activate the environment:

```bash
mkdir -p env
Expand Down
4 changes: 2 additions & 2 deletions doc/_release-notes/v0.18.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ New features
* Add DiscreteTimeTrajectory ([#13157][_#13157])
* Improve BsplineBasis and BsplineTrajectory ([#13149][_#13149], [#13057][_#13057], [#13158][_#13158])
* Add PiecewisePolynomial unary minus ([#13109][_#13109])
* Add Subsitute(var, Polynomial) with support for multivariate polynomials ([#13108][_#13108])
* Add Substitute(var, Polynomial) with support for multivariate polynomials ([#13108][_#13108])
* Add Lagrange Interpolating Polynomial and Block(i,j,p,q) ([#13269][_#13269])
* System
* Add support for implicit equations ([#13068][_#13068])
Expand Down Expand Up @@ -140,7 +140,7 @@ Fixes
* Fetch sdformat and ignition_math from GitHub, not Bitbucket ([#13188][_#13188])
* Don't install unused sdformat data ([#13268][_#13268])
* Fix bazel third_party include path complaints ([#13189][_#13189])
* Begin Ubuntu 20.04 (Focal Fossa) accomodations ([#13142][_#13142], [#13235][_#13235], [#13303][_#13303])
* Begin Ubuntu 20.04 (Focal Fossa) accommodations ([#13142][_#13142], [#13235][_#13235], [#13303][_#13303])

## Newly-deprecated APIs

Expand Down
4 changes: 2 additions & 2 deletions doc/_release-notes/v0.23.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ New features
* Optionally suppress simulator initialization events ([#13872][_#13872])
* Add SequentialExpressionManager::GetSequentialExpressionNames ([#13925][_#13925])
* Implement derivatives for PiecewiseQuaternion ([#13972][_#13972])
* Add InverseDynamicsController construtor overload to own the input plant ([#14037][_#14037])
* Add InverseDynamicsController constructor overload to own the input plant ([#14037][_#14037])

Fixes

Expand Down Expand Up @@ -80,7 +80,7 @@ Fixes
New features

* Add API to compute SpatialAccelerationInWorld ([#13773][_#13773])
* Add API to set mass, center of pass, and spatial intertia in a Context ([#13860][_#13860])
* Add API to set mass, center of pass, and spatial inertia in a Context ([#13860][_#13860])
* Add API to set LinearBushingRollPitchYaw parameters in a Context ([#14000][_#14000])
* Add API to get a frame's geometries ([#13999][_#13999])
* Support parsing massless bodies ([#13908][_#13908], [#13927][_#13927])
Expand Down
2 changes: 1 addition & 1 deletion doc/_release-notes/v0.27.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ Newly bound

<!--
Not installed:
* Start gathering sharable performance benchmarking infrastructure ([#14505][_#14505])
* Start gathering shareable performance benchmarking infrastructure ([#14505][_#14505])
* Prepare for Jekyll website conversion ([#14531][_#14531], [#14612][_#14612])
* Minor cleanup ([#14582][_#14582], [#14572][_#14572], [#14563][_#14563], [#14554][_#14554], [#14580][_#14580])
* Define groupings in ``//doc`` to smooth our CI integration ([#14583][_#14583])
Expand Down
2 changes: 1 addition & 1 deletion doc/_release-notes/v0.34.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Fixes

New features

* Add suppport for more constraints and costs to IbexSolver ([#15607][_#15607])
* Add support for more constraints and costs to IbexSolver ([#15607][_#15607])
* For Constraint::CheckSatisfied on symbolic variables, return equality formulae when possible ([#15612][_#15612])
* Support IBEX Solver options ([#15612][_#15612])
* Choose best solver based on program type ([#15541][_#15541])
Expand Down
Loading

0 comments on commit c78b95e

Please sign in to comment.