)]}'
{
  "log": [
    {
      "commit": "e8d02c50d76e278f91455bd90e1db2ae79eac035",
      "tree": "e768a72f0edf6caf3055cd9d7fcb1ef4c032cf1e",
      "parents": [
        "52c8422ea19b5719f8128b85fb01d985bd415c46"
      ],
      "author": {
        "name": "Hyeongseok Kim",
        "email": "hyeongseok@gmail.com",
        "time": "Mon Aug 10 12:11:57 2020 +0900"
      },
      "committer": {
        "name": "Hyeongseok Kim",
        "email": "hyeongseok@gmail.com",
        "time": "Tue Aug 11 08:34:28 2020 +0900"
      },
      "message": "libsparse: Fix overflow of merged sparse chunk length\n\nMerging sparse chunk can make sparse map block bigger than 4GiB,\nthat can\u0027t be covered by unsigned integer type. Fix this by\nchanging unsigned int to uint64_t type.\n\nTest: sparse build\nBug: 162808120\nChange-Id: Id4d3f88f9d531c25c3937c99b2c81efb915605ee\nSigned-off-by: Hyeongseok Kim \u003chyeongseok@gmail.com\u003e\nCc: hyeongseok.kim \u003chyeongseok.kim@lge.com\u003e\n"
    },
    {
      "commit": "a386482f1d2e29e893a59289f71ccdc715472514",
      "tree": "c4322bedbe9e20d7280dc64cb4a733bad426d335",
      "parents": [
        "450e83eb8f2dea14f57ccd63973c27d9523ff73d"
      ],
      "author": {
        "name": "Woody Lin",
        "email": "woodylin@google.com",
        "time": "Wed May 13 20:50:54 2020 +0800"
      },
      "committer": {
        "name": "Woody Lin",
        "email": "woodylin@google.com",
        "time": "Wed Jun 03 11:45:17 2020 +0800"
      },
      "message": "libsparse: Limit block size to 64 MB\n\nLimit the block size to 64 MB before fastboot executable binary for\nwindows 64-bit is released.\n\nBug: 156057250\nChange-Id: Ic4edb963a3d99f718d7630aba3f351729a84e994\n"
    },
    {
      "commit": "45b11d9035b8a8c6289e31db52d0ed840985bd2a",
      "tree": "aeb00b038d41bea65a10a6db699637e7ffcf1d01",
      "parents": [
        "6688eaf23f9126c2f100e7fe848ec5832247d2cd"
      ],
      "author": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Thu May 02 12:54:09 2019 -0700"
      },
      "committer": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Thu May 02 12:54:09 2019 -0700"
      },
      "message": "Fix an unintialized return value.\n\nBug: http://b/131390872\nTest: Built aosp_blueline successfully.\nChange-Id: Iea5255be280dfc089a95fc25a0f988e913c18679\n"
    },
    {
      "commit": "fca4a9c27950a4a4281de0f413280cff9f4da653",
      "tree": "6383a387c5b9cb0fbfa49be34abb27d30d2d82fa",
      "parents": [
        "db69f0d47f3ccb3ff656c56fe2b68aaf5ab853f6"
      ],
      "author": {
        "name": "Tobias Thierer",
        "email": "tobiast@google.com",
        "time": "Thu Jul 26 03:13:45 2018 +0000"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Thu Jul 26 05:23:45 2018 +0000"
      },
      "message": "Revert \"libsparse: Add sparse typed callback\"\n\nThis reverts commit db69f0d47f3ccb3ff656c56fe2b68aaf5ab853f6.\n\nReason for revert: Broke the build:\n\nIn file included from system/core/libsparse/sparse.cpp:26:\nsystem/core/libsparse/output_file.h:34:72: error: unknown type name \u0027off64_t\u0027; did you mean \u0027off_t\u0027?\nint (*skip_write)(void*, off64_t), void* priv,\n^~~~~~~\noff_t\n/Applications/Xcode6.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/_types/_off_t.h:30:25: note: \u0027off_t\u0027 declared here\ntypedef __darwin_off_t off_t;\n^\n1 error generated.\n\nBug: 78793464\nChange-Id: I0f8bc4e9aa2f74612bfd8721d00d961e3f7e695f\n"
    },
    {
      "commit": "db69f0d47f3ccb3ff656c56fe2b68aaf5ab853f6",
      "tree": "e10ad5680b134599df00f4322a82242690940eb7",
      "parents": [
        "1c92fa44800c9d2efd3f2b8f18a3af7e131371be"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Thu Jun 14 16:58:58 2018 -0700"
      },
      "committer": {
        "name": "Hridya Valsaraju",
        "email": "hridya@google.com",
        "time": "Wed Jul 25 11:04:03 2018 -0700"
      },
      "message": "libsparse: Add sparse typed callback\n\nCurrently, sparse_file_callback uses libsparse\u0027s\nown logic for reading a file into a buffer. However,\na caller may want to use their own logic for doing\nthis in order to customize the buffer size and parallelize\nthe reads/writes. Also, a caller may want to implement\nfill blocks with their own logic as well. To do this\nadd sparse_file_typed_callback which calls a different\ncallback function depending on the type of the sparse\nchunk being written.\n\nTest: Use typed callback for fd writes\nBug: 78793464\nChange-Id: I75955a464fc05991f806339830fdfa05fda354b9\n"
    },
    {
      "commit": "17ba95ed9e65099db60e1e14ce6be51e87675707",
      "tree": "e650ef5d7da0621e36ccdc7ca776869831cd2947",
      "parents": [
        "7e7cefa2c7972be72b915512b12bcab1e9f36a36"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Mon Jul 23 16:31:11 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Mon Jul 23 23:32:01 2018 +0000"
      },
      "message": "[libsparse] Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I43dae734817cae7a260ffc7afcd85fbd4451eddf\n"
    },
    {
      "commit": "7b444f08c17ed1b82ea1a1560e109c0a173e700f",
      "tree": "b73fa22396eefbd3e71d151c581ae957383aaf7c",
      "parents": [
        "5a755077958dd4f7fb668a125b57dea8d85cd9a8"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Tue Jun 12 16:42:09 2018 -0700"
      },
      "committer": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Wed Jun 13 20:32:24 2018 +0000"
      },
      "message": "libsparse: Add .clang-format and reformat to google3 style\n\nBug: 78793464\nTest: compiles\nChange-Id: I8e44ba77195a12fc2bac7d4276bbc4aa95149b31\n"
    },
    {
      "commit": "5a755077958dd4f7fb668a125b57dea8d85cd9a8",
      "tree": "cb399ec8b78c7ee4fff1f472908dd207dd26fd75",
      "parents": [
        "50e6029a4e4b9c9bd6065548ced523ec5b01e705"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Tue Jun 12 16:18:53 2018 -0700"
      },
      "committer": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Wed Jun 13 11:17:22 2018 -0700"
      },
      "message": "libsparse: Change source files to cpp\n\nBug: 78793464\nTest: compiles\nChange-Id: Ib8b933fe3ccb8dfa49a77f7955891678bf0df086\n"
    },
    {
      "commit": "e18c03165b3ea86f563e104f44696d5c53f5b6a5",
      "tree": "967bd9f4d4d7fa2c57a8f194e05f47523f32c589",
      "parents": [
        "9249f4bc4148caef423a9cd0139d9e917fb36341"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Mon Apr 23 15:15:40 2018 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Wed Apr 25 10:29:22 2018 -0700"
      },
      "message": "libsparse: Use \u0027size_t\u0027 for the \u0027len\u0027 parameter in callbacks.\n\nThis CL updates the callback function signature in\nsparse_file_callback() and sparse_file_foreach_chunk().\n\nBefore:\nint sparse_file_callback(\n    struct sparse_file *s, bool sparse, bool crc,\n    int (*write)(void *priv, const void *data, int len), void *priv);\n\nint sparse_file_foreach_chunk(\n    struct sparse_file *s, bool sparse, bool crc,\n    int (*write)(\n        void *priv, const void *data, int len, unsigned int block,\n        unsigned int nr_blocks),\n    void *priv);\n\nAfter:\nint sparse_file_callback(\n    struct sparse_file *s, bool sparse, bool crc,\n    int (*write)(void *priv, const void *data, size_t len), void *priv);\n\nint sparse_file_foreach_chunk(\n    struct sparse_file *s, bool sparse, bool crc,\n    int (*write)(\n        void *priv, const void *data, size_t len, unsigned int block,\n        unsigned int nr_blocks),\n    void *priv);\n\nThe length (i.e. \u0027len\u0027) comes from the size of a chunk, which could be\nlegitimately larger than INT_MAX. Prior to this CL, callers (e.g.\nwrite_sparse_data_chunk()) were already passing unsigned int to the\ncallbacks. When a chunk size exceeds INT_MAX, the callback would see a\nnegative value, which could lead to undesired behavior. For example,\nout_counter_write(), as one of the internal callbacks in libsparse,\ngives a wrong sum of chunk sizes, which in turn fails the fastboot\nflashing when given a huge sparse image.\n\nIt also defines SPARSE_CALLBACK_USES_SIZE_T that allows clients to keep\ntheir codes compatibile with both versions.\n\nBug: 78432315\nTest: `m dist` (with matching changes to all the clients)\nTest: Build fastboot and successfully flash a previously failing (huge)\n      sparse image.\nChange-Id: Iac4bcf7b57039d08af3c57f4be00d75f6b693d93\n"
    },
    {
      "commit": "a26a6bd6f36d29cdc959f746b495f79f74c7fad7",
      "tree": "c7fc492b1924ca83bb3839cd5cc92404f0ca2282",
      "parents": [
        "59826ddee5462d1be93176e2dee660c46e413e52"
      ],
      "author": {
        "name": "Adrien Schildknecht",
        "email": "adriens@google.com",
        "time": "Wed Nov 30 11:49:47 2016 -0800"
      },
      "committer": {
        "name": "Adrien Schildknecht",
        "email": "adriens@google.com",
        "time": "Wed Nov 30 19:16:28 2016 -0800"
      },
      "message": "libsparse: add a function to retrieve the data blocks\n\nTest: m libsparse\n\nChange-Id: I04bd3912bb4364e591b064ec2aab782cf02f6bd7\n"
    },
    {
      "commit": "cfd3a03d3d147fca7a33d6f583b7047c5351fc32",
      "tree": "ab6ba56dac1b2de967a248cfb90324d5d2e3ca8a",
      "parents": [
        "27cda9a535c80470e913156e412cbf7e60c3217c"
      ],
      "author": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Fri Apr 03 14:31:19 2015 +0200"
      },
      "committer": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Wed Apr 08 10:10:17 2015 +0200"
      },
      "message": "libsparse: move_chunks_up_to_len() does not account skip chunks\n\nI caught the fastboot host command sending more data than the fastboot\ndevice can accept.  Fastboot host command was sending 36 surplus bytes\nbecause of 3 skip chunks that were not taken into account in\nmove_chunks_up_to_len() algorithm.\n\nChange-Id: I39a4a033c9b15893bd70e553f17116735ee4a48e\n"
    },
    {
      "commit": "9f0d6bdd6691cbe78a3c03e531cb69ec2cc63602",
      "tree": "c58308d6e62627730a875067b7e343c28a409d99",
      "parents": [
        "be9712156bdcf8cff774a78a3afdb0c562998c73"
      ],
      "author": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Sun Feb 22 10:47:16 2015 +0100"
      },
      "committer": {
        "name": "Jeremy Compostella",
        "email": "jeremy.compostella@intel.com",
        "time": "Sun Mar 01 11:54:02 2015 +0100"
      },
      "message": "fastboot/sparse: propagate error code\n\nsparse_file_write_block calls functions that might failed.  This patch\nmakes sparse_file_write_block catch the error code and propagate it.\n\nWithout this patch, fastboot crashes on a segmentation fault if\nusb_write() fail during a sparse file image flashing.\n\nChange-Id: If9c0e8dfac8fa380628a2504e13abe8cf7d62726\nSigned-off-by: Jeremy Compostella \u003cjeremy.compostella@intel.com\u003e\n"
    },
    {
      "commit": "8116c8c37aadd83033ffea9e4f5fc86240428e43",
      "tree": "f7542f2184f2f0f889ecd0a380d77be4e9174fd1",
      "parents": [
        "86e3f22b6ae048ba8c9284b4900258c3ccd17cdf"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu May 01 09:15:02 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed May 07 16:56:22 2014 -0700"
      },
      "message": "libsparse: turn on -Werror\n\n- Deal with some -Wunused issues\n\nChange-Id: I9667d74c0dfbe55c625e65b9d44d7c6f861c455d\n"
    },
    {
      "commit": "031a748b2a9bf6dcfd3983d8f0f616718fcddd88",
      "tree": "dc2a7fd3ec03336f02a30cf5e4ace2f5d5491094",
      "parents": [
        "b7a4868e1cad6a878c94077bc48b414c965cb516"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Feb 27 16:56:15 2014 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Feb 28 08:08:01 2014 -0800"
      },
      "message": "libsparse: deal with build warning messages\n\n- mostly unused parameters, added defs.h to hold __unused macro\n- read_all prototype not included, added output_file.h to acquire\n\nChange-Id: Ib7ee00614acab53a6bd6a64f7e26a8c13dbe6297\n"
    },
    {
      "commit": "f1ec8ac84a8540b92a16f187bfa92b2f3c63917e",
      "tree": "1e2133a96b43a76d8b9dc7f9c795001ed09c4f53",
      "parents": [
        "ec7d9dc713322bd41b1e348c0ea3b1304a13dba9"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 23 17:09:42 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 23 17:11:29 2012 -0700"
      },
      "message": "libsparse: fix 32 bit overflow when calculating last chunk\n\nlast_block * s-\u003eblock_size can overflow when writing large filesystems,\ncast to 64 bits before multiplying.\n\nChange-Id: I3e54097852ce7d0fd271eab53d65e666284898e4\n"
    },
    {
      "commit": "b43828b247fd4f1e0373584de0504004c69eeac9",
      "tree": "57141bc0f9b57cb3c7da4106e9276452da30ef90",
      "parents": [
        "317a09e2d47257df5e0972c85f14c2a6ffdbbfd2"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Jun 08 16:55:35 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: rename symbols that conflict with libext4_utils\n\nUntil ext4_utils switches to using libsparse, libext4_utils defines some\nof the same symbols as libsparse.  Fastboot links statically against\nboth of them, and there is no easy way to make the symbols hidden, so\njust rename them in libsparse.\n\nChange-Id: Idc2cfe20efe3c3a7fb8233f453a89bbbeb0dcc8b\n"
    },
    {
      "commit": "317a09e2d47257df5e0972c85f14c2a6ffdbbfd2",
      "tree": "1d16d24323042aa16d0994c05de22e2e043f6668",
      "parents": [
        "bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu May 24 17:15:43 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add sparse_file_len\n\nAdd sparse_file_len, which will compute the size of data that would\nbe produced if sparse_file_write was called.  Useful combined with\nsparse_file_callback.\n\nChange-Id: I1a156d1071760f5559483954a5c62ffc20298703\n"
    },
    {
      "commit": "bdc6d39ed6c09199a5d806f29b71b44cbb27c5c2",
      "tree": "63fb3d31d9afc8ccc9c5a6ec96ddfcadb6a96f69",
      "parents": [
        "1e17b313a6257b7b5081e178e81435c09d60378e"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed May 02 15:18:22 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add function to resparse a file and a utility to use it\n\nAdd sparse_file_repsarse, which splits chunks in an existing sparse\nfile such that the maximum size of a chunk, plus a header and footer,\nis smaller than the given size.  This will allow multiple smaller\nsparse files to result in the same data as a large sparse file.\n\nChange-Id: I177abdb958a23d5afd394ff265c5b0c6a3ff22fa\n"
    },
    {
      "commit": "1e17b313a6257b7b5081e178e81435c09d60378e",
      "tree": "aea5379ca96c99ec14f1c5c8dc202b7b5b36ca47",
      "parents": [
        "b4cd267db30c152245e6308598e0066d87c5c55d"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon May 21 16:35:45 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add callback output file type\n\nAdd a new output file subclass that will call a callback for\neach block as it is written.  Will be used to measure the space\nused by each sparse block to allow resparsing files.\n\nAlso add sparse_file_callback, which will write out a sparse\nfile by calling the provided write function.\n\nChange-Id: I18707bd9c357b68da319cc07982e93d1c2b2bee2\n"
    },
    {
      "commit": "be8ddcb35a459481c0bcf5bfe645c1fefe963f5c",
      "tree": "f3ab4517291fd1a8fc6c75d8670ba3cd3015be11",
      "parents": [
        "a21930b6b0dbb04a52948566d58fb48c6db58bab"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Apr 25 21:02:16 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: merge adjacent blocks of the same type\n\nWhen a block is added that is adjacent to another block and of the same\ntype, merge it.  This will be useful for converting regular images to\nsparse images, allowing the reader to add a single block at a time and\nletting libsparse optimize into larger blocks as it goes.\n\nDoes not support merge two blocks that are backed by a data pointer,\nonly blocks that are backed by a file for now.\n\nChange-Id: I95aa231714cbe01ac194e868c21385806c0bdb97\n"
    },
    {
      "commit": "a21930b6b0dbb04a52948566d58fb48c6db58bab",
      "tree": "e74cfb32ad232c3b99364cd0931502519ca72111",
      "parents": [
        "9e1f17e926fa20255c5f4b4d2f68aa98a964253a"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Apr 26 14:24:35 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add error reporting functions\n\nChange-Id: I2f21355b6c5339d1d724b4c121ea30d575b2d366\n"
    },
    {
      "commit": "9e1f17e926fa20255c5f4b4d2f68aa98a964253a",
      "tree": "142907cdec91851c3e162bdfc23638df9a0d675b",
      "parents": [
        "b55dceea986ab24f8b836b5116b389ed619c816e"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Apr 25 18:31:39 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: add support for including fds\n\nAdd sparse_file_add_fd to include all or part of the contents\nof an fd in the output file.  Will be useful for re-sparsing files\nwhere fd will point to the input sparse file.\n\nChange-Id: I5d4ab07fb37231e8e9c1912f62a2968c8b0a00ef\n"
    },
    {
      "commit": "b55dceea986ab24f8b836b5116b389ed619c816e",
      "tree": "aa4f4ed6384931ec362c70eca7b25a7cb8dab450",
      "parents": [
        "411619e921904b896eddae81c086c1f687c8304d"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Apr 24 23:07:49 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:37 2012 -0700"
      },
      "message": "libsparse: cleanups\n\nMove block loops into sparse.c with iterator helpers in backed_block.c.\nSimplify chunk writing by moving skip chunk calls from output_file.c to\nsparse.c.\nRename variables to be consistent with new naming.\nRemove use of u8, u32, u64.\n\nChange-Id: Ic138ad58bef9f96239266ccee12ee83ea285e7eb\n"
    },
    {
      "commit": "411619e921904b896eddae81c086c1f687c8304d",
      "tree": "d7b7f2f18b42c0aa6974e6d21c38109a01af3a48",
      "parents": [
        "28fa5bc347390480fe190294c6c385b6a9f0d68b"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Apr 24 18:51:42 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:36 2012 -0700"
      },
      "message": "libsparse: remove static variables\n\nRemoves static variables in backed_block.c to allow multiple\nsparse files to be open at the same time.\n\nChange-Id: I012d8a424c6e21a7352408416adb7c72ee8add21\n"
    },
    {
      "commit": "28fa5bc347390480fe190294c6c385b6a9f0d68b",
      "tree": "59189cf41baf263befeba392fc5bab814740eab1",
      "parents": [
        "2177c79bddc66e295599d87007d4cbec549e1cac"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Sun May 20 13:28:05 2012 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Jul 09 22:09:36 2012 -0700"
      },
      "message": "system/core: move libsparse into system/core\n\nThis moves an exact copy of libsparse from\nsystem/extras/ext4_utils/libsparse to system/core/libsparse in\npreparation for linking tools in system/core against it.\n\nChange-Id: If664e4fcfd6612844ac745589beb1517e7f9fe58\n"
    }
  ]
}
