blender/extern/libmv/third_party/ceres/ChangeLog

647 lines
23 KiB
Plaintext
Raw Normal View History

commit 8c62487e437b91d3d354cd1ae8957e43fe540732
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Fri May 16 09:44:18 2014 -0700
2014-01-13 19:17:54 +00:00
Preparations for 1.9.0 release.
2014-01-13 19:17:54 +00:00
Version bump.
minor docs update.
2014-01-13 19:17:54 +00:00
Change-Id: I2fbe20ba4af6b2e186fe244c96ce6d6464fe0469
2014-01-13 19:17:54 +00:00
commit 0831275a78ab65e4c95979598cb35c54d03d3185
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Fri May 16 08:17:54 2014 -0700
Documentation update.
1. Update iOS build instructions.
2. Update version history.
Change-Id: I49d62e86ecff39190b50c050cb12eef4e2773357
commit c7c7458625996a20203f1366d11bd701e5fb621b
Author: Jack Feng <jackfengji@gmail.com>
Date: Mon May 12 10:23:56 2014 +0800
add support for building for ios
use ios-cmake to build for ios
Change-Id: I6b17c33339f3121322a4004d79629b22a62f7a94
commit 36c2ce87d13b9b7123bd0473b8b45fb3b6ae4271
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date: Mon Jan 13 21:18:08 2014 +0600
Libmv 2D homography estimation example application
Add an example application of homography matrix estimation
from a 2D euclidean correspondences which is done in two
steps:
- Coarse algebraic estimation
- Fine refinement using Ceres minimizer
Nothing terribly exciting apart from an example of how to
use user callbacks.
User callback is used here to stop minimizer when average
of symmetric geometric distance becomes good enough.
This might be arguable whether it's the best way to go
(in some cases you would want to stop minimizer when
maximal symmetric distance is lower than a threshold) but
for a callback usage example it's good enough to stick
to current logic.
Change-Id: I60c8559cb10b001a0eb64ab71920c08bd68455b8
commit d99a3a961e4a6ff7218d0ab749da57cf1a1677bd
Author: Björn Piltz <bjornpiltz@gmail.com>
Date: Wed May 7 14:59:12 2014 +0200
Separate PUBLIC and PRIVATE library dependencies
Do not propagate 3d party libs through
IMPORTED_LINK_INTERFACE_LIBRARIES_[DEBUG/RELEASE] mechanism
when building shared libraries. SuiteSparse, lapack & co
are considered private. Glog still gets propagated since
it is part of the public interface. See documentation of
TARGET_LINK_LIBRARIES().
Change-Id: If0563b0c705b102876f5190e9a86694d10f79283
commit 1c089e8453583876f417b214f76a5863d7694986
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Tue May 13 16:58:25 2014 -0700
Notational fix in modeling.rst by William Rucklidge.
Change-Id: Iffa127541380fcc32da13fe4ac474692e1e3d0ec
commit 082d9e2a1b43b26a81157a6c711de0ff34c40ba4
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Mon May 12 20:41:27 2014 -0700
Add iOS.cmake from the ios-cmake project.
URL: https://github.com/cristeab/ios-cmake
Commit: 86dc085f0d5ed955cd58e2657cc3efc7c1aabbc8
Change-Id: I8fe6023d4cb6655b5a724e8b695fdae87ce3b685
commit a97056c9752fe7223c8560da58862ecb1fd241ad
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Tue May 13 16:45:36 2014 -0700
Various documentation fixes from William Rucklidge.
Change-Id: I102e98f41f4b5fe2a84d1224d5ed7517fdfdb022
commit 2f8fb218f0a08102231ace07ef02b34b4aad7336
Author: Alex Stewart <alexs.mac@gmail.com>
Date: Tue May 13 20:57:39 2014 +0100
Adding function to update CMake cache variables and preserve help.
- Previously we were replicating the same two lines to update a cache
variable whilst preserving its help string.
- This commit adds a function which wraps up this common operation into
a single line.
Change-Id: Ic78a5adf5d59262bbbcec1e353ded7620391e862
commit 8f4dcb25f1be74a8c12c0f9eeb67b6b0755563f5
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Tue Apr 29 21:40:57 2014 -0700
Documentation update.
Update modeling.rst and solving.rst to reflect
changes to the API.
Change-Id: Id1a8adfed1486f08e5fd67c5af2d29708a26490c
commit d48e7050225730f61eaef851def5b43bc439e991
Author: Alex Stewart <alexs.mac@gmail.com>
Date: Sat May 10 08:58:58 2014 +0100
Configure config.h and include it from the build directory.
- Previously we overwrote the default (empty) config.h in the source
tree with a configured config.h, generated using the current compile
options.
- This was undesirable as it could lead to inadvertant commits of the
generated config.h.
- This patch moves the default config.h to <src>/config/ceres/internal,
separate from the other headers, thus if Ceres is compiled without
CMake this directory will now also have to be included. This
directory is _not_ added to the CMake include directories for Ceres
(thus the default config.h is never used when compiling with CMake).
- When using CMake, the generated config.h is now placed in
<build>/config/ceres/internal, which is in turn added to the include
directories for Ceres when it is compiled, and the resulting config.h
is copied to ceres/internal when installed.
Change-Id: Ib1ba45e66e383ade2ebb08603af9165c1df616f2
commit 11c496164ffe9809306945c2b81276efcd51533d
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Fri May 9 16:27:03 2014 -0700
Fix 80cols violation in local_parameterization.h
Change-Id: I07f59baa9e4aba7c5ae028f0c144ea9ad153d49a
commit af3154422b63b7792ecd23b00ca1a0c003764dae
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Fri May 9 05:45:03 2014 -0700
Add Alex Stewart as a maintainer.
Update contributing.rst to mention Alex
as one of the people who can be added
as a reviewer.
Change-Id: I30ff3e635e8c419e11e8f20394aaea5f284a10d5
commit ea765850685f1ff0431da5212656378fc20d3673
Author: Alex Stewart <alexs.mac@gmail.com>
Date: Wed May 7 20:46:17 2014 +0100
Adding autogenerated Ceres config.h to #define Ceres compile options.
- Previously we passed all compile options to Ceres via add_definitions
in CMake. This was fine for private definitions (used only by Ceres)
but required additional work for public definitions to ensure they
were correctly propagated to clients via CMake using
target_compile_definitions() (>= 2.8.11) or add_definitions().
- A drawback to these approaches is that they did not work for chained
dependencies on Ceres, as in if in the users project B <- A <- Ceres,
then although the required Ceres public compile definitions would
be used when compiling A, they would not be propagated to B.
- This patch replaces the addition of compile definitions via
add_definitions() with an autogenerated config.h header which
is installed with Ceres and defines all of the enabled Ceres compile
options.
- This removes the need for the user to propagate any compile
definitions in their projects, and additionally allows post-install
inspect of the options with which Ceres was compiled.
Change-Id: Idbdb6abdad0eb31e7540370e301afe87a07f2260
commit cbf955474acf8f275b272da6ff5acd3a629cc806
Author: Björn Piltz <bjornpiltz@gmail.com>
Date: Wed May 7 17:10:15 2014 +0200
Fixes swapped verboselevel and condition.
Change-Id: I296d86e6bbf415be4bfd19d6a0fe0963e3d36d74
commit 3209b045744ea31f38d74bd9e9c8f88e605e7f76
Author: Björn Piltz <bjornpiltz@gmail.com>
Date: Wed May 7 17:02:27 2014 +0200
Fixed warning : 'va_copy' : macro redefinition
MSVC 2013 has got va_copy
Compare
http://msdn.microsoft.com/en-us/library/kb57fad8(v=vs.110).aspx
and
http://msdn.microsoft.com/en-us/library/kb57fad8.aspx.
Change-Id: If0937c76e8d250cde4b343844f3d35c980bf0921
commit 1df2f0f5d704f0cc458cf707e2602d495979e3c6
Author: Björn Piltz <bjornpiltz@gmail.com>
Date: Wed May 7 11:10:30 2014 +0200
Removed MSVC warnings
These are warnings which show up when using Ceres.
Change-Id: Id1f382f46b8a60743f0b12535b5b3cdf46f988e0
commit eca7e1c635581834c858794e09c1e876323b7775
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Tue May 6 10:16:19 2014 -0700
Remove BlockRandomAccessCRSMatrix.
It is not used anywhere.
Change-Id: I2a8ebbdacf788582f21266825ead3f76646da29e
commit 7088a08f5d9e04e75a5a4c3823ef7927e13ff0e4
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Mon May 5 09:02:05 2014 -0700
Fix some 80col violations and reflow the comments in cmake.in file.
Change-Id: I4c65c89b794845aeef69159a03350c727e2ee812
commit 95cce0834d5a2d72568e6d2be968a51c244c2787
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Mon May 5 08:54:50 2014 -0700
Remove some errant tabs.
Change-Id: Ie1f7051e99bcb15ad068711b68a9d8f317b12ed7
commit a536ae76dfa2dbe2bc487900b98cf6c15276c649
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Sun May 4 21:18:42 2014 -0700
Lazily initialize the bounds arrays in ParameterBlock.
Problems that do not use bounds do not have to pay the
price of storing bounds constraints.
Also replace the raw pointer access to the upper and
lower bounds arrays with accessors which hides the
lazy initialization from the user.
Change-Id: I0325a35de9c29f853559f891e32e7c777686e537
commit 633b50b7af9841607c07133f585e131fba7de177
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Fri May 2 22:46:20 2014 -0700
Add the (2,4,8) template specialization.
Change-Id: I058bcebdd1725031d573404133b184d6f27dc005
commit 5ffe06019a6c741ee7edc940ffeeceaaeabfa05d
Author: Alex Stewart <alexs.mac@gmail.com>
Date: Thu May 1 12:06:46 2014 +0100
Export Ceres compile definitions to targets compiled against Ceres.
- Previously all Ceres compile definitions were private to Ceres, that
is they were not exported to users via the CMake export mechanism.
- Now that we use compile definitions in public (installed) Ceres
headers, we need to export the Ceres compile definitions.
- If we did not do this, then the client's code 'see's' a different
version of the Ceres headers to those which were in fact compiled,
or in the case of shared_ptr, may not find the required header.
- This patch makes use of the new, in CMake 2.8.11, function:
target_compile_definitions() to export all of the Ceres compile
definitions using CMake's export functionality.
- For CMake versions < 2.8.11, we have to use the blunter instrument of
calling add_definitions() in CeresConfig.cmake (invoked by a call to
find_package(Ceres)). This is messy because it ends up adding the
Ceres compile definitions to any target declared in the user's code
after the call to find_package(Ceres). Although this should do no
harm as all of our defines are prefaced with CERES_, so any
unintentional name clashes are unlikely.
Change-Id: I5dea80949190eaf4fb08ea4ac568ce28c32dd4e0
commit 0e811b0881f1f21df0ae04fd745ae4ba5189cac1
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Thu May 1 07:54:12 2014 -0700
Fix a bug in Minimizer::RunCallbacks.
Solver::Summary::message was not being updated when the solver
terminated because of a user's iteration callback indicating
success or failure.
Thanks to Sergey Sharybin for reporting this.
Change-Id: I27e6e5eed086920ddf765461b0159417ac79d7b3
commit 31b503792611d2119bb1acb3528fc8d58c5bd029
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Wed Apr 30 15:02:38 2014 -0700
Lint cleanup from William Rucklidge.
Change-Id: If545f114c1a2b07edd660a3c71ecfc16ffa25e43
commit 15c1210a8bdf3e936b4ef600d75f0fbb70878fb5
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Tue Apr 29 08:12:19 2014 -0700
Lint cleanup from Jim Roseborough.
Change-Id: I53f4e0d020602443b397387b8c5908f25649403d
commit b1668067f1c97520d5d28eecf2c11d2afc1b01b3
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Tue Apr 29 08:12:19 2014 -0700
Variety of changes to documentation and example code.
1. Update version history.
2. Minor changes to the tutorial to reflect the bounds constrained
problem.
3. Added static factory methods to the SnavelyReprojectionError.
4. Removed relative gradient tolerance from types.h as it is
not true anymore.
Change-Id: I8de386e5278a008c84ef2d3290d2c4351417a9f1
commit 658407dacc351a999206980fbb3265099e50e7a3
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Mon Apr 28 13:25:17 2014 -0700
Add missing template specializations to the NDK build.
Change-Id: I42bb6c3bd47648050298472af80333aa900e79bf
commit 5d7eed87b47871bc882af765188fa4fbca976855
Author: Björn Piltz <bjornpiltz@gmail.com>
Date: Wed Apr 23 22:13:37 2014 +0200
Suppport for MSVC DLLs.
Change-Id: Ibbcc4ba4e59f5bbf1cb91fe81c7d3b9042d03493
commit c830820a5c2be0d0cecb0822f2cff8b4ffe88f36
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Mon Apr 28 10:28:24 2014 -0700
Add missing files to Android.mk
Change-Id: Ibdf577c592bcde0fe5c2ce343ed8e9028b82af8f
commit ceb7a3beaad140762b499f9a306fd7230715941a
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date: Mon Apr 28 13:50:09 2014 +0600
Fix compilation error when using G++ compiler
This compiler defines shared_ptr in std::tr1 namespace, but
for this <tr1/memory> is to be included. Further, this compiler
also does have <memory> header which confused previous shared
pointer check.
Simplified logic around defines now, so currently we've got:
- CERES_TR1_MEMORY_HEADER defined if <tr1/memory> is to be
used for shared_ptr, otherwise <memory> is to be used.
- CERES_TR1_SHARED_PTR defined if shared_ptr is defined in
std::tr1 namespace, otherwise it's defined in std namespace.
All the shared_ptr checks are now moved to own file FindSharedPtr
which simplifies main CMakeLists.
Change-Id: I558a74793baaa0bd088801910a356be4ef17c31b
commit 02db9414fb6739857a37e268500083a0546cd0a3
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Mon Apr 28 08:32:51 2014 -0700
Fix the documentation for RandNormal.
As pointed out by Jim Roseborough, this is the Marsaglia Polar
method and not the Box-Muller method.
Change-Id: Id5332bcd4b4c23a3885cc296729b44eaa5edd0a8
commit 32530788d08c53f8d2c8a5f9bd61aa60a23d6e03
Author: Richard Stebbing <richie.stebbing@gmail.com>
Date: Sat Apr 26 07:42:23 2014 +0100
Add dynamic_sparsity option.
The standard sparse normal Cholesky solver assumes a fixed
sparsity pattern which is useful for a large number of problems
presented to Ceres. However, some problems are symbolically dense
but numerically sparse i.e. each residual is a function of a
large number of parameters but at any given state the residual
only depends on a sparse subset of them. For these class of
problems it is faster to re-analyse the sparsity pattern of the
jacobian at each iteration of the non-linear optimisation instead
of including all of the zero entries in the step computation.
The proposed solution adds the dynamic_sparsity option which can
be used with SPARSE_NORMAL_CHOLESKY. A
DynamicCompressedRowSparseMatrix type (which extends
CompressedRowSparseMatrix) has been introduced which allows
dynamic addition and removal of elements. A Finalize method is
provided which then consolidates the matrix so that it can be
used in place of a regular CompressedRowSparseMatrix. An
associated jacobian writer has also been provided.
Changes that were required to make this extension were adding the
SetMaxNumNonZeros method to CompressedRowSparseMatrix and adding
a JacobianFinalizer template parameter to the ProgramEvaluator.
Change-Id: Ia5a8a9523fdae8d5b027bc35e70b4611ec2a8d01
commit 2569076ff0bf8ffb3938da8b5df7edc4883aa053
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Fri Apr 25 23:54:48 2014 -0700
More NDK fixes.
Fix variable names in port.h and fix fpclassify when
using gnustl. This was tested by switching to gnustl
in the JNI build.
Thanks to Carlos Hernandez for suggesting the gnustl fixes.
Change-Id: I690b73caf495ccc79061f45288e416da1604cc72
commit e55596f8860a09b12b5e1f949237f15357c1ac59
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Fri Apr 25 16:17:19 2014 -0700
Change the defaults for shared_ptr.
By default shared_ptr is now assumed to be
in the standard <memory> header and in the
std namespace.
Previously the way the ifdefs were structured if the appropriate
variable was not defined, it would default to <t1/memory>.
The new defaults are more future proof.
Change-Id: If457806191196be2b6425b8289ea7a3488a27445
commit bb05be341b8436f611e4b69954a529edcca5b577
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Sun Apr 13 14:22:19 2014 -0700
Solver::Options uses shared_ptr to handle ownership.
Solver::Options::linear_solver_ordering and
Solver::Options::inner_iteration_ordering
were bare pointers even though Solver::Options took ownership of these
objects.
This lead to buggy user code and the inability to copy Solver::Options
objects around.
With this change, these naked pointers have been replaced by a
shared_ptr object which will managed the lifetime of these objects. This
also leads to simplification of the lifetime handling of these objects
inside the solver.
The Android.mk and Application.mk files have also been updated
to use a newer NDK revision which ships with LLVM's libc++.
Change-Id: I25161fb3ddf737be0b3e5dfd8e7a0039b22548cd
commit 8e0991381ea3a2baddea017cd07b333f0c5de595
Author: Joydeep Biswas <joydeep.biswas@gmail.com>
Date: Tue Apr 22 10:40:47 2014 -0400
Added a simplified robotics example for DynamicAutoDiffCostFunction.
Change-Id: I9520e0a9a8d9743285c5114523fbafa6ffa5b0bd
commit cc9d3bba1008066e51502cabd956985c6bdedfe8
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Fri Apr 18 22:58:09 2014 -0700
Remove a comment from conf.py
Change-Id: I675f7e8fc5dd2143eab74901bc7241e02e37285f
commit c4cd29dd7c80ade5b3ac7a1f6ee7df22c8869ab5
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Wed Apr 16 23:40:12 2014 -0700
Merge landing page with introduction.
The existing introduction was a bit redundant and also
was not really an introduction. Also updated the build
instructions to reflect the new reality on Mac OSX.
Also updated the beginning of the tutorial to be a bit
gentler and updated the history to be more consistent
Change-Id: Ife38c1949252cf9f4c6301856957f2d38365f313
commit 46ccfb376ac52ac159f9187e0f7384ef68c1cbdd
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Sat Apr 12 21:56:51 2014 -0700
Cleanup block_structure.h/cc
1. Remove obsolete Proto conversion functions.
2. Fix a strict weak ordering bug.
Change-Id: I1ce6d4b06e29cf475df1d5bd37c79f66f20f8d93
commit 7d489fdb073937ac05c0693c1902fbcb9eeb7dfc
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Mon Apr 7 11:14:51 2014 -0700
Refactor the landing page to be a bit more compact.
Also minor changes to the introduction.
Change-Id: Iaa71f576b95c869f075d6837dbb60ba4bb608ee7
commit 406ac7816730c15425db20d994ac0d60d932ab6c
Author: Keir Mierle <mierle@gmail.com>
Date: Mon Apr 7 08:36:07 2014 +0000
Rework Ceres documentation as new website
This reworks the Ceres Sphinx documentation such that it can
function as the main Ceres website, now hosted at
ceres-solver.org. This also changes to the theme sphinx_rtd_theme
used by Read The Docs; this theme has strong mobile support and is
well enough designed.
Change-Id: I63232d985859a6dac94ff58f08bf81eb2b9e7f99
commit 3e60a998ac970da659d590bac2ff892ee619aa1b
Author: Richard Bowen <rsbowen@google.com>
Date: Tue Apr 1 16:22:49 2014 -0700
Added support and tests: row and column blocks for sparse matrix
transpose.
Change-Id: Ife641b08a9e86826478521a405f21ba60667f0e8
commit 5ecb1c3f1dfde6e8ed4b493eafef7b43dad19e72
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Tue Apr 1 09:20:35 2014 -0700
Add Problem::IsParameterBlockPresent.
This allows the user to query the Problem to see if a
parameter block is already present or not.
Change-Id: If786f6c008cc644f3398597901d718d12a6d865d
commit 75e2232b29ff2ea42c8406c9d45b138a7e7a0048
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Fri Mar 28 11:21:02 2014 -0700
Fix spacing in building.rst
Change-Id: I4c68d732c80d7ff2bdbc812bf0b7c7fb98c43957
commit b555b489b8447434294a8a6676272289140d6a1d
Author: Richard Bowen <rsbowen@google.com>
Date: Thu Mar 27 15:51:28 2014 -0700
Changes documentation to reflect changes in output format.
Change-Id: Ic0ba234283e791edcad29aec067905dcb2130813
commit 1cfb600bfc3be8342f85f155b2b219a595ee58da
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Wed Mar 26 12:55:11 2014 -0700
Add the (2,4,9) template specialization for PartitionedMatrixView
and SchurEliminator.
Also update the comment inside generate_partitioned_matrix_view_specializations.py
Change-Id: I99a7ab4256091b1da48553da3076e5996a5757ed
commit 195e49351b386ffc23020d406883eaa6511e29b3
Author: Alex Stewart <alexs.mac@gmail.com>
Date: Wed Mar 26 11:36:11 2014 +0000
Check validity of residual block before removal in RemoveResidualBlock.
- Breaking change: Problem::Options::enable_fast_parameter_block_removal
is now Problem::Options::enable_fast_removal, as it now controls
the behaviour for both parameter and residual blocks.
- Previously we did not check that the specified residual block to
remove in RemoveResidualBlock actually represented a valid residual
for the problem.
- This meant that Ceres would die unexpectedly if the user passed an
uninitialised residual_block, or more likely attempted to remove a
residual block that had already been removed automatically after
the user removed a parameter block upon on which it was dependent.
- RemoveResidualBlock now verifies the validity of the given
residual_block to remove. Either by checking against a hash set of
all residuals maintained in ProblemImpl iff enable_fast_removal
is enabled. Or by a full scan of the residual blocks if not.
Change-Id: I9ab178e2f68a74135f0a8e20905b16405c77a62b
commit 74762b60332d4a1c08ec5aef75ec718da9d305a2
Author: Alex Stewart <alexs.mac@gmail.com>
Date: Thu Mar 20 14:50:25 2014 +0000
Allow construction of an AutoDiffLocalParameterization with a functor.
- Previously AutoDiffLocalParameterization would internally instantiate
a functor instance whenever one was required. This prohibits the
user passing arguments to the constructor of the functor.
- Now AutoDiffLocalParameterization can take over ownership of an
allocated functor which the user created. This mimics the behaviour
of AutoDiffCostFunction.
Change-Id: I264e1face44ca5d5e71cc20c77cc7654d3f74cc0
commit 4f603fb0d82317a53fa9d96abe6a97b2e69bff36
Author: Sameer Agarwal <sameeragarwal@google.com>
Date: Wed Mar 19 17:16:43 2014 -0700
Grammer fixes from William Rucklidge.
Change-Id: Ia40df7a1d141eb2552694510453d1431bb0c8dce