Merge pull request #373 from apache/avoid_warnings

Avoid warnings
diff --git a/common/include/quantiles_sorted_view_impl.hpp b/common/include/quantiles_sorted_view_impl.hpp
index 326301e..d57cd53 100755
--- a/common/include/quantiles_sorted_view_impl.hpp
+++ b/common/include/quantiles_sorted_view_impl.hpp
@@ -75,7 +75,7 @@
 template<typename T, typename C, typename A>
 auto quantiles_sorted_view<T, C, A>::get_quantile(double rank, bool inclusive) const -> quantile_return_type {
   if (entries_.empty()) throw std::runtime_error("operation is undefined for an empty sketch");
-  uint64_t weight = inclusive ? std::ceil(rank * total_weight_) : rank * total_weight_;
+  uint64_t weight = static_cast<uint64_t>(inclusive ? std::ceil(rank * total_weight_) : rank * total_weight_);
   auto it = inclusive ?
       std::lower_bound(entries_.begin(), entries_.end(), make_dummy_entry<T>(weight), compare_pairs_by_second())
     : std::upper_bound(entries_.begin(), entries_.end(), make_dummy_entry<T>(weight), compare_pairs_by_second());
diff --git a/count/include/count_min.hpp b/count/include/count_min.hpp
index 2f487bd..b394b75 100644
--- a/count/include/count_min.hpp
+++ b/count/include/count_min.hpp
@@ -49,7 +49,7 @@
    * The items inserted into the sketch can be arbitrary type, so long as they are hashable via murmurhash.
    * Only update and estimate methods are added for uint64_t and string types.
    */
-  count_min_sketch(uint8_t num_hashes, uint32_t num_buckets, uint64_t seed = DEFAULT_SEED, const Allocator& allocator = Allocator()) ;
+  count_min_sketch(uint8_t num_hashes, uint32_t num_buckets, uint64_t seed = DEFAULT_SEED, const Allocator& allocator = Allocator());
 
   /**
    * @return configured _num_hashes of this sketch
@@ -88,7 +88,7 @@
    * sketch required in order to obtain the specified relative error.
    * [1] - Section 3 ``Data Structure'', page 6.
    */
-  static uint32_t suggest_num_buckets(double relative_error) ;
+  static uint32_t suggest_num_buckets(double relative_error);
 
   /*
    * @param confidence : double -- the desired confidence with which estimates should be correct.
@@ -98,7 +98,7 @@
    * confidence = 1 - delta, with delta denoting the sketch failure probability in the literature.
    * [1] - Section 3 ``Data Structure'', page 6.
    */
-  static uint8_t suggest_num_hashes(double confidence) ;
+  static uint8_t suggest_num_hashes(double confidence);
 
   /**
    * Specific get_estimate function for uint64_t type
@@ -106,7 +106,7 @@
    * @param item : uint64_t type.
    * @return an estimate of the item's frequency.
    */
-  W get_estimate(uint64_t item) const ;
+  W get_estimate(uint64_t item) const;
 
   /**
    * Specific get_estimate function for int64_t type
@@ -114,7 +114,7 @@
    * @param item : uint64_t type.
    * @return an estimate of the item's frequency.
    */
-  W get_estimate(int64_t item) const ;
+  W get_estimate(int64_t item) const;
 
   /**
    * Specific get_estimate function for std::string type
@@ -132,7 +132,7 @@
    * @return the estimated frequency of the item denoted f_est satisfying
    * f_true - relative_error*_total_weight <= f_est <= f_true
    */
-  W get_estimate(const void* item, size_t size) const ;
+  W get_estimate(const void* item, size_t size) const;
 
   /**
    * Query the sketch for the upper bound of a given item.
@@ -141,8 +141,8 @@
    * f_true <= f_est + relative_error*_total_weight
    */
   W get_upper_bound(const void* item, size_t size) const;
-  W get_upper_bound(int64_t) const ;
-  W get_upper_bound(uint64_t) const ;
+  W get_upper_bound(int64_t) const;
+  W get_upper_bound(uint64_t) const;
   W get_upper_bound(const std::string& item) const;
 
   /**
@@ -151,10 +151,10 @@
    * @return the lower bound for the query result, f_est, on the true frequency, f_est of the item
    * f_true - relative_error*_total_weight <= f_est
    */
-  W get_lower_bound(const void* item, size_t size) const ;
-  W get_lower_bound(int64_t) const ;
-  W get_lower_bound(uint64_t) const ;
-  W get_lower_bound(const std::string& item) const ;
+  W get_lower_bound(const void* item, size_t size) const;
+  W get_lower_bound(int64_t) const;
+  W get_lower_bound(uint64_t) const;
+  W get_lower_bound(const std::string& item) const;
 
   /*
    * Update this sketch with given data of any type.
@@ -164,7 +164,7 @@
    * @param size of the data in bytes
    * @return vector of uint64_t which each represent the index to which `value' must update in the sketch
    */
-  void update(const void* item, size_t size, W weight) ;
+  void update(const void* item, size_t size, W weight);
 
   /**
    * Update this sketch with a given uint64_t item.
@@ -172,10 +172,10 @@
    * @param weight : arithmetic type
    *  void function which inserts an item of type uint64_t into the sketch
    */
-  void update(uint64_t item, W weight) ;
-  void update(uint64_t item) ;
-  void update(int64_t item, W weight) ;
-  void update(int64_t item) ;
+  void update(uint64_t item, W weight);
+  void update(uint64_t item);
+  void update(int64_t item, W weight);
+  void update(int64_t item);
 
   /**
    * Update this sketch with a given string.
@@ -183,13 +183,13 @@
    * @param weight : arithmetic type
    * void function which inserts an item of type std::string into the sketch
    */
-  void update(const std::string& item, W weight) ;
-  void update(const std::string& item) ;
+  void update(const std::string& item, W weight);
+  void update(const std::string& item);
 
   /*
    * merges a separate count_min_sketch into this count_min_sketch.
    */
-  void merge(const count_min_sketch &other_sketch) ;
+  void merge(const count_min_sketch &other_sketch);
 
   /**
    * Returns true if this sketch is empty.
@@ -197,7 +197,7 @@
    * This can only ever happen if all items inserted to the sketch have weights that cancel each other out.
    * @return empty flag
    */
-  bool is_empty() const ;
+  bool is_empty() const;
 
   /**
    * @brief Returns a string describing the sketch
@@ -206,7 +206,7 @@
   string<Allocator> to_string() const;
 
   // Iterators
-  using const_iterator = typename std::vector<W, Allocator>::const_iterator ;
+  using const_iterator = typename std::vector<W, Allocator>::const_iterator;
   const_iterator begin() const;
   const_iterator end() const;
 
@@ -308,12 +308,12 @@
 
 private:
   Allocator _allocator;
-  uint8_t _num_hashes ;
-  uint32_t _num_buckets ;
-  std::vector<W, Allocator> _sketch_array ; // the array stored by the sketch
-  uint64_t _seed ;
-  W _total_weight ;
-  std::vector<uint64_t> hash_seeds ;
+  uint8_t _num_hashes;
+  uint32_t _num_buckets;
+  std::vector<W, Allocator> _sketch_array; // the array stored by the sketch
+  uint64_t _seed;
+  W _total_weight;
+  std::vector<uint64_t> hash_seeds;
 
   enum flags {IS_EMPTY};
   static const uint8_t PREAMBLE_LONGS_SHORT = 2; // Empty -> need second byte for sketch parameters
diff --git a/count/include/count_min_impl.hpp b/count/include/count_min_impl.hpp
index ec77be6..568debc 100644
--- a/count/include/count_min_impl.hpp
+++ b/count/include/count_min_impl.hpp
@@ -38,78 +38,77 @@
 _num_buckets(num_buckets),
 _sketch_array((num_hashes*num_buckets < 1<<30) ? num_hashes*num_buckets : 0, 0, _allocator),
 _seed(seed),
-_total_weight(0){
-  if(num_buckets < 3) throw std::invalid_argument("Using fewer than 3 buckets incurs relative error greater than 1.") ;
+_total_weight(0) {
+  if (num_buckets < 3) throw std::invalid_argument("Using fewer than 3 buckets incurs relative error greater than 1.");
 
   // This check is to ensure later compatibility with a Java implementation whose maximum size can only
   // be 2^31-1.  We check only against 2^30 for simplicity.
-  if(num_buckets*num_hashes >= 1<<30) {
+  if (num_buckets * num_hashes >= 1 << 30) {
     throw std::invalid_argument("These parameters generate a sketch that exceeds 2^30 elements."
-                                "Try reducing either the number of buckets or the number of hash functions.") ;
+                                "Try reducing either the number of buckets or the number of hash functions.");
   }
 
   std::default_random_engine rng(_seed);
   std::uniform_int_distribution<uint64_t> extra_hash_seeds(0, std::numeric_limits<uint64_t>::max());
-  hash_seeds.reserve(num_hashes) ;
+  hash_seeds.reserve(num_hashes);
 
-  for(uint64_t i=0 ; i < num_hashes ; ++i){
+  for (uint64_t i=0; i < num_hashes; ++i) {
     hash_seeds.push_back(extra_hash_seeds(rng) + _seed); // Adds the global seed to all hash functions.
   }
 }
 
 template<typename W, typename A>
-uint8_t count_min_sketch<W,A>::get_num_hashes() const{
-    return _num_hashes ;
+uint8_t count_min_sketch<W,A>::get_num_hashes() const {
+  return _num_hashes;
 }
 
 template<typename W, typename A>
-uint32_t count_min_sketch<W,A>::get_num_buckets() const{
-    return _num_buckets ;
+uint32_t count_min_sketch<W,A>::get_num_buckets() const {
+   return _num_buckets;
 }
 
 template<typename W, typename A>
 uint64_t count_min_sketch<W,A>::get_seed() const {
-    return _seed ;
+  return _seed;
 }
 
 template<typename W, typename A>
-double count_min_sketch<W,A>::get_relative_error() const{
-  return exp(1.0) / double(_num_buckets) ;
+double count_min_sketch<W,A>::get_relative_error() const {
+  return exp(1.0) / double(_num_buckets);
 }
 
 template<typename W, typename A>
-W count_min_sketch<W,A>::get_total_weight() const{
-  return _total_weight ;
+W count_min_sketch<W,A>::get_total_weight() const {
+  return _total_weight;
 }
 
 template<typename W, typename A>
-uint32_t count_min_sketch<W,A>::suggest_num_buckets(double relative_error){
+uint32_t count_min_sketch<W,A>::suggest_num_buckets(double relative_error) {
   /*
    * Function to help users select a number of buckets for a given error.
    * TODO: Change this when we use only power of 2 buckets.
-   *
    */
-  if(relative_error < 0.){
-    throw std::invalid_argument( "Relative error must be at least 0." );
+  if (relative_error < 0.) {
+    throw std::invalid_argument("Relative error must be at least 0.");
   }
-  return ceil(exp(1.0) / relative_error);
+  return static_cast<uint32_t>(ceil(exp(1.0) / relative_error));
 }
 
 template<typename W, typename A>
-uint8_t count_min_sketch<W,A>::suggest_num_hashes(double confidence){
+uint8_t count_min_sketch<W,A>::suggest_num_hashes(double confidence) {
   /*
    * Function to help users select a number of hashes for a given confidence
    * e.g. confidence = 1 - failure probability
    * failure probability == delta in the literature.
    */
-  if(confidence < 0. || confidence > 1.0){
-    throw std::invalid_argument( "Confidence must be between 0 and 1.0 (inclusive)." );
+  if (confidence < 0. || confidence > 1.0) {
+    throw std::invalid_argument("Confidence must be between 0 and 1.0 (inclusive).");
   }
-  return std::min<uint8_t>( ceil(log(1.0/(1.0 - confidence))), UINT8_MAX) ;
+  return std::min<uint8_t>(ceil(log(1.0 / (1.0 - confidence))), UINT8_MAX);
 }
 
 template<typename W, typename A>
-std::vector<uint64_t> count_min_sketch<W,A>::get_hashes(const void* item, size_t size) const{
+std::vector<uint64_t> count_min_sketch<W,A>::get_hashes(const void* item, size_t size) const {
   /*
    * Returns the hash locations for the input item using the original hashing
    * scheme from [1].
@@ -124,20 +123,20 @@
    * https://github.com/Claudenw/BloomFilter/wiki/Bloom-Filters----An-overview
    * https://www.eecs.harvard.edu/~michaelm/postscripts/tr-02-05.pdf
    */
-  uint64_t bucket_index ;
-  std::vector<uint64_t> sketch_update_locations; //(_num_hashes) ;
-  sketch_update_locations.reserve(_num_hashes) ;
+  uint64_t bucket_index;
+  std::vector<uint64_t> sketch_update_locations;
+  sketch_update_locations.reserve(_num_hashes);
 
-  uint64_t hash_seed_index = 0 ;
-  for(const auto &it : hash_seeds){
+  uint64_t hash_seed_index = 0;
+  for (const auto &it: hash_seeds) {
     HashState hashes;
     MurmurHash3_x64_128(item, size, it, hashes); // ? BEWARE OVERFLOW.
-    uint64_t hash = hashes.h1 ;
-    bucket_index = hash % _num_buckets ;
-    sketch_update_locations.push_back((hash_seed_index * _num_buckets) + bucket_index) ;
-    hash_seed_index += 1 ;
+    uint64_t hash = hashes.h1;
+    bucket_index = hash % _num_buckets;
+    sketch_update_locations.push_back((hash_seed_index * _num_buckets) + bucket_index);
+    hash_seed_index += 1;
   }
-  return sketch_update_locations ;
+  return sketch_update_locations;
 }
 
 template<typename W, typename A>
@@ -148,7 +147,7 @@
 
 template<typename W, typename A>
 W count_min_sketch<W,A>::get_estimate(const std::string& item) const {
-  if (item.empty()) return 0 ; // Empty strings are not inserted into the sketch.
+  if (item.empty()) return 0; // Empty strings are not inserted into the sketch.
   return get_estimate(item.c_str(), item.length());
 }
 
@@ -157,13 +156,12 @@
   /*
    * Returns the estimated frequency of the item
    */
-  std::vector<uint64_t> hash_locations = get_hashes(item, size) ;
-  std::vector<W> estimates ;
-  for (auto h: hash_locations){
-    estimates.push_back(_sketch_array[h]) ;
+  std::vector<uint64_t> hash_locations = get_hashes(item, size);
+  std::vector<W> estimates;
+  for (const auto h: hash_locations) {
+    estimates.push_back(_sketch_array[h]);
   }
-  W result = *std::min_element(estimates.begin(), estimates.end());
-  return result ;
+  return *std::min_element(estimates.begin(), estimates.end());
 }
 
 template<typename W, typename A>
@@ -204,11 +202,10 @@
    * Gets the item's hash locations and then increments the sketch in those
    * locations by the weight.
    */
-  W magnitude = (weight >= 0) ? weight : -weight ;
-  _total_weight += magnitude ;
-  std::vector<uint64_t> hash_locations = get_hashes(item, size) ;
-  for (auto h: hash_locations){
-    _sketch_array[h] += weight ;
+  _total_weight += weight >= 0 ? weight : -weight;
+  std::vector<uint64_t> hash_locations = get_hashes(item, size);
+  for (const auto h: hash_locations) {
+    _sketch_array[h] += weight;
   }
 }
 
@@ -220,13 +217,13 @@
 
 template<typename W, typename A>
 W count_min_sketch<W,A>::get_upper_bound(const std::string& item) const {
-  if (item.empty()) return 0 ; // Empty strings are not inserted into the sketch.
+  if (item.empty()) return 0; // Empty strings are not inserted into the sketch.
   return get_upper_bound(item.c_str(), item.length());
 }
 
 template<typename W, typename A>
 W count_min_sketch<W,A>::get_upper_bound(const void* item, size_t size) const {
-  return get_estimate(item, size) + get_relative_error()*get_total_weight() ;
+  return static_cast<W>(get_estimate(item, size) + get_relative_error() * get_total_weight());
 }
 
 template<typename W, typename A>
@@ -237,41 +234,41 @@
 
 template<typename W, typename A>
 W count_min_sketch<W,A>::get_lower_bound(const std::string& item) const {
-  if (item.empty()) return 0 ; // Empty strings are not inserted into the sketch.
+  if (item.empty()) return 0; // Empty strings are not inserted into the sketch.
   return get_lower_bound(item.c_str(), item.length());
 }
 
 template<typename W, typename A>
 W count_min_sketch<W,A>::get_lower_bound(const void* item, size_t size) const {
-  return get_estimate(item, size) ;
+  return get_estimate(item, size);
 }
 
 template<typename W, typename A>
-void count_min_sketch<W,A>::merge(const count_min_sketch &other_sketch){
+void count_min_sketch<W,A>::merge(const count_min_sketch &other_sketch) {
   /*
   * Merges this sketch into other_sketch sketch by elementwise summing of buckets
   */
-  if(this == &other_sketch){
+  if (this == &other_sketch) {
     throw std::invalid_argument( "Cannot merge a sketch with itself." );
   }
 
   bool acceptable_config =
     (get_num_hashes() == other_sketch.get_num_hashes())   &&
     (get_num_buckets() == other_sketch.get_num_buckets()) &&
-    (get_seed() == other_sketch.get_seed()) ;
-  if(!acceptable_config){
+    (get_seed() == other_sketch.get_seed());
+  if (!acceptable_config) {
     throw std::invalid_argument( "Incompatible sketch configuration." );
   }
 
   // Merge step - iterate over the other vector and add the weights to this sketch
-  auto it = _sketch_array.begin() ; // This is a std::vector iterator.
-  auto other_it = other_sketch.begin() ; //This is a const iterator over the other sketch.
-  while(it != _sketch_array.end()){
-    *it += *other_it ;
-    ++it ;
-    ++other_it ;
+  auto it = _sketch_array.begin(); // This is a std::vector iterator.
+  auto other_it = other_sketch.begin(); //This is a const iterator over the other sketch.
+  while (it != _sketch_array.end()) {
+    *it += *other_it;
+    ++it;
+    ++other_it;
   }
-  _total_weight += other_sketch.get_total_weight() ;
+  _total_weight += other_sketch.get_total_weight();
 }
 
 // Iterators
@@ -291,35 +288,34 @@
   //const uint8_t preamble_longs = is_empty() ? PREAMBLE_LONGS_SHORT : PREAMBLE_LONGS_FULL;
   const uint8_t preamble_longs = PREAMBLE_LONGS_SHORT;
   const uint8_t ser_ver = SERIAL_VERSION_1;
-  const uint8_t family_id = FAMILY_ID ;
+  const uint8_t family_id = FAMILY_ID;
   const uint8_t flags_byte = (is_empty() ? 1 << flags::IS_EMPTY : 0);
-  const uint32_t unused32 = NULL_32 ;
-  write(os, preamble_longs) ;
-  write(os, ser_ver) ;
-  write(os, family_id) ;
-  write(os, flags_byte) ;
-  write(os, unused32) ;
+  const uint32_t unused32 = NULL_32;
+  write(os, preamble_longs);
+  write(os, ser_ver);
+  write(os, family_id);
+  write(os, flags_byte);
+  write(os, unused32);
 
   // Long 1
-  const uint32_t nbuckets = _num_buckets ;
-  const uint8_t nhashes = _num_hashes ;
+  const uint32_t nbuckets = _num_buckets;
+  const uint8_t nhashes = _num_hashes;
   const uint16_t seed_hash(compute_seed_hash(_seed));
   const uint8_t unused8 =  NULL_8;
-  write(os, nbuckets) ;
-  write(os, nhashes) ;
-  write(os, seed_hash) ;
-  write(os, unused8) ;
-  if (is_empty()) return  ; // sketch is empty, no need to write further bytes.
+  write(os, nbuckets);
+  write(os, nhashes);
+  write(os, seed_hash);
+  write(os, unused8);
+  if (is_empty()) return; // sketch is empty, no need to write further bytes.
 
   // Long 2
-  const W t_weight = _total_weight ;
-  write(os, t_weight) ;
+  write(os, _total_weight);
 
-  // Long  3 onwards: remaining bytes are consumed by writing the weight and the array values.
-  auto it = _sketch_array.begin() ;
-  while(it != _sketch_array.end()){
-    write(os, *it) ;
-    ++it ;
+  // Long 3 onwards: remaining bytes are consumed by writing the weight and the array values.
+  auto it = _sketch_array.begin();
+  while (it != _sketch_array.end()) {
+    write(os, *it);
+    ++it;
   }
 }
 
@@ -327,40 +323,40 @@
 auto count_min_sketch<W,A>::deserialize(std::istream& is, uint64_t seed, const A& allocator) -> count_min_sketch {
 
   // First 8 bytes are 4 bytes of preamble and 4 unused bytes.
-  const auto preamble_longs = read<uint8_t>(is) ;
-  const auto serial_version = read<uint8_t>(is) ;
-  const auto family_id = read<uint8_t>(is) ;
-  const auto flags_byte = read<uint8_t>(is) ;
-  read<uint32_t>(is) ; // 4 unused bytes
+  const auto preamble_longs = read<uint8_t>(is);
+  const auto serial_version = read<uint8_t>(is);
+  const auto family_id = read<uint8_t>(is);
+  const auto flags_byte = read<uint8_t>(is);
+  read<uint32_t>(is); // 4 unused bytes
 
   check_header_validity(preamble_longs, serial_version, family_id, flags_byte);
 
   // Sketch parameters
-  const auto nbuckets = read<uint32_t>(is) ;
+  const auto nbuckets = read<uint32_t>(is);
   const auto nhashes = read<uint8_t>(is);
-  const auto seed_hash = read<uint16_t>(is) ;
-  read<uint8_t>(is) ; // 1 unused byte
+  const auto seed_hash = read<uint16_t>(is);
+  read<uint8_t>(is); // 1 unused byte
 
   if (seed_hash != compute_seed_hash(seed)) {
     throw std::invalid_argument("Incompatible seed hashes: " + std::to_string(seed_hash) + ", "
                                 + std::to_string(compute_seed_hash(seed)));
   }
-  count_min_sketch c(nhashes, nbuckets, seed, allocator) ;
+  count_min_sketch c(nhashes, nbuckets, seed, allocator);
   const bool is_empty = (flags_byte & (1 << flags::IS_EMPTY)) > 0;
-  if (is_empty == 1) return c ; // sketch is empty, no need to read further.
+  if (is_empty == 1) return c; // sketch is empty, no need to read further.
 
   // Set the sketch weight and read in the sketch values
-  const auto weight = read<W>(is) ;
-  c._total_weight += weight ;
+  const auto weight = read<W>(is);
+  c._total_weight += weight;
   read(is, c._sketch_array.data(), sizeof(W) * c._sketch_array.size());
 
-  return c ;
+  return c;
 }
 
 template<typename W, typename A>
 size_t count_min_sketch<W,A>::get_serialized_size_bytes() const {
   // The header is always 2 longs, whether empty or full
-  size_t preamble_longs = PREAMBLE_LONGS_SHORT;
+  const size_t preamble_longs = PREAMBLE_LONGS_SHORT;
 
   // If the sketch is empty, we're done. Otherwise, we need the total weight
   // held by the sketch as well as a data table of size (num_buckets * num_hashes)
@@ -377,33 +373,33 @@
   ptr += copy_to_mem(preamble_longs, ptr);
   const uint8_t ser_ver = SERIAL_VERSION_1;
   ptr += copy_to_mem(ser_ver, ptr);
-  const uint8_t family_id = FAMILY_ID ;
+  const uint8_t family_id = FAMILY_ID;
   ptr += copy_to_mem(family_id, ptr);
   const uint8_t flags_byte = (is_empty() ? 1 << flags::IS_EMPTY : 0);
   ptr += copy_to_mem(flags_byte, ptr);
-  const uint32_t unused32 = NULL_32 ;
-  ptr += copy_to_mem(unused32, ptr) ;
+  const uint32_t unused32 = NULL_32;
+  ptr += copy_to_mem(unused32, ptr);
 
   // Long 1
-  const uint32_t nbuckets = _num_buckets ;
-  const uint8_t nhashes = _num_hashes ;
+  const uint32_t nbuckets = _num_buckets;
+  const uint8_t nhashes = _num_hashes;
   const uint16_t seed_hash(compute_seed_hash(_seed));
   const uint8_t null_characters_8 =  NULL_8;
-  ptr += copy_to_mem(nbuckets, ptr) ;
-  ptr += copy_to_mem(nhashes, ptr) ;
-  ptr += copy_to_mem(seed_hash, ptr) ;
-  ptr += copy_to_mem(null_characters_8, ptr) ;
-  if (is_empty()) return bytes  ; // sketch is empty, no need to write further bytes.
+  ptr += copy_to_mem(nbuckets, ptr);
+  ptr += copy_to_mem(nhashes, ptr);
+  ptr += copy_to_mem(seed_hash, ptr);
+  ptr += copy_to_mem(null_characters_8, ptr);
+  if (is_empty()) return bytes; // sketch is empty, no need to write further bytes.
 
   // Long 2
-  const W t_weight = _total_weight ;
-  ptr += copy_to_mem(t_weight, ptr) ;
+  const W t_weight = _total_weight;
+  ptr += copy_to_mem(t_weight, ptr);
 
   // Long  3 onwards: remaining bytes are consumed by writing the weight and the array values.
-  auto it = _sketch_array.begin() ;
-  while(it != _sketch_array.end()){
-    ptr += copy_to_mem(*it, ptr) ;
-    ++it ;
+  auto it = _sketch_array.begin();
+  while (it != _sketch_array.end()) {
+    ptr += copy_to_mem(*it, ptr);
+    ++it;
   }
 
   return bytes;
@@ -416,45 +412,45 @@
   const char* ptr = static_cast<const char*>(bytes);
 
   // First 8 bytes are 4 bytes of preamble and 4 unused bytes.
-  uint8_t preamble_longs ;
-  ptr += copy_from_mem(ptr, preamble_longs) ;
-  uint8_t serial_version ;
-  ptr += copy_from_mem(ptr, serial_version) ;
-  uint8_t family_id ;
-  ptr += copy_from_mem(ptr, family_id) ;
-  uint8_t flags_byte ;
-  ptr += copy_from_mem(ptr, flags_byte) ;
+  uint8_t preamble_longs;
+  ptr += copy_from_mem(ptr, preamble_longs);
+  uint8_t serial_version;
+  ptr += copy_from_mem(ptr, serial_version);
+  uint8_t family_id;
+  ptr += copy_from_mem(ptr, family_id);
+  uint8_t flags_byte;
+  ptr += copy_from_mem(ptr, flags_byte);
   ptr += sizeof(uint32_t);
 
   check_header_validity(preamble_longs, serial_version, family_id, flags_byte);
 
   // Second 8 bytes are the sketch parameters with a final, unused byte.
-  uint32_t nbuckets ;
-  uint8_t nhashes ;
-  uint16_t seed_hash ;
-  ptr += copy_from_mem(ptr, nbuckets) ;
-  ptr += copy_from_mem(ptr, nhashes) ;
-  ptr += copy_from_mem(ptr, seed_hash) ;
+  uint32_t nbuckets;
+  uint8_t nhashes;
+  uint16_t seed_hash;
+  ptr += copy_from_mem(ptr, nbuckets);
+  ptr += copy_from_mem(ptr, nhashes);
+  ptr += copy_from_mem(ptr, seed_hash);
   ptr += sizeof(uint8_t);
 
   if (seed_hash != compute_seed_hash(seed)) {
     throw std::invalid_argument("Incompatible seed hashes: " + std::to_string(seed_hash) + ", "
                                 + std::to_string(compute_seed_hash(seed)));
   }
-  count_min_sketch c(nhashes, nbuckets, seed, allocator) ;
+  count_min_sketch c(nhashes, nbuckets, seed, allocator);
   const bool is_empty = (flags_byte & (1 << flags::IS_EMPTY)) > 0;
-  if (is_empty) return c ; // sketch is empty, no need to read further.
+  if (is_empty) return c; // sketch is empty, no need to read further.
 
   ensure_minimum_memory(size, sizeof(W) * (1 + nbuckets * nhashes));
 
   // Long 2 is the weight.
   W weight;
-  ptr += copy_from_mem(ptr, weight) ;
-  c._total_weight += weight ;
+  ptr += copy_from_mem(ptr, weight);
+  c._total_weight += weight;
 
   // All remaining bytes are the sketch table entries.
-  for (size_t i = 0; i<c._num_buckets*c._num_hashes ; ++i){
-    ptr += copy_from_mem(ptr, c._sketch_array[i]) ;
+  for (size_t i = 0; i<c._num_buckets*c._num_hashes; ++i) {
+    ptr += copy_from_mem(ptr, c._sketch_array[i]);
   }
   return c;
 }
@@ -468,7 +464,7 @@
 string<A> count_min_sketch<W,A>::to_string() const {
   // count the number of used entries in the sketch
   uint64_t num_nonzero = 0;
-  for (auto entry : _sketch_array) {
+  for (const auto entry: _sketch_array) {
     if (entry != static_cast<W>(0.0))
       ++num_nonzero;
   }
@@ -497,7 +493,7 @@
   switch (sw) { // exhaustive list and description of all valid cases
     case 138 : break; // !empty, ser_ver==1, family==18, preLongs=2;
     case 139 : break; // empty, ser_ver==1, family==18, preLongs=2;
-    //case 170 : break ; // !empty, ser_ver==1, family==18, preLongs=3 ;
+    //case 170 : break; // !empty, ser_ver==1, family==18, preLongs=3;
     default : // all other case values are invalid
       valid = false;
   }
@@ -507,7 +503,7 @@
     os << "Possible sketch corruption. Inconsistent state: "
        << "preamble_longs = " << static_cast<uint32_t>(preamble_longs)
        << ", empty = " << (empty ? "true" : "false")
-       << ", serialization_version = " << static_cast<uint32_t>(serial_version) ;
+       << ", serialization_version = " << static_cast<uint32_t>(serial_version);
     throw std::invalid_argument(os.str());
   }
 }
diff --git a/count/test/count_min_allocation_test.cpp b/count/test/count_min_allocation_test.cpp
index 68df534..2177b51 100644
--- a/count/test/count_min_allocation_test.cpp
+++ b/count/test/count_min_allocation_test.cpp
@@ -32,120 +32,120 @@
 using count_min_sketch_test_alloc = count_min_sketch<uint64_t, test_allocator<uint64_t>>;
 using alloc = test_allocator<uint64_t>;
 
-TEST_CASE("CountMin sketch test allocator: serialize-deserialize empty", "[cm_sketch_alloc]"){
+TEST_CASE("CountMin sketch test allocator: serialize-deserialize empty", "[cm_sketch_alloc]") {
   test_allocator_total_bytes = 0;
   test_allocator_net_allocations = 0;
   {
-    uint8_t n_hashes = 1 ;
-    uint32_t n_buckets = 5 ;
+    uint8_t n_hashes = 1;
+    uint32_t n_buckets = 5;
     std::stringstream s(std::ios::in | std::ios::out | std::ios::binary);
-    count_min_sketch_test_alloc c(n_hashes, n_buckets, DEFAULT_SEED, alloc(0)) ;
+    count_min_sketch_test_alloc c(n_hashes, n_buckets, DEFAULT_SEED, alloc(0));
     c.serialize(s);
     count_min_sketch_test_alloc d = count_min_sketch_test_alloc::deserialize(s, DEFAULT_SEED, alloc(0)) ;
-    REQUIRE(c.get_num_hashes() == d.get_num_hashes()) ;
-    REQUIRE(c.get_num_buckets() == d.get_num_buckets()) ;
-    REQUIRE(c.get_seed() == d.get_seed()) ;
+    REQUIRE(c.get_num_hashes() == d.get_num_hashes());
+    REQUIRE(c.get_num_buckets() == d.get_num_buckets());
+    REQUIRE(c.get_seed() == d.get_seed());
     uint64_t zero = 0;
-    REQUIRE(c.get_estimate(zero) == d.get_estimate(zero)) ;
-    REQUIRE(c.get_total_weight() == d.get_total_weight()) ;
+    REQUIRE(c.get_estimate(zero) == d.get_estimate(zero));
+    REQUIRE(c.get_total_weight() == d.get_total_weight());
 
     // Check that all entries are equal and 0
-    for(auto di: d){
-      REQUIRE(di == 0) ;
+    for (auto di: d) {
+      REQUIRE(di == 0);
     }
   }
   REQUIRE(test_allocator_total_bytes == 0);
   REQUIRE(test_allocator_net_allocations == 0);
 }
 
-TEST_CASE("CountMin sketch test allocator: serialize-deserialize non-empty", "[cm_sketch_alloc]"){
+TEST_CASE("CountMin sketch test allocator: serialize-deserialize non-empty", "[cm_sketch_alloc]") {
   test_allocator_total_bytes = 0;
   test_allocator_net_allocations = 0;
   {
-    uint8_t n_hashes = 3 ;
-    uint32_t n_buckets = 1024 ;
+    uint8_t n_hashes = 3;
+    uint32_t n_buckets = 1024;
     std::stringstream s(std::ios::in | std::ios::out | std::ios::binary);
-    count_min_sketch_test_alloc c(n_hashes, n_buckets, DEFAULT_SEED, alloc(0)) ;
-    for(uint64_t i=0 ; i < 10; ++i) c.update(i,10*i*i) ;
+    count_min_sketch_test_alloc c(n_hashes, n_buckets, DEFAULT_SEED, alloc(0));
+    for (uint64_t i = 0; i < 10; ++i) c.update(i, 10 * i * i);
     c.serialize(s);
-    count_min_sketch_test_alloc d = count_min_sketch_test_alloc::deserialize(s, DEFAULT_SEED, alloc(0)) ;
-    REQUIRE(c.get_num_hashes() == d.get_num_hashes()) ;
-    REQUIRE(c.get_num_buckets() == d.get_num_buckets()) ;
-    REQUIRE(c.get_seed() == d.get_seed()) ;
-    REQUIRE(c.get_total_weight() == d.get_total_weight()) ;
-    for(uint64_t i=0 ; i < 10; ++i){
-      REQUIRE(c.get_estimate(i) == d.get_estimate(i)) ;
+    count_min_sketch_test_alloc d = count_min_sketch_test_alloc::deserialize(s, DEFAULT_SEED, alloc(0));
+    REQUIRE(c.get_num_hashes() == d.get_num_hashes());
+    REQUIRE(c.get_num_buckets() == d.get_num_buckets());
+    REQUIRE(c.get_seed() == d.get_seed());
+    REQUIRE(c.get_total_weight() == d.get_total_weight());
+    for (uint64_t i = 0; i < 10; ++i) {
+      REQUIRE(c.get_estimate(i) == d.get_estimate(i));
     }
 
-    auto c_it = c.begin() ;
-    auto d_it = d.begin() ;
-    while(c_it != c.end()){
-      REQUIRE(*c_it == *d_it) ;
-      ++c_it ;
-      ++d_it ;
+    auto c_it = c.begin();
+    auto d_it = d.begin();
+    while (c_it != c.end()) {
+      REQUIRE(*c_it == *d_it);
+      ++c_it;
+      ++d_it;
     }
   }
   REQUIRE(test_allocator_total_bytes == 0);
   REQUIRE(test_allocator_net_allocations == 0);
 }
 
-TEST_CASE("CountMin sketch test allocator: bytes serialize-deserialize empty", "[cm_sketch_alloc]"){
+TEST_CASE("CountMin sketch test allocator: bytes serialize-deserialize empty", "[cm_sketch_alloc]") {
   test_allocator_total_bytes = 0;
   test_allocator_net_allocations = 0;
   {
-    uint8_t n_hashes = 3 ;
-    uint32_t n_buckets = 32 ;
-    count_min_sketch_test_alloc c(n_hashes, n_buckets, DEFAULT_SEED, alloc(0)) ;
-    auto bytes = c.serialize() ;
+    uint8_t n_hashes = 3;
+    uint32_t n_buckets = 32;
+    count_min_sketch_test_alloc c(n_hashes, n_buckets, DEFAULT_SEED, alloc(0));
+    auto bytes = c.serialize();
 
     REQUIRE_THROWS_AS(count_min_sketch_test_alloc::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED-1, alloc(0)), std::invalid_argument);
-    auto d = count_min_sketch_test_alloc::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED, alloc(0)) ;
-    REQUIRE(c.get_num_hashes() == d.get_num_hashes()) ;
-    REQUIRE(c.get_num_buckets() == d.get_num_buckets()) ;
-    REQUIRE(c.get_seed() == d.get_seed()) ;
+    auto d = count_min_sketch_test_alloc::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED, alloc(0));
+    REQUIRE(c.get_num_hashes() == d.get_num_hashes());
+    REQUIRE(c.get_num_buckets() == d.get_num_buckets());
+    REQUIRE(c.get_seed() == d.get_seed());
     uint64_t zero = 0;
-    REQUIRE(c.get_estimate(zero) == d.get_estimate(zero)) ;
-    REQUIRE(c.get_total_weight() == d.get_total_weight()) ;
+    REQUIRE(c.get_estimate(zero) == d.get_estimate(zero));
+    REQUIRE(c.get_total_weight() == d.get_total_weight());
 
     // Check that all entries are equal and 0
-    for(auto di: d){
-      REQUIRE(di == 0) ;
+    for (auto di: d) {
+      REQUIRE(di == 0);
     }
   }
   REQUIRE(test_allocator_total_bytes == 0);
   REQUIRE(test_allocator_net_allocations == 0);
 }
 
-TEST_CASE("CountMin sketch test allocator: bytes serialize-deserialize non-empty", "[cm_sketch_alloc]"){
+TEST_CASE("CountMin sketch test allocator: bytes serialize-deserialize non-empty", "[cm_sketch_alloc]") {
   test_allocator_total_bytes = 0;
   test_allocator_net_allocations = 0;
   {
-    uint8_t n_hashes = 5 ;
-    uint32_t n_buckets = 64 ;
-    count_min_sketch_test_alloc c(n_hashes, n_buckets, DEFAULT_SEED, alloc(0)) ;
-    for(uint64_t i=0 ; i < 10; ++i) c.update(i,10*i*i) ;
+    uint8_t n_hashes = 5;
+    uint32_t n_buckets = 64;
+    count_min_sketch_test_alloc c(n_hashes, n_buckets, DEFAULT_SEED, alloc(0));
+    for (uint64_t i = 0; i < 10; ++i) c.update(i, 10 * i * i);
 
-    auto bytes = c.serialize() ;
+    auto bytes = c.serialize();
     REQUIRE_THROWS_AS(count_min_sketch_test_alloc::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED-1, alloc(0)), std::invalid_argument);
-    auto d = count_min_sketch_test_alloc::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED, alloc(0)) ;
+    auto d = count_min_sketch_test_alloc::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED, alloc(0));
 
-    REQUIRE(c.get_num_hashes() == d.get_num_hashes()) ;
-    REQUIRE(c.get_num_buckets() == d.get_num_buckets()) ;
-    REQUIRE(c.get_seed() == d.get_seed()) ;
-    REQUIRE(c.get_total_weight() == d.get_total_weight()) ;
+    REQUIRE(c.get_num_hashes() == d.get_num_hashes());
+    REQUIRE(c.get_num_buckets() == d.get_num_buckets());
+    REQUIRE(c.get_seed() == d.get_seed());
+    REQUIRE(c.get_total_weight() == d.get_total_weight());
 
     // Check that all entries are equal
-    auto c_it = c.begin() ;
-    auto d_it = d.begin() ;
-    while(c_it != c.end()){
-      REQUIRE(*c_it == *d_it) ;
-      ++c_it ;
-      ++d_it ;
+    auto c_it = c.begin();
+    auto d_it = d.begin();
+    while (c_it != c.end()) {
+      REQUIRE(*c_it == *d_it);
+      ++c_it;
+      ++d_it;
     }
 
     // Check that the estimates agree
-    for(uint64_t i=0 ; i < 10; ++i){
-      REQUIRE(c.get_estimate(i) == d.get_estimate(i)) ;
+    for (uint64_t i = 0; i < 10; ++i) {
+      REQUIRE(c.get_estimate(i) == d.get_estimate(i));
     }
   }
   REQUIRE(test_allocator_total_bytes == 0);
diff --git a/count/test/count_min_test.cpp b/count/test/count_min_test.cpp
index 2c2afc1..143be1b 100644
--- a/count/test/count_min_test.cpp
+++ b/count/test/count_min_test.cpp
@@ -26,281 +26,278 @@
 #include "count_min.hpp"
 #include "common_defs.hpp"
 
-namespace datasketches{
+namespace datasketches {
 
 TEST_CASE("CM init - throws") {
     REQUIRE_THROWS_AS(count_min_sketch<uint64_t>(5, 1), std::invalid_argument);
     REQUIRE_THROWS_AS(count_min_sketch<uint64_t>(4, 268435456), std::invalid_argument);
 }
 
-TEST_CASE("CM init"){
-    uint8_t n_hashes = 3 ;
-    uint32_t n_buckets = 5 ;
-    uint64_t seed = 1234567 ;
-    count_min_sketch<uint64_t> c(n_hashes, n_buckets, seed) ;
-    REQUIRE(c.get_num_hashes() == n_hashes) ;
-    REQUIRE(c.get_num_buckets() == n_buckets) ;
-    REQUIRE(c.get_seed() == seed) ;
-    REQUIRE(c.is_empty()) ;
+TEST_CASE("CM init") {
+    uint8_t n_hashes = 3;
+    uint32_t n_buckets = 5;
+    uint64_t seed = 1234567;
+    count_min_sketch<uint64_t> c(n_hashes, n_buckets, seed);
+    REQUIRE(c.get_num_hashes() == n_hashes);
+    REQUIRE(c.get_num_buckets() == n_buckets);
+    REQUIRE(c.get_seed() == seed);
+    REQUIRE(c.is_empty());
 
-    for(auto x: c){
-      REQUIRE(x == 0) ;
+    for (auto x: c) {
+      REQUIRE(x == 0);
     }
 
     // Check the default seed is appropriately set.
-    count_min_sketch<uint64_t> c1(n_hashes, n_buckets) ;
-    REQUIRE(c1.get_seed() == DEFAULT_SEED) ;
+    count_min_sketch<uint64_t> c1(n_hashes, n_buckets);
+    REQUIRE(c1.get_seed() == DEFAULT_SEED);
 }
 
 TEST_CASE("CM parameter suggestions", "[error parameters]") {
 
     // Bucket suggestions
-    REQUIRE_THROWS(count_min_sketch<uint64_t>::suggest_num_buckets(-1.0), "Confidence must be between 0 and 1.0 (inclusive)." ) ;
-    REQUIRE(count_min_sketch<uint64_t>::suggest_num_buckets(0.2) == 14) ;
-    REQUIRE(count_min_sketch<uint64_t>::suggest_num_buckets(0.1) == 28) ;
-    REQUIRE(count_min_sketch<uint64_t>::suggest_num_buckets(0.05) == 55) ;
-    REQUIRE(count_min_sketch<uint64_t>::suggest_num_buckets(0.01) == 272) ;
+    REQUIRE_THROWS(count_min_sketch<uint64_t>::suggest_num_buckets(-1.0), "Confidence must be between 0 and 1.0 (inclusive)." );
+    REQUIRE(count_min_sketch<uint64_t>::suggest_num_buckets(0.2) == 14);
+    REQUIRE(count_min_sketch<uint64_t>::suggest_num_buckets(0.1) == 28);
+    REQUIRE(count_min_sketch<uint64_t>::suggest_num_buckets(0.05) == 55);
+    REQUIRE(count_min_sketch<uint64_t>::suggest_num_buckets(0.01) == 272);
 
     // Check that the sketch get_epsilon acts inversely to suggest_num_buckets
-    uint8_t n_hashes = 3 ;
-    REQUIRE(count_min_sketch<uint64_t>(n_hashes, 14).get_relative_error() <= 0.2) ;
-    REQUIRE(count_min_sketch<uint64_t>(n_hashes, 28).get_relative_error() <= 0.1) ;
-    REQUIRE(count_min_sketch<uint64_t>(n_hashes, 55).get_relative_error() <= 0.05) ;
-    REQUIRE(count_min_sketch<uint64_t>(n_hashes, 272).get_relative_error() <= 0.01) ;
+    uint8_t n_hashes = 3;
+    REQUIRE(count_min_sketch<uint64_t>(n_hashes, 14).get_relative_error() <= 0.2);
+    REQUIRE(count_min_sketch<uint64_t>(n_hashes, 28).get_relative_error() <= 0.1);
+    REQUIRE(count_min_sketch<uint64_t>(n_hashes, 55).get_relative_error() <= 0.05);
+    REQUIRE(count_min_sketch<uint64_t>(n_hashes, 272).get_relative_error() <= 0.01);
 
     // Hash suggestions
-    REQUIRE_THROWS(count_min_sketch<uint64_t>::suggest_num_hashes(10.0), "Confidence must be between 0 and 1.0 (inclusive)." ) ;
-    REQUIRE_THROWS(count_min_sketch<uint64_t>::suggest_num_hashes(-1.0), "Confidence must be between 0 and 1.0 (inclusive)." ) ;
-    REQUIRE(count_min_sketch<uint64_t>::suggest_num_hashes(0.682689492) == 2) ; // 1 STDDEV
-    REQUIRE(count_min_sketch<uint64_t>::suggest_num_hashes(0.954499736) == 4) ; // 2 STDDEV
-    REQUIRE(count_min_sketch<uint64_t>::suggest_num_hashes(0.997300204) == 6) ; // 3 STDDEV
+    REQUIRE_THROWS(count_min_sketch<uint64_t>::suggest_num_hashes(10.0), "Confidence must be between 0 and 1.0 (inclusive)." );
+    REQUIRE_THROWS(count_min_sketch<uint64_t>::suggest_num_hashes(-1.0), "Confidence must be between 0 and 1.0 (inclusive)." );
+    REQUIRE(count_min_sketch<uint64_t>::suggest_num_hashes(0.682689492) == 2); // 1 STDDEV
+    REQUIRE(count_min_sketch<uint64_t>::suggest_num_hashes(0.954499736) == 4); // 2 STDDEV
+    REQUIRE(count_min_sketch<uint64_t>::suggest_num_hashes(0.997300204) == 6); // 3 STDDEV
 }
 
-TEST_CASE("CM one update: uint64_t"){
-  uint8_t n_hashes = 3 ;
-  uint32_t n_buckets = 5 ;
-  uint64_t seed =  9223372036854775807 ; //1234567 ;
-  uint64_t inserted_weight = 0 ;
-  count_min_sketch<uint64_t> c(n_hashes, n_buckets, seed) ;
-  std::string x = "x" ;
+TEST_CASE("CM one update: uint64_t") {
+  uint8_t n_hashes = 3;
+  uint32_t n_buckets = 5;
+  uint64_t seed = 9223372036854775807; //1234567;
+  uint64_t inserted_weight = 0;
+  count_min_sketch<uint64_t> c(n_hashes, n_buckets, seed);
+  std::string x = "x";
 
-  REQUIRE(c.is_empty()) ;
-  REQUIRE(c.get_estimate("x") == 0) ; // No items in sketch so estimates should be zero
-  c.update(x) ;
-  REQUIRE(!c.is_empty()) ;
-  REQUIRE(c.get_estimate(x) == 1) ;
-  inserted_weight += 1 ;
+  REQUIRE(c.is_empty());
+  REQUIRE(c.get_estimate("x") == 0); // No items in sketch so estimates should be zero
+  c.update(x);
+  REQUIRE(!c.is_empty());
+  REQUIRE(c.get_estimate(x) == 1);
+  inserted_weight += 1;
 
-  uint64_t w = 9 ;
-  inserted_weight += w ;
-  c.update(x, w) ;
-  REQUIRE(c.get_estimate(x) == inserted_weight) ;
+  uint64_t w = 9;
+  inserted_weight += w;
+  c.update(x, w);
+  REQUIRE(c.get_estimate(x) == inserted_weight);
 
     // Doubles are converted to uint64_t
-    double w1 = 10.0 ;
-    inserted_weight += w1 ;
-    c.update(x, w1) ;
-    REQUIRE(c.get_estimate(x) == inserted_weight) ;
-    REQUIRE(c.get_total_weight() == inserted_weight) ;
-    REQUIRE(c.get_estimate(x) <= c.get_upper_bound(x)) ;
-    REQUIRE(c.get_estimate(x) >= c.get_lower_bound(x)) ;
+    double w1 = 10.0;
+    inserted_weight += static_cast<uint64_t>(w1);
+    c.update(x, static_cast<uint64_t>(w1));
+    REQUIRE(c.get_estimate(x) == inserted_weight);
+    REQUIRE(c.get_total_weight() == inserted_weight);
+    REQUIRE(c.get_estimate(x) <= c.get_upper_bound(x));
+    REQUIRE(c.get_estimate(x) >= c.get_lower_bound(x));
 }
 
-TEST_CASE("CM frequency cancellation"){
-  count_min_sketch<int64_t> c(1, 5) ;
-  c.update("x") ;
-  c.update("y", -1) ;
-  REQUIRE(c.get_total_weight() == 2) ;
-  REQUIRE(c.get_estimate("x") == 1) ;
-  REQUIRE(c.get_estimate("y") == -1) ;
+TEST_CASE("CM frequency cancellation") {
+  count_min_sketch<int64_t> c(1, 5);
+  c.update("x");
+  c.update("y", -1);
+  REQUIRE(c.get_total_weight() == 2);
+  REQUIRE(c.get_estimate("x") == 1);
+  REQUIRE(c.get_estimate("y") == -1);
 }
 
-
-TEST_CASE("CM frequency estimates"){
-    int number_of_items = 10 ;
-    std::vector<uint64_t> data(number_of_items) ;
-    std::vector<uint64_t> frequencies(number_of_items) ;
+TEST_CASE("CM frequency estimates") {
+    int number_of_items = 10;
+    std::vector<uint64_t> data(number_of_items);
+    std::vector<uint64_t> frequencies(number_of_items);
 
     // Populate data vector
-    for(int i=0; i < number_of_items; i++){
+    for (int i = 0; i < number_of_items; ++i) {
       data[i] = i;
-      frequencies[i] = 1 << (number_of_items - i) ;
+      frequencies[i] = 1ULL << (number_of_items - i);
     }
 
-    double relative_error = 0.1 ;
-    double confidence = 0.99 ;
-    uint8_t n_buckets = count_min_sketch<uint64_t>::suggest_num_buckets(relative_error) ;
-    uint32_t n_hashes = count_min_sketch<uint64_t>::suggest_num_hashes(confidence) ;
+    double relative_error = 0.1;
+    double confidence = 0.99;
+    uint32_t n_buckets = count_min_sketch<uint64_t>::suggest_num_buckets(relative_error);
+    uint8_t n_hashes = count_min_sketch<uint64_t>::suggest_num_hashes(confidence);
 
-    count_min_sketch<uint64_t> c(n_hashes, n_buckets) ;
-    for(int i=0 ; i < number_of_items ; i++) {
-      uint64_t value = data[i] ;
-      uint64_t freq = frequencies[i] ;
-      c.update(value, freq) ;
+    count_min_sketch<uint64_t> c(n_hashes, n_buckets);
+    for (int i = 0; i < number_of_items; ++i) {
+      uint64_t value = data[i];
+      uint64_t freq = frequencies[i];
+      c.update(value, freq);
     }
 
-    for(const auto i: data){
-      uint64_t est = c.get_estimate(i) ;
-      uint64_t upp = c.get_upper_bound(i) ;
-      uint64_t low = c.get_lower_bound(i) ;
-      REQUIRE(est <= upp) ;
-      REQUIRE(est >= low) ;
+    for (const auto i: data) {
+      uint64_t est = c.get_estimate(i);
+      uint64_t upp = c.get_upper_bound(i);
+      uint64_t low = c.get_lower_bound(i);
+      REQUIRE(est <= upp);
+      REQUIRE(est >= low);
     }
 }
 
-TEST_CASE("CM merge - reject", "[reject cases]"){
-    double relative_error = 0.25 ;
-    double confidence = 0.9 ;
-    uint32_t n_buckets = count_min_sketch<uint64_t>::suggest_num_buckets(relative_error) ;
-    uint8_t n_hashes = count_min_sketch<uint64_t>::suggest_num_hashes(confidence) ;
-    count_min_sketch<uint64_t> s(n_hashes, n_buckets, 9082435234709287) ;
-
+TEST_CASE("CM merge - reject", "[reject cases]") {
+    double relative_error = 0.25;
+    double confidence = 0.9;
+    uint32_t n_buckets = count_min_sketch<uint64_t>::suggest_num_buckets(relative_error);
+    uint8_t n_hashes = count_min_sketch<uint64_t>::suggest_num_hashes(confidence);
+    count_min_sketch<uint64_t> s(n_hashes, n_buckets, 9082435234709287);
 
     // Generate sketches that we cannot merge into ie they disagree on at least one of the config entries
-    count_min_sketch<uint64_t> s1(n_hashes+1, n_buckets) ; // incorrect number of hashes
-    count_min_sketch<uint64_t> s2(n_hashes, n_buckets+1) ;// incorrect number of buckets
-    count_min_sketch<uint64_t> s3(n_hashes, n_buckets, 1) ;// incorrect seed
+    count_min_sketch<uint64_t> s1(n_hashes+1, n_buckets); // incorrect number of hashes
+    count_min_sketch<uint64_t> s2(n_hashes, n_buckets + 1); // incorrect number of buckets
+    count_min_sketch<uint64_t> s3(n_hashes, n_buckets, 1); // incorrect seed
     std::vector<count_min_sketch<uint64_t>> sketches = {s1, s2, s3};
 
     // Fail cases
-    REQUIRE_THROWS(s.merge(s), "Cannot merge a sketch with itself." ) ;
-    for(count_min_sketch<uint64_t> sk : sketches){
-      REQUIRE_THROWS(s.merge(sk), "Incompatible sketch config." ) ;
+    REQUIRE_THROWS(s.merge(s), "Cannot merge a sketch with itself." );
+    for (count_min_sketch<uint64_t> sk : sketches) {
+      REQUIRE_THROWS(s.merge(sk), "Incompatible sketch config." );
     }
 }
 
-TEST_CASE("CM merge - pass", "[acceptable cases]"){
-    double relative_error = 0.25 ;
-    double confidence = 0.9 ;
-    uint32_t n_buckets = count_min_sketch<uint64_t>::suggest_num_buckets(relative_error) ;
-    uint8_t n_hashes = count_min_sketch<uint64_t>::suggest_num_hashes(confidence) ;
-    count_min_sketch<uint64_t> s(n_hashes, n_buckets) ;
-    uint8_t s_hashes = s.get_num_hashes() ;
-    uint32_t s_buckets = s.get_num_buckets() ;
-    count_min_sketch<uint64_t> t(s_hashes, s_buckets) ;
+TEST_CASE("CM merge - pass", "[acceptable cases]") {
+    double relative_error = 0.25;
+    double confidence = 0.9;
+    uint32_t n_buckets = count_min_sketch<uint64_t>::suggest_num_buckets(relative_error);
+    uint8_t n_hashes = count_min_sketch<uint64_t>::suggest_num_hashes(confidence);
+    count_min_sketch<uint64_t> s(n_hashes, n_buckets);
+    uint8_t s_hashes = s.get_num_hashes();
+    uint32_t s_buckets = s.get_num_buckets();
+    count_min_sketch<uint64_t> t(s_hashes, s_buckets);
 
     // Merge in an all-zeros sketch t.  Should not change the total weight.
-    s.merge(t) ;
-    REQUIRE(s.get_total_weight() == 0 ) ;
+    s.merge(t);
+    REQUIRE(s.get_total_weight() == 0 );
 
     std::vector<uint64_t> data = {2,3,5,7};
-    for(auto d: data){
-      s.update(d) ;
-      t.update(d) ;
+    for (auto d: data) {
+      s.update(d);
+      t.update(d);
     }
     s.merge(t);
 
-    REQUIRE(s.get_total_weight() == 2*t.get_total_weight());
+    REQUIRE(s.get_total_weight() == 2 * t.get_total_weight());
 
     // Estimator checks.
-    for (auto x : data) {
-      REQUIRE(s.get_estimate(x) <= s.get_upper_bound(x)) ;
+    for (auto x: data) {
+      REQUIRE(s.get_estimate(x) <= s.get_upper_bound(x));
       REQUIRE(s.get_estimate(x) <= 2); // True frequency x == 2 for all x.
     }
   }
 
-TEST_CASE("CountMin sketch: serialize-deserialize empty", "[cm_sketch]"){
-    uint8_t n_hashes = 1 ;
-    uint32_t n_buckets = 5 ;
+TEST_CASE("CountMin sketch: serialize-deserialize empty", "[cm_sketch]") {
+    uint8_t n_hashes = 1;
+    uint32_t n_buckets = 5;
     std::stringstream s(std::ios::in | std::ios::out | std::ios::binary);
-    count_min_sketch<uint64_t> c(n_hashes, n_buckets) ;
+    count_min_sketch<uint64_t> c(n_hashes, n_buckets);
     c.serialize(s);
-    count_min_sketch<uint64_t> d = count_min_sketch<uint64_t>::deserialize(s, DEFAULT_SEED) ;
-    REQUIRE(c.get_num_hashes() == d.get_num_hashes()) ;
-    REQUIRE(c.get_num_buckets() == d.get_num_buckets()) ;
-    REQUIRE(c.get_seed() == d.get_seed()) ;
+    count_min_sketch<uint64_t> d = count_min_sketch<uint64_t>::deserialize(s, DEFAULT_SEED);
+    REQUIRE(c.get_num_hashes() == d.get_num_hashes());
+    REQUIRE(c.get_num_buckets() == d.get_num_buckets());
+    REQUIRE(c.get_seed() == d.get_seed());
     uint64_t zero = 0;
-    REQUIRE(c.get_estimate(zero) == d.get_estimate(zero)) ;
-    REQUIRE(c.get_total_weight() == d.get_total_weight()) ;
+    REQUIRE(c.get_estimate(zero) == d.get_estimate(zero));
+    REQUIRE(c.get_total_weight() == d.get_total_weight());
 
     // Check that all entries are equal and 0
-    for(auto di: d){
-      REQUIRE(di == 0) ;
+    for (auto di: d) {
+      REQUIRE(di == 0);
     }
     std::ofstream os("count_min-empty.bin");
     c.serialize(os);
 }
 
-TEST_CASE("CountMin sketch: serialize-deserialize non-empty", "[cm_sketch]"){
-  uint8_t n_hashes = 3 ;
-  uint32_t n_buckets = 1024 ;
+TEST_CASE("CountMin sketch: serialize-deserialize non-empty", "[cm_sketch]") {
+  uint8_t n_hashes = 3;
+  uint32_t n_buckets = 1024;
   std::stringstream s(std::ios::in | std::ios::out | std::ios::binary);
-  count_min_sketch<uint64_t> c(n_hashes, n_buckets) ;
-  for(uint64_t i=0 ; i < 10; ++i) c.update(i,10*i*i) ;
+  count_min_sketch<uint64_t> c(n_hashes, n_buckets);
+  for (uint64_t i = 0; i < 10; ++i) c.update(i, 10 * i * i);
   c.serialize(s);
-  count_min_sketch<uint64_t> d = count_min_sketch<uint64_t>::deserialize(s, DEFAULT_SEED) ;
-  REQUIRE(c.get_num_hashes() == d.get_num_hashes()) ;
-  REQUIRE(c.get_num_buckets() == d.get_num_buckets()) ;
-  REQUIRE(c.get_seed() == d.get_seed()) ;
-  REQUIRE(c.get_total_weight() == d.get_total_weight()) ;
-  for(uint64_t i=0 ; i < 10; ++i){
-    REQUIRE(c.get_estimate(i) == d.get_estimate(i)) ;
+  count_min_sketch<uint64_t> d = count_min_sketch<uint64_t>::deserialize(s, DEFAULT_SEED);
+  REQUIRE(c.get_num_hashes() == d.get_num_hashes());
+  REQUIRE(c.get_num_buckets() == d.get_num_buckets());
+  REQUIRE(c.get_seed() == d.get_seed());
+  REQUIRE(c.get_total_weight() == d.get_total_weight());
+  for (uint64_t i = 0; i < 10; ++i) {
+    REQUIRE(c.get_estimate(i) == d.get_estimate(i));
   }
 
-  auto c_it = c.begin() ;
-  auto d_it = d.begin() ;
-  while(c_it != c.end()){
-    REQUIRE(*c_it == *d_it) ;
-    ++c_it ;
-    ++d_it ;
+  auto c_it = c.begin();
+  auto d_it = d.begin();
+  while (c_it != c.end()) {
+    REQUIRE(*c_it == *d_it);
+    ++c_it;
+    ++d_it;
   }
 
   std::ofstream os("count_min-non-empty.bin");
   c.serialize(os);
 }
 
-TEST_CASE("CountMin sketch: bytes serialize-deserialize empty", "[cm_sketch]"){
-  uint8_t n_hashes = 3 ;
-  uint32_t n_buckets = 32 ;
-  count_min_sketch<uint64_t> c(n_hashes, n_buckets) ;
-  auto bytes = c.serialize() ;
+TEST_CASE("CountMin sketch: bytes serialize-deserialize empty", "[cm_sketch]") {
+  uint8_t n_hashes = 3;
+  uint32_t n_buckets = 32;
+  count_min_sketch<uint64_t> c(n_hashes, n_buckets);
+  auto bytes = c.serialize();
 
   REQUIRE_THROWS_AS(count_min_sketch<uint64_t>::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED-1), std::invalid_argument);
-  auto d = count_min_sketch<uint64_t>::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED) ;
-  REQUIRE(c.get_num_hashes() == d.get_num_hashes()) ;
-  REQUIRE(c.get_num_buckets() == d.get_num_buckets()) ;
-  REQUIRE(c.get_seed() == d.get_seed()) ;
+  auto d = count_min_sketch<uint64_t>::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED);
+  REQUIRE(c.get_num_hashes() == d.get_num_hashes());
+  REQUIRE(c.get_num_buckets() == d.get_num_buckets());
+  REQUIRE(c.get_seed() == d.get_seed());
   uint64_t zero = 0;
-  REQUIRE(c.get_estimate(zero) == d.get_estimate(zero)) ;
-  REQUIRE(c.get_total_weight() == d.get_total_weight()) ;
+  REQUIRE(c.get_estimate(zero) == d.get_estimate(zero));
+  REQUIRE(c.get_total_weight() == d.get_total_weight());
 
   // Check that all entries are equal and 0
-  for(auto di: d){
-    REQUIRE(di == 0) ;
+  for (auto di: d) {
+    REQUIRE(di == 0);
   }
 }
 
 
-TEST_CASE("CountMin sketch: bytes serialize-deserialize non-empty", "[cm_sketch]"){
-  uint8_t n_hashes = 5 ;
-  uint32_t n_buckets = 64 ;
-  count_min_sketch<uint64_t> c(n_hashes, n_buckets) ;
-  for(uint64_t i=0 ; i < 10; ++i) c.update(i,10*i*i) ;
+TEST_CASE("CountMin sketch: bytes serialize-deserialize non-empty", "[cm_sketch]") {
+  uint8_t n_hashes = 5;
+  uint32_t n_buckets = 64;
+  count_min_sketch<uint64_t> c(n_hashes, n_buckets);
+  for(uint64_t i=0; i < 10; ++i) c.update(i,10*i*i);
 
-  auto bytes = c.serialize() ;
+  auto bytes = c.serialize();
   REQUIRE_THROWS_AS(count_min_sketch<uint64_t>::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED-1), std::invalid_argument);
-  auto d = count_min_sketch<uint64_t>::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED) ;
+  auto d = count_min_sketch<uint64_t>::deserialize(bytes.data(), bytes.size(), DEFAULT_SEED);
 
-  REQUIRE(c.get_num_hashes() == d.get_num_hashes()) ;
-  REQUIRE(c.get_num_buckets() == d.get_num_buckets()) ;
-  REQUIRE(c.get_seed() == d.get_seed()) ;
-  REQUIRE(c.get_total_weight() == d.get_total_weight()) ;
+  REQUIRE(c.get_num_hashes() == d.get_num_hashes());
+  REQUIRE(c.get_num_buckets() == d.get_num_buckets());
+  REQUIRE(c.get_seed() == d.get_seed());
+  REQUIRE(c.get_total_weight() == d.get_total_weight());
 
   // Check that all entries are equal
-  auto c_it = c.begin() ;
-  auto d_it = d.begin() ;
-  while(c_it != c.end()){
-    REQUIRE(*c_it == *d_it) ;
-    ++c_it ;
-    ++d_it ;
+  auto c_it = c.begin();
+  auto d_it = d.begin();
+  while (c_it != c.end()) {
+    REQUIRE(*c_it == *d_it);
+    ++c_it;
+    ++d_it;
   }
 
   // Check that the estimates agree
-  for(uint64_t i=0 ; i < 10; ++i){
-    REQUIRE(c.get_estimate(i) == d.get_estimate(i)) ;
+  for (uint64_t i = 0; i < 10; ++i) {
+    REQUIRE(c.get_estimate(i) == d.get_estimate(i));
   }
 
 }
 
 } /* namespace datasketches */
-
diff --git a/kll/include/kll_sketch_impl.hpp b/kll/include/kll_sketch_impl.hpp
index cced0ca..156058d 100644
--- a/kll/include/kll_sketch_impl.hpp
+++ b/kll/include/kll_sketch_impl.hpp
@@ -192,7 +192,7 @@
 template<typename FwdT>
 void kll_sketch<T, C, A>::update(FwdT&& item) {
   if (!check_update_item(item)) { return; }
-  update_min_max(item);
+  update_min_max(static_cast<const T&>(item)); // min and max are always copies
   const uint32_t index = internal_update();
   new (&items_[index]) T(std::forward<FwdT>(item));
   reset_sorted_view();
@@ -820,7 +820,7 @@
   for (uint8_t level = 0; level < num_levels_; ++level) {
     const auto from = items_ + levels_[level];
     const auto to = items_ + levels_[level + 1]; // exclusive
-    view.add(from, to, 1 << level);
+    view.add(from, to, 1ULL << level);
   }
   view.convert_to_cummulative();
   return view;
diff --git a/quantiles/include/quantiles_sketch_impl.hpp b/quantiles/include/quantiles_sketch_impl.hpp
index 7bd7d87..2c09f84 100644
--- a/quantiles/include/quantiles_sketch_impl.hpp
+++ b/quantiles/include/quantiles_sketch_impl.hpp
@@ -140,9 +140,9 @@
 max_item_(max_item.release()),
 sorted_view_(nullptr)
 {
-  uint32_t item_count = base_buffer_.size();
+  uint32_t item_count = static_cast<uint32_t>(base_buffer_.size());
   for (Level& lvl : levels_) {
-    item_count += lvl.size();
+    item_count += static_cast<uint32_t>(lvl.size());
   }
   if (item_count != compute_retained_items(k_, n_))
     throw std::logic_error("Item count does not match value computed from k, n");
diff --git a/req/include/req_sketch_impl.hpp b/req/include/req_sketch_impl.hpp
index 0096671..fb11676 100755
--- a/req/include/req_sketch_impl.hpp
+++ b/req/include/req_sketch_impl.hpp
@@ -310,7 +310,7 @@
   quantiles_sorted_view<T, C, A> view(get_num_retained(), comparator_, allocator_);
 
   for (auto& compactor: compactors_) {
-    view.add(compactor.begin(), compactor.end(), 1 << compactor.get_lg_weight());
+    view.add(compactor.begin(), compactor.end(), 1ULL << compactor.get_lg_weight());
   }
 
   view.convert_to_cummulative();
diff --git a/req/test/req_sketch_test.cpp b/req/test/req_sketch_test.cpp
index 9a8daa1..9af96be 100755
--- a/req/test/req_sketch_test.cpp
+++ b/req/test/req_sketch_test.cpp
@@ -555,11 +555,11 @@
 
 TEST_CASE("get_rank equivalence") {
   req_sketch<int> sketch(12);
-  const size_t n = 1000;
-  for (size_t i = 0; i < n; ++i) sketch.update(i);
+  const int n = 1000;
+  for (int i = 0; i < n; ++i) sketch.update(i);
   REQUIRE(sketch.get_n() == n);
   auto view = sketch.get_sorted_view();
-  for (size_t i = 0; i < n; ++i) {
+  for (int i = 0; i < n; ++i) {
     REQUIRE(sketch.get_rank(i) == view.get_rank(i));
   }
 }
diff --git a/theta/include/bit_packing.hpp b/theta/include/bit_packing.hpp
index d9ad42c..8515788 100644
--- a/theta/include/bit_packing.hpp
+++ b/theta/include/bit_packing.hpp
@@ -36,11 +36,11 @@
     bits -= chunk_bits;
   }
   while (bits >= 8) {
-    *ptr++ = value >> (bits - 8);
+    *ptr++ = static_cast<uint8_t>(value >> (bits - 8));
     bits -= 8;
   }
   if (bits > 0) {
-    *ptr = value << (8 - bits);
+    *ptr = static_cast<uint8_t>(value << (8 - bits));
     return bits;
   }
   return 0;
@@ -73,3146 +73,3146 @@
 // this assumption allows to avoid masking operations
 
 static inline void pack_bits_1(const uint64_t* values, uint8_t* ptr) {
-  *ptr = values[0] << 7;
-  *ptr |= values[1] << 6;
-  *ptr |= values[2] << 5;
-  *ptr |= values[3] << 4;
-  *ptr |= values[4] << 3;
-  *ptr |= values[5] << 2;
-  *ptr |= values[6] << 1;
-  *ptr |= values[7];
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr |= static_cast<uint8_t>(values[1] << 6);
+  *ptr |= static_cast<uint8_t>(values[2] << 5);
+  *ptr |= static_cast<uint8_t>(values[3] << 4);
+  *ptr |= static_cast<uint8_t>(values[4] << 3);
+  *ptr |= static_cast<uint8_t>(values[5] << 2);
+  *ptr |= static_cast<uint8_t>(values[6] << 1);
+  *ptr |= static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_2(const uint64_t* values, uint8_t* ptr) {
-  *ptr = values[0] << 6;
-  *ptr |= values[1] << 4;
-  *ptr |= values[2] << 2;
-  *ptr++ |= values[3];
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr |= static_cast<uint8_t>(values[1] << 4);
+  *ptr |= static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3]);
 
-  *ptr = values[4] << 6;
-  *ptr |= values[5] << 4;
-  *ptr |= values[6] << 2;
-  *ptr |= values[7];
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr |= static_cast<uint8_t>(values[5] << 4);
+  *ptr |= static_cast<uint8_t>(values[6] << 2);
+  *ptr |= static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_3(const uint64_t* values, uint8_t* ptr) {
-  *ptr = values[0] << 5;
-  *ptr |= values[1] << 2;
-  *ptr++ |= values[2] >> 1;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr |= static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr |= values[3] << 4;
-  *ptr |= values[4] << 1;
-  *ptr++ |= values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr |= static_cast<uint8_t>(values[3] << 4);
+  *ptr |= static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr |= values[6] << 3;
-  *ptr |= values[7];
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr |= static_cast<uint8_t>(values[6] << 3);
+  *ptr |= static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_4(const uint64_t* values, uint8_t* ptr) {
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1];
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1]);
 
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3]);
 
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5];
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5]);
 
-  *ptr = values[6] << 4;
-  *ptr |= values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 4);
+  *ptr |= static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_5(const uint64_t* values, uint8_t* ptr) {
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr |= values[2] << 1;
-  *ptr++ |= values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr |= static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 1;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr |= values[5] << 2;
-  *ptr++ |= values[6] >> 3;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr |= static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr |= values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr |= static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_6(const uint64_t* values, uint8_t* ptr) {
-  *ptr = values[0] << 2;
-  *ptr++ |= values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 2;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3]);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 2;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr |= values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 6);
+  *ptr |= static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_7(const uint64_t* values, uint8_t* ptr) {
-  *ptr = values[0] << 1;
-  *ptr++ |= values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 5;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 3;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 1;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr |= values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 7);
+  *ptr |= static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_8(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0];
-  *ptr++ = values[1];
-  *ptr++ = values[2];
-  *ptr++ = values[3];
-  *ptr++ = values[4];
-  *ptr++ = values[5];
-  *ptr++ = values[6];
-  *ptr = values[7];
+  *ptr++ = static_cast<uint8_t>(values[0]);
+  *ptr++ = static_cast<uint8_t>(values[1]);
+  *ptr++ = static_cast<uint8_t>(values[2]);
+  *ptr++ = static_cast<uint8_t>(values[3]);
+  *ptr++ = static_cast<uint8_t>(values[4]);
+  *ptr++ = static_cast<uint8_t>(values[5]);
+  *ptr++ = static_cast<uint8_t>(values[6]);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_9(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
 
-  *ptr = values[0] << 7;
-  *ptr++ |= values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 3;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 3);
 
-  *ptr = values[2] << 5;
-  *ptr++ |= values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 5;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 5);
 
-  *ptr = values[4] << 3;
-  *ptr++ |= values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 7;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 7);
 
-  *ptr = values[6] << 1;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_10(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
 
-  *ptr = values[0] << 6;
-  *ptr++ |= values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 6;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 6);
 
-  *ptr = values[2] << 2;
-  *ptr++ |= values[3] >> 8;
+  *ptr = static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
 
-  *ptr = values[4] << 6;
-  *ptr++ |= values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 6;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 6);
 
-  *ptr = values[6] << 2;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_11(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
 
-  *ptr = values[0] << 5;
-  *ptr++ |= values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 9;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 9);
 
-  *ptr++ = values[2] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr++ |= values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 7;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 7);
 
-  *ptr = values[4] << 1;
-  *ptr++ |= values[5] >> 10;
+  *ptr = static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 10);
 
-  *ptr++ = values[5] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 5;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 5);
 
-  *ptr = values[6] << 3;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_12(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
 
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1] >> 8;
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 8);
 
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
 
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3] >> 8;
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
 
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5] >> 8;
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 8);
 
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
 
-  *ptr = values[6] << 4;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_13(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
 
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 10;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 10);
 
-  *ptr++ = values[1] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 7;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 7);
 
-  *ptr = values[2] << 1;
-  *ptr++ |= values[3] >> 12;
+  *ptr = static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] >> 4;
-  *ptr++ |= values[4] >> 9;
+  *ptr = static_cast<uint8_t>(values[3] >> 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 9);
 
-  *ptr++ = values[4] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr++ |= values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 11;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 11);
 
-  *ptr++ = values[6] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_14(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
 
-  *ptr = values[0] << 2;
-  *ptr++ |= values[1] >> 12;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 12);
 
-  *ptr++ = values[1] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 10;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 10);
 
-  *ptr++ = values[2] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3] >> 8;
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 12;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 12);
 
-  *ptr++ = values[5] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 10;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 10);
 
-  *ptr++ = values[6] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_15(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
 
-  *ptr = values[0] << 1;
-  *ptr++ |= values[1] >> 14;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 14);
 
-  *ptr++ = values[1] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 13;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 13);
 
-  *ptr++ = values[2] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 12;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 11;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 11);
 
-  *ptr++ = values[4] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 10;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 10);
 
-  *ptr++ = values[5] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 9;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 9);
 
-  *ptr++ = values[6] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_16(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[0]);
 
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[2]);
 
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[4]);
 
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[6]);
 
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_17(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
 
-  *ptr++ = values[0] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
 
-  *ptr = values[0] << 7;
-  *ptr++ |= values[1] >> 10;
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 10);
 
-  *ptr++ = values[1] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 11;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 11);
 
-  *ptr++ = values[2] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
 
-  *ptr = values[2] << 5;
-  *ptr++ |= values[3] >> 12;
+  *ptr = static_cast<uint8_t>(values[2] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 13;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 13);
 
-  *ptr++ = values[4] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
 
-  *ptr = values[4] << 3;
-  *ptr++ |= values[5] >> 14;
+  *ptr = static_cast<uint8_t>(values[4] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 14);
 
-  *ptr++ = values[5] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 15;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 15);
 
-  *ptr++ = values[6] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
 
-  *ptr = values[6] << 1;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_18(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
 
-  *ptr++ = values[0] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
 
-  *ptr = values[0] << 6;
-  *ptr++ |= values[1] >> 12;
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 12);
 
-  *ptr++ = values[1] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 14;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 14);
 
-  *ptr++ = values[2] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
 
-  *ptr = values[2] << 2;
-  *ptr++ |= values[3] >> 16;
+  *ptr = static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 16);
 
-  *ptr++ = values[3] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
 
-  *ptr++ = values[4] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
 
-  *ptr = values[4] << 6;
-  *ptr++ |= values[5] >> 12;
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 12);
 
-  *ptr++ = values[5] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 14;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 14);
 
-  *ptr++ = values[6] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
 
-  *ptr = values[6] << 2;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_19(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
 
-  *ptr++ = values[0] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
 
-  *ptr = values[0] << 5;
-  *ptr++ |= values[1] >> 14;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 14);
 
-  *ptr++ = values[1] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 17;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 17);
 
-  *ptr++ = values[2] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
 
-  *ptr++ = values[2] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr++ |= values[3] >> 12;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 15;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 15);
 
-  *ptr++ |= values[4] >> 7;
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 7);
 
-  *ptr = values[4] << 1;
-  *ptr++ |= values[5] >> 18;
+  *ptr = static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 18);
 
-  *ptr++ = values[5] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
 
-  *ptr++ = values[5] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 13;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 13);
 
-  *ptr++ = values[6] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
 
-  *ptr = values[6] << 3;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_20(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
 
-  *ptr++ = values[0] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
 
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1] >> 16;
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 16);
 
-  *ptr++ = values[1] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
 
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
 
-  *ptr++ = values[2] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
 
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3] >> 16;
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 16);
 
-  *ptr++ = values[3] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
 
-  *ptr++ = values[4] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
 
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5] >> 16;
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 16);
 
-  *ptr++ = values[5] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
 
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
 
-  *ptr++ = values[6] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
 
-  *ptr = values[6] << 4;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_21(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 13;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
 
-  *ptr++ = values[0] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
 
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 18;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 18);
 
-  *ptr++ = values[1] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
 
-  *ptr++ = values[1] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 15;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 15);
 
-  *ptr++ = values[2] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
 
-  *ptr = values[2] << 1;
-  *ptr++ |= values[3] >> 20;
+  *ptr = static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
 
-  *ptr++ = values[3] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 17;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 17);
 
-  *ptr++ = values[4] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
 
-  *ptr++ = values[4] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr++ |= values[5] >> 14;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 14);
 
-  *ptr++ = values[5] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 19;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 19);
 
-  *ptr++ = values[6] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
 
-  *ptr++ = values[6] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_22(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
 
-  *ptr++ = values[0] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
 
-  *ptr = values[0] << 2;
-  *ptr++ |= values[1] >> 20;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 20);
 
-  *ptr++ = values[1] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
 
-  *ptr++ = values[1] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 18;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 18);
 
-  *ptr++ = values[2] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
 
-  *ptr++ = values[2] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3] >> 16;
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 16);
 
-  *ptr++ = values[3] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
 
-  *ptr++ = values[4] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 20;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 20);
 
-  *ptr++ = values[5] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
 
-  *ptr++ = values[5] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 18;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 18);
 
-  *ptr++ = values[6] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
 
-  *ptr++ = values[6] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_23(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 15;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
 
-  *ptr++ = values[0] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
 
-  *ptr = values[0] << 1;
-  *ptr++ |= values[1] >> 22;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 22);
 
-  *ptr++ = values[1] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
 
-  *ptr++ = values[1] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 21;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 21);
 
-  *ptr++ = values[2] >> 13;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
 
-  *ptr++ = values[2] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 20;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
 
-  *ptr++ = values[3] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 19;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 19);
 
-  *ptr++ = values[4] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
 
-  *ptr++ = values[4] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 18;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 18);
 
-  *ptr++ = values[5] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
 
-  *ptr++ = values[5] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 17;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 17);
 
-  *ptr++ = values[6] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
 
-  *ptr++ = values[6] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_24(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 16;
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[0]);
 
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 16;
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[2]);
 
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 16;
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[4]);
 
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 16;
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[6]);
 
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_25(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 17;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
 
-  *ptr++ = values[0] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
 
-  *ptr++ = values[0] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
 
-  *ptr = values[0] << 7;
-  *ptr++ |= values[1] >> 18;
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 18);
 
-  *ptr++ = values[1] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
 
-  *ptr++ = values[1] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 19;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 19);
 
-  *ptr++ = values[2] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
 
-  *ptr++ = values[2] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
 
-  *ptr = values[2] << 5;
-  *ptr++ |= values[3] >> 20;
+  *ptr = static_cast<uint8_t>(values[2] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
 
-  *ptr++ = values[3] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 21;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 21);
 
-  *ptr++ = values[4] >> 13;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
 
-  *ptr++ = values[4] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
 
-  *ptr = values[4] << 3;
-  *ptr++ |= values[5] >> 22;
+  *ptr = static_cast<uint8_t>(values[4] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 22);
 
-  *ptr++ = values[5] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
 
-  *ptr++ = values[5] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 23;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 23);
 
-  *ptr++ = values[6] >> 15;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
 
-  *ptr++ = values[6] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
 
-  *ptr = values[6] << 1;
-  *ptr++ |= values[7] >> 24;
+  *ptr = static_cast<uint8_t>(values[6] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
 
-  *ptr++ = values[7] >> 16;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_26(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 18;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
 
-  *ptr++ = values[0] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
 
-  *ptr++ = values[0] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
 
-  *ptr = values[0] << 6;
-  *ptr++ |= values[1] >> 20;
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 20);
 
-  *ptr++ = values[1] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
 
-  *ptr++ = values[1] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 22;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 22);
 
-  *ptr++ = values[2] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
 
-  *ptr++ = values[2] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
 
-  *ptr = values[2] << 2;
-  *ptr++ |= values[3] >> 24;
+  *ptr = static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 24);
 
-  *ptr++ = values[3] >> 16;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
 
-  *ptr++ = values[3] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 18;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
 
-  *ptr++ = values[4] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
 
-  *ptr++ = values[4] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
 
-  *ptr = values[4] << 6;
-  *ptr++ |= values[5] >> 20;
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 20);
 
-  *ptr++ = values[5] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
 
-  *ptr++ = values[5] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 22;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 22);
 
-  *ptr++ = values[6] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
 
-  *ptr++ = values[6] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
 
-  *ptr = values[6] << 2;
-  *ptr++ |= values[7] >> 24;
+  *ptr = static_cast<uint8_t>(values[6] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
 
-  *ptr++ = values[7] >> 16;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_27(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 19;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
 
-  *ptr++ = values[0] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
 
-  *ptr++ = values[0] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
 
-  *ptr = values[0] << 5;
-  *ptr++ |= values[1] >> 22;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 22);
 
-  *ptr++ = values[1] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
 
-  *ptr++ = values[1] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 25;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 25);
 
-  *ptr++ = values[2] >> 17;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
 
-  *ptr++ = values[2] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
 
-  *ptr++ = values[2] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr++ |= values[3] >> 20;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
 
-  *ptr++ = values[3] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 23;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 23);
 
-  *ptr++ = values[4] >> 15;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
 
-  *ptr++ = values[4] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
 
-  *ptr = values[4] << 1;
-  *ptr++ |= values[5] >> 26;
+  *ptr = static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 26);
 
-  *ptr++ = values[5] >> 18;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
 
-  *ptr++ = values[5] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
 
-  *ptr++ = values[5] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 21;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 21);
 
-  *ptr++ = values[6] >> 13;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
 
-  *ptr++ = values[6] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
 
-  *ptr = values[6] << 3;
-  *ptr++ |= values[7] >> 24;
+  *ptr = static_cast<uint8_t>(values[6] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
 
-  *ptr++ = values[7] >> 16;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_28(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 20;
-  *ptr++ = values[0] >> 12;
-  *ptr++ = values[0] >> 4;
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
-  *ptr++ = values[2] >> 20;
-  *ptr++ = values[2] >> 12;
-  *ptr++ = values[2] >> 4;
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
-  *ptr++ = values[4] >> 20;
-  *ptr++ = values[4] >> 12;
-  *ptr++ = values[4] >> 4;
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
-  *ptr++ = values[6] >> 20;
-  *ptr++ = values[6] >> 12;
-  *ptr++ = values[6] >> 4;
-  *ptr = values[6] << 4;
-  *ptr++ |= values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr++ = static_cast<uint8_t>(values[0] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
+  *ptr = static_cast<uint8_t>(values[6] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_29(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 21;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
 
-  *ptr++ = values[0] >> 13;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
 
-  *ptr++ = values[0] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
 
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 26;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 26);
 
-  *ptr++ = values[1] >> 18;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
 
-  *ptr++ = values[1] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
 
-  *ptr++ = values[1] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 23;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 23);
 
-  *ptr++ = values[2] >> 15;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
 
-  *ptr++ = values[2] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
 
-  *ptr = values[2] << 1;
-  *ptr++ |= values[3] >> 28;
+  *ptr = static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 28);
 
-  *ptr++ = values[3] >> 20;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
 
-  *ptr++ = values[3] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 25;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 25);
 
-  *ptr++ = values[4] >> 17;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
 
-  *ptr++ = values[4] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
 
-  *ptr++ = values[4] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr++ |= values[5] >> 22;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 22);
 
-  *ptr++ = values[5] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
 
-  *ptr++ = values[5] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 27;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 27);
 
-  *ptr++ = values[6] >> 19;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
 
-  *ptr++ = values[6] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
 
-  *ptr++ = values[6] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr++ |= values[7] >> 24;
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
 
-  *ptr++ = values[7] >> 16;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_30(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 22;
-  *ptr++ = values[0] >> 14;
-  *ptr++ = values[0] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
 
-  *ptr = values[0] << 2;
-  *ptr++ |= values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 26;
-  *ptr++ = values[2] >> 18;
-  *ptr++ = values[2] >> 10;
-  *ptr++ = values[2] >> 2;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 22;
-  *ptr++ = values[4] >> 14;
-  *ptr++ = values[4] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 26;
-  *ptr++ = values[6] >> 18;
-  *ptr++ = values[6] >> 10;
-  *ptr++ = values[6] >> 2;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr++ |= values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_31(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 23;
-  *ptr++ = values[0] >> 15;
-  *ptr++ = values[0] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
 
-  *ptr = values[0] << 1;
-  *ptr++ |= values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 29;
-  *ptr++ = values[2] >> 21;
-  *ptr++ = values[2] >> 13;
-  *ptr++ = values[2] >> 5;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 27;
-  *ptr++ = values[4] >> 19;
-  *ptr++ = values[4] >> 11;
-  *ptr++ = values[4] >> 3;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 25;
-  *ptr++ = values[6] >> 17;
-  *ptr++ = values[6] >> 9;
-  *ptr++ = values[6] >> 1;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr++ |= values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_32(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 24;
-  *ptr++ = values[0] >> 16;
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *ptr++ = static_cast<uint8_t>(values[0] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[0]);
 
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 24;
-  *ptr++ = values[2] >> 16;
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *ptr++ = static_cast<uint8_t>(values[2] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[2]);
 
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 24;
-  *ptr++ = values[4] >> 16;
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *ptr++ = static_cast<uint8_t>(values[4] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[4]);
 
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 24;
-  *ptr++ = values[6] >> 16;
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *ptr++ = static_cast<uint8_t>(values[6] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[6]);
 
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_33(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 25;
-  *ptr++ = values[0] >> 17;
-  *ptr++ = values[0] >> 9;
-  *ptr++ = values[0] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
 
-  *ptr = values[0] << 7;
-  *ptr++ |= values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 27;
-  *ptr++ = values[2] >> 19;
-  *ptr++ = values[2] >> 11;
-  *ptr++ = values[2] >> 3;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
 
-  *ptr = values[2] << 5;
-  *ptr++ |= values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 29;
-  *ptr++ = values[4] >> 21;
-  *ptr++ = values[4] >> 13;
-  *ptr++ = values[4] >> 5;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
 
-  *ptr = values[4] << 3;
-  *ptr++ |= values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 31;
-  *ptr++ = values[6] >> 23;
-  *ptr++ = values[6] >> 15;
-  *ptr++ = values[6] >> 7;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
 
-  *ptr = values[6] << 1;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_34(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 26;
-  *ptr++ = values[0] >> 18;
-  *ptr++ = values[0] >> 10;
-  *ptr++ = values[0] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
 
-  *ptr = values[0] << 6;
-  *ptr++ |= values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 30;
-  *ptr++ = values[2] >> 22;
-  *ptr++ = values[2] >> 14;
-  *ptr++ = values[2] >> 6;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
 
-  *ptr = values[2] << 2;
-  *ptr++ |= values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 26;
-  *ptr++ = values[4] >> 18;
-  *ptr++ = values[4] >> 10;
-  *ptr++ = values[4] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
 
-  *ptr = values[4] << 6;
-  *ptr++ |= values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 30;
-  *ptr++ = values[6] >> 22;
-  *ptr++ = values[6] >> 14;
-  *ptr++ = values[6] >> 6;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
 
-  *ptr = values[6] << 2;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_35(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 27;
-  *ptr++ = values[0] >> 19;
-  *ptr++ = values[0] >> 11;
-  *ptr++ = values[0] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
 
-  *ptr = values[0] << 5;
-  *ptr++ |= values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 33;
-  *ptr++ = values[2] >> 25;
-  *ptr++ = values[2] >> 17;
-  *ptr++ = values[2] >> 9;
-  *ptr++ = values[2] >> 1;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr++ |= values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 31;
-  *ptr++ = values[4] >> 23;
-  *ptr++ = values[4] >> 15;
-  *ptr++ = values[4] >> 7;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
 
-  *ptr = values[4] << 1;
-  *ptr++ |= values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 29;
-  *ptr++ = values[6] >> 21;
-  *ptr++ = values[6] >> 13;
-  *ptr++ = values[6] >> 5;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
 
-  *ptr = values[6] << 3;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_36(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 28;
-  *ptr++ = values[0] >> 20;
-  *ptr++ = values[0] >> 12;
-  *ptr++ = values[0] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
 
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 28;
-  *ptr++ = values[2] >> 20;
-  *ptr++ = values[2] >> 12;
-  *ptr++ = values[2] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
 
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 28;
-  *ptr++ = values[4] >> 20;
-  *ptr++ = values[4] >> 12;
-  *ptr++ = values[4] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
 
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 28;
-  *ptr++ = values[6] >> 20;
-  *ptr++ = values[6] >> 12;
-  *ptr++ = values[6] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
 
-  *ptr = values[6] << 4;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_37(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 29;
-  *ptr++ = values[0] >> 21;
-  *ptr++ = values[0] >> 13;
-  *ptr++ = values[0] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
 
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 31;
-  *ptr++ = values[2] >> 23;
-  *ptr++ = values[2] >> 15;
-  *ptr++ = values[2] >> 7;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
 
-  *ptr = values[2] << 1;
-  *ptr++ |= values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 33;
-  *ptr++ = values[4] >> 25;
-  *ptr++ = values[4] >> 17;
-  *ptr++ = values[4] >> 9;
-  *ptr++ = values[4] >> 1;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr++ |= values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 35;
-  *ptr++ = values[6] >> 27;
-  *ptr++ = values[6] >> 19;
-  *ptr++ = values[6] >> 11;
-  *ptr++ = values[6] >> 3;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_38(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 30;
-  *ptr++ = values[0] >> 22;
-  *ptr++ = values[0] >> 14;
-  *ptr++ = values[0] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
 
-  *ptr = values[0] << 2;
-  *ptr++ |= values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 34;
-  *ptr++ = values[2] >> 26;
-  *ptr++ = values[2] >> 18;
-  *ptr++ = values[2] >> 10;
-  *ptr++ = values[2] >> 2;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 30;
-  *ptr++ = values[4] >> 22;
-  *ptr++ = values[4] >> 14;
-  *ptr++ = values[4] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 34;
-  *ptr++ = values[6] >> 26;
-  *ptr++ = values[6] >> 18;
-  *ptr++ = values[6] >> 10;
-  *ptr++ = values[6] >> 2;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_39(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 31;
-  *ptr++ = values[0] >> 23;
-  *ptr++ = values[0] >> 15;
-  *ptr++ = values[0] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
 
-  *ptr = values[0] << 1;
-  *ptr++ |= values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 37;
-  *ptr++ = values[2] >> 29;
-  *ptr++ = values[2] >> 21;
-  *ptr++ = values[2] >> 13;
-  *ptr++ = values[2] >> 5;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 35;
-  *ptr++ = values[4] >> 27;
-  *ptr++ = values[4] >> 19;
-  *ptr++ = values[4] >> 11;
-  *ptr++ = values[4] >> 3;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 33;
-  *ptr++ = values[6] >> 25;
-  *ptr++ = values[6] >> 17;
-  *ptr++ = values[6] >> 9;
-  *ptr++ = values[6] >> 1;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_40(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 32;
-  *ptr++ = values[0] >> 24;
-  *ptr++ = values[0] >> 16;
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *ptr++ = static_cast<uint8_t>(values[0] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[0]);
 
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 32;
-  *ptr++ = values[2] >> 24;
-  *ptr++ = values[2] >> 16;
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *ptr++ = static_cast<uint8_t>(values[2] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[2]);
 
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 32;
-  *ptr++ = values[4] >> 24;
-  *ptr++ = values[4] >> 16;
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *ptr++ = static_cast<uint8_t>(values[4] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[4]);
 
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 32;
-  *ptr++ = values[6] >> 24;
-  *ptr++ = values[6] >> 16;
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *ptr++ = static_cast<uint8_t>(values[6] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[6]);
 
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_41(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 33;
-  *ptr++ = values[0] >> 25;
-  *ptr++ = values[0] >> 17;
-  *ptr++ = values[0] >> 9;
-  *ptr++ = values[0] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
 
-  *ptr = values[0] << 7;
-  *ptr++ |= values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 35;
-  *ptr++ = values[2] >> 27;
-  *ptr++ = values[2] >> 19;
-  *ptr++ = values[2] >> 11;
-  *ptr++ = values[2] >> 3;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
 
-  *ptr = values[2] << 5;
-  *ptr++ |= values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 37;
-  *ptr++ = values[4] >> 29;
-  *ptr++ = values[4] >> 21;
-  *ptr++ = values[4] >> 13;
-  *ptr++ = values[4] >> 5;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
 
-  *ptr = values[4] << 3;
-  *ptr++ |= values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 39;
-  *ptr++ = values[6] >> 31;
-  *ptr++ = values[6] >> 23;
-  *ptr++ = values[6] >> 15;
-  *ptr++ = values[6] >> 7;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
 
-  *ptr = values[6] << 1;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_42(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 34;
-  *ptr++ = values[0] >> 26;
-  *ptr++ = values[0] >> 18;
-  *ptr++ = values[0] >> 10;
-  *ptr++ = values[0] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
 
-  *ptr = values[0] << 6;
-  *ptr++ |= values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 38;
-  *ptr++ = values[2] >> 30;
-  *ptr++ = values[2] >> 22;
-  *ptr++ = values[2] >> 14;
-  *ptr++ = values[2] >> 6;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
 
-  *ptr = values[2] << 2;
-  *ptr++ |= values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 34;
-  *ptr++ = values[4] >> 26;
-  *ptr++ = values[4] >> 18;
-  *ptr++ = values[4] >> 10;
-  *ptr++ = values[4] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
 
-  *ptr = values[4] << 6;
-  *ptr++ |= values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 38;
-  *ptr++ = values[6] >> 30;
-  *ptr++ = values[6] >> 22;
-  *ptr++ = values[6] >> 14;
-  *ptr++ = values[6] >> 6;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
 
-  *ptr = values[6] << 2;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_43(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 35;
-  *ptr++ = values[0] >> 27;
-  *ptr++ = values[0] >> 19;
-  *ptr++ = values[0] >> 11;
-  *ptr++ = values[0] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
 
-  *ptr = values[0] << 5;
-  *ptr++ |= values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 41;
-  *ptr++ = values[2] >> 33;
-  *ptr++ = values[2] >> 25;
-  *ptr++ = values[2] >> 17;
-  *ptr++ = values[2] >> 9;
-  *ptr++ = values[2] >> 1;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr++ |= values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 39;
-  *ptr++ = values[4] >> 31;
-  *ptr++ = values[4] >> 23;
-  *ptr++ = values[4] >> 15;
-  *ptr++ = values[4] >> 7;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
 
-  *ptr = values[4] << 1;
-  *ptr++ |= values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 37;
-  *ptr++ = values[6] >> 29;
-  *ptr++ = values[6] >> 21;
-  *ptr++ = values[6] >> 13;
-  *ptr++ = values[6] >> 5;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
 
-  *ptr = values[6] << 3;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_44(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 36;
-  *ptr++ = values[0] >> 28;
-  *ptr++ = values[0] >> 20;
-  *ptr++ = values[0] >> 12;
-  *ptr++ = values[0] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
 
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1] >> 40;
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 36;
-  *ptr++ = values[2] >> 28;
-  *ptr++ = values[2] >> 20;
-  *ptr++ = values[2] >> 12;
-  *ptr++ = values[2] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
 
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 36;
-  *ptr++ = values[4] >> 28;
-  *ptr++ = values[4] >> 20;
-  *ptr++ = values[4] >> 12;
-  *ptr++ = values[4] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
 
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5] >> 40;
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 36;
-  *ptr++ = values[6] >> 28;
-  *ptr++ = values[6] >> 20;
-  *ptr++ = values[6] >> 12;
-  *ptr++ = values[6] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
 
-  *ptr = values[6] << 4;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_45(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 37;
-  *ptr++ = values[0] >> 29;
-  *ptr++ = values[0] >> 21;
-  *ptr++ = values[0] >> 13;
-  *ptr++ = values[0] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
 
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 42;
-  *ptr++ = values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 39;
-  *ptr++ = values[2] >> 31;
-  *ptr++ = values[2] >> 23;
-  *ptr++ = values[2] >> 15;
-  *ptr++ = values[2] >> 7;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
 
-  *ptr = values[2] << 1;
-  *ptr++ |= values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 41;
-  *ptr++ = values[4] >> 33;
-  *ptr++ = values[4] >> 25;
-  *ptr++ = values[4] >> 17;
-  *ptr++ = values[4] >> 9;
-  *ptr++ = values[4] >> 1;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr++ |= values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 43;
-  *ptr++ = values[6] >> 35;
-  *ptr++ = values[6] >> 27;
-  *ptr++ = values[6] >> 19;
-  *ptr++ = values[6] >> 11;
-  *ptr++ = values[6] >> 3;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 43);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_46(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 38;
-  *ptr++ = values[0] >> 30;
-  *ptr++ = values[0] >> 22;
-  *ptr++ = values[0] >> 14;
-  *ptr++ = values[0] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
 
-  *ptr = values[0] << 2;
-  *ptr++ |= values[1] >> 44;
-  *ptr++ = values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 42;
-  *ptr++ = values[2] >> 34;
-  *ptr++ = values[2] >> 26;
-  *ptr++ = values[2] >> 18;
-  *ptr++ = values[2] >> 10;
-  *ptr++ = values[2] >> 2;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 38;
-  *ptr++ = values[4] >> 30;
-  *ptr++ = values[4] >> 22;
-  *ptr++ = values[4] >> 14;
-  *ptr++ = values[4] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 44;
-  *ptr++ = values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 42;
-  *ptr++ = values[6] >> 34;
-  *ptr++ = values[6] >> 26;
-  *ptr++ = values[6] >> 18;
-  *ptr++ = values[6] >> 10;
-  *ptr++ = values[6] >> 2;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_47(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 39;
-  *ptr++ = values[0] >> 31;
-  *ptr++ = values[0] >> 23;
-  *ptr++ = values[0] >> 15;
-  *ptr++ = values[0] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
 
-  *ptr = values[0] << 1;
-  *ptr++ |= values[1] >> 46;
-  *ptr++ = values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 45;
-  *ptr++ = values[2] >> 37;
-  *ptr++ = values[2] >> 29;
-  *ptr++ = values[2] >> 21;
-  *ptr++ = values[2] >> 13;
-  *ptr++ = values[2] >> 5;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 45);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 43;
-  *ptr++ = values[4] >> 35;
-  *ptr++ = values[4] >> 27;
-  *ptr++ = values[4] >> 19;
-  *ptr++ = values[4] >> 11;
-  *ptr++ = values[4] >> 3;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 43);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 41;
-  *ptr++ = values[6] >> 33;
-  *ptr++ = values[6] >> 25;
-  *ptr++ = values[6] >> 17;
-  *ptr++ = values[6] >> 9;
-  *ptr++ = values[6] >> 1;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_48(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 40;
-  *ptr++ = values[0] >> 32;
-  *ptr++ = values[0] >> 24;
-  *ptr++ = values[0] >> 16;
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *ptr++ = static_cast<uint8_t>(values[0] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[0]);
 
-  *ptr++ = values[1] >> 40;
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 40;
-  *ptr++ = values[2] >> 32;
-  *ptr++ = values[2] >> 24;
-  *ptr++ = values[2] >> 16;
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *ptr++ = static_cast<uint8_t>(values[2] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[2]);
 
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 40;
-  *ptr++ = values[4] >> 32;
-  *ptr++ = values[4] >> 24;
-  *ptr++ = values[4] >> 16;
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *ptr++ = static_cast<uint8_t>(values[4] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[4]);
 
-  *ptr++ = values[5] >> 40;
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 40;
-  *ptr++ = values[6] >> 32;
-  *ptr++ = values[6] >> 24;
-  *ptr++ = values[6] >> 16;
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *ptr++ = static_cast<uint8_t>(values[6] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[6]);
 
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_49(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 41;
-  *ptr++ = values[0] >> 33;
-  *ptr++ = values[0] >> 25;
-  *ptr++ = values[0] >> 17;
-  *ptr++ = values[0] >> 9;
-  *ptr++ = values[0] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
 
-  *ptr = values[0] << 7;
-  *ptr++ |= values[1] >> 42;
-  *ptr++ = values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 43;
-  *ptr++ = values[2] >> 35;
-  *ptr++ = values[2] >> 27;
-  *ptr++ = values[2] >> 19;
-  *ptr++ = values[2] >> 11;
-  *ptr++ = values[2] >> 3;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 43);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
 
-  *ptr = values[2] << 5;
-  *ptr++ |= values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 45;
-  *ptr++ = values[4] >> 37;
-  *ptr++ = values[4] >> 29;
-  *ptr++ = values[4] >> 21;
-  *ptr++ = values[4] >> 13;
-  *ptr++ = values[4] >> 5;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 45);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
 
-  *ptr = values[4] << 3;
-  *ptr++ |= values[5] >> 46;
-  *ptr++ = values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 47;
-  *ptr++ = values[6] >> 39;
-  *ptr++ = values[6] >> 31;
-  *ptr++ = values[6] >> 23;
-  *ptr++ = values[6] >> 15;
-  *ptr++ = values[6] >> 7;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 47);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
 
-  *ptr = values[6] << 1;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_50(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 42;
-  *ptr++ = values[0] >> 34;
-  *ptr++ = values[0] >> 26;
-  *ptr++ = values[0] >> 18;
-  *ptr++ = values[0] >> 10;
-  *ptr++ = values[0] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
 
-  *ptr = values[0] << 6;
-  *ptr++ |= values[1] >> 44;
-  *ptr++ = values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 46;
-  *ptr++ = values[2] >> 38;
-  *ptr++ = values[2] >> 30;
-  *ptr++ = values[2] >> 22;
-  *ptr++ = values[2] >> 14;
-  *ptr++ = values[2] >> 6;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
 
-  *ptr = values[2] << 2;
-  *ptr++ |= values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 42;
-  *ptr++ = values[4] >> 34;
-  *ptr++ = values[4] >> 26;
-  *ptr++ = values[4] >> 18;
-  *ptr++ = values[4] >> 10;
-  *ptr++ = values[4] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
 
-  *ptr = values[4] << 6;
-  *ptr++ |= values[5] >> 44;
-  *ptr++ = values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 46;
-  *ptr++ = values[6] >> 38;
-  *ptr++ = values[6] >> 30;
-  *ptr++ = values[6] >> 22;
-  *ptr++ = values[6] >> 14;
-  *ptr++ = values[6] >> 6;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
 
-  *ptr = values[6] << 2;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_51(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 43;
-  *ptr++ = values[0] >> 35;
-  *ptr++ = values[0] >> 27;
-  *ptr++ = values[0] >> 19;
-  *ptr++ = values[0] >> 11;
-  *ptr++ = values[0] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 43);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
 
-  *ptr = values[0] << 5;
-  *ptr++ |= values[1] >> 46;
-  *ptr++ = values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 49;
-  *ptr++ = values[2] >> 41;
-  *ptr++ = values[2] >> 33;
-  *ptr++ = values[2] >> 25;
-  *ptr++ = values[2] >> 17;
-  *ptr++ = values[2] >> 9;
-  *ptr++ = values[2] >> 1;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 49);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr++ |= values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 47;
-  *ptr++ = values[4] >> 39;
-  *ptr++ = values[4] >> 31;
-  *ptr++ = values[4] >> 23;
-  *ptr++ = values[4] >> 15;
-  *ptr++ = values[4] >> 7;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 47);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
 
-  *ptr = values[4] << 1;
-  *ptr++ |= values[5] >> 50;
-  *ptr++ = values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 45;
-  *ptr++ = values[6] >> 37;
-  *ptr++ = values[6] >> 29;
-  *ptr++ = values[6] >> 21;
-  *ptr++ = values[6] >> 13;
-  *ptr++ = values[6] >> 5;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 45);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
 
-  *ptr = values[6] << 3;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_52(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 44;
-  *ptr++ = values[0] >> 36;
-  *ptr++ = values[0] >> 28;
-  *ptr++ = values[0] >> 20;
-  *ptr++ = values[0] >> 12;
-  *ptr++ = values[0] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
 
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1] >> 48;
-  *ptr++ = values[1] >> 40;
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 44;
-  *ptr++ = values[2] >> 36;
-  *ptr++ = values[2] >> 28;
-  *ptr++ = values[2] >> 20;
-  *ptr++ = values[2] >> 12;
-  *ptr++ = values[2] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
 
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 44;
-  *ptr++ = values[4] >> 36;
-  *ptr++ = values[4] >> 28;
-  *ptr++ = values[4] >> 20;
-  *ptr++ = values[4] >> 12;
-  *ptr++ = values[4] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
 
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5] >> 48;
-  *ptr++ = values[5] >> 40;
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 44;
-  *ptr++ = values[6] >> 36;
-  *ptr++ = values[6] >> 28;
-  *ptr++ = values[6] >> 20;
-  *ptr++ = values[6] >> 12;
-  *ptr++ = values[6] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
 
-  *ptr = values[6] << 4;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_53(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 45;
-  *ptr++ = values[0] >> 37;
-  *ptr++ = values[0] >> 29;
-  *ptr++ = values[0] >> 21;
-  *ptr++ = values[0] >> 13;
-  *ptr++ = values[0] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 45);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
 
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 50;
-  *ptr++ = values[1] >> 42;
-  *ptr++ = values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 47;
-  *ptr++ = values[2] >> 39;
-  *ptr++ = values[2] >> 31;
-  *ptr++ = values[2] >> 23;
-  *ptr++ = values[2] >> 15;
-  *ptr++ = values[2] >> 7;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 47);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
 
-  *ptr = values[2] << 1;
-  *ptr++ |= values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 49;
-  *ptr++ = values[4] >> 41;
-  *ptr++ = values[4] >> 33;
-  *ptr++ = values[4] >> 25;
-  *ptr++ = values[4] >> 17;
-  *ptr++ = values[4] >> 9;
-  *ptr++ = values[4] >> 1;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 49);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr++ |= values[5] >> 46;
-  *ptr++ = values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 51;
-  *ptr++ = values[6] >> 43;
-  *ptr++ = values[6] >> 35;
-  *ptr++ = values[6] >> 27;
-  *ptr++ = values[6] >> 19;
-  *ptr++ = values[6] >> 11;
-  *ptr++ = values[6] >> 3;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 51);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 43);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_54(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 46;
-  *ptr++ = values[0] >> 38;
-  *ptr++ = values[0] >> 30;
-  *ptr++ = values[0] >> 22;
-  *ptr++ = values[0] >> 14;
-  *ptr++ = values[0] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
 
-  *ptr = values[0] << 2;
-  *ptr++ |= values[1] >> 52;
-  *ptr++ = values[1] >> 44;
-  *ptr++ = values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 50;
-  *ptr++ = values[2] >> 42;
-  *ptr++ = values[2] >> 34;
-  *ptr++ = values[2] >> 26;
-  *ptr++ = values[2] >> 18;
-  *ptr++ = values[2] >> 10;
-  *ptr++ = values[2] >> 2;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 46;
-  *ptr++ = values[4] >> 38;
-  *ptr++ = values[4] >> 30;
-  *ptr++ = values[4] >> 22;
-  *ptr++ = values[4] >> 14;
-  *ptr++ = values[4] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 52;
-  *ptr++ = values[5] >> 44;
-  *ptr++ = values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 50;
-  *ptr++ = values[6] >> 42;
-  *ptr++ = values[6] >> 34;
-  *ptr++ = values[6] >> 26;
-  *ptr++ = values[6] >> 18;
-  *ptr++ = values[6] >> 10;
-  *ptr++ = values[6] >> 2;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_55(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 47;
-  *ptr++ = values[0] >> 39;
-  *ptr++ = values[0] >> 31;
-  *ptr++ = values[0] >> 23;
-  *ptr++ = values[0] >> 15;
-  *ptr++ = values[0] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 47);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
 
-  *ptr = values[0] << 1;
-  *ptr++ |= values[1] >> 54;
-  *ptr++ = values[1] >> 46;
-  *ptr++ = values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 54);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 53;
-  *ptr++ = values[2] >> 45;
-  *ptr++ = values[2] >> 37;
-  *ptr++ = values[2] >> 29;
-  *ptr++ = values[2] >> 21;
-  *ptr++ = values[2] >> 13;
-  *ptr++ = values[2] >> 5;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 53);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 45);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 51;
-  *ptr++ = values[4] >> 43;
-  *ptr++ = values[4] >> 35;
-  *ptr++ = values[4] >> 27;
-  *ptr++ = values[4] >> 19;
-  *ptr++ = values[4] >> 11;
-  *ptr++ = values[4] >> 3;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 51);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 43);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 50;
-  *ptr++ = values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 49;
-  *ptr++ = values[6] >> 41;
-  *ptr++ = values[6] >> 33;
-  *ptr++ = values[6] >> 25;
-  *ptr++ = values[6] >> 17;
-  *ptr++ = values[6] >> 9;
-  *ptr++ = values[6] >> 1;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 49);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_56(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 48;
-  *ptr++ = values[0] >> 40;
-  *ptr++ = values[0] >> 32;
-  *ptr++ = values[0] >> 24;
-  *ptr++ = values[0] >> 16;
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *ptr++ = static_cast<uint8_t>(values[0] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[0]);
 
-  *ptr++ = values[1] >> 48;
-  *ptr++ = values[1] >> 40;
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 48;
-  *ptr++ = values[2] >> 40;
-  *ptr++ = values[2] >> 32;
-  *ptr++ = values[2] >> 24;
-  *ptr++ = values[2] >> 16;
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *ptr++ = static_cast<uint8_t>(values[2] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[2]);
 
-  *ptr++ = values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 48;
-  *ptr++ = values[4] >> 40;
-  *ptr++ = values[4] >> 32;
-  *ptr++ = values[4] >> 24;
-  *ptr++ = values[4] >> 16;
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *ptr++ = static_cast<uint8_t>(values[4] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[4]);
 
-  *ptr++ = values[5] >> 48;
-  *ptr++ = values[5] >> 40;
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 48;
-  *ptr++ = values[6] >> 40;
-  *ptr++ = values[6] >> 32;
-  *ptr++ = values[6] >> 24;
-  *ptr++ = values[6] >> 16;
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *ptr++ = static_cast<uint8_t>(values[6] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[6]);
 
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_57(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 49;
-  *ptr++ = values[0] >> 41;
-  *ptr++ = values[0] >> 33;
-  *ptr++ = values[0] >> 25;
-  *ptr++ = values[0] >> 17;
-  *ptr++ = values[0] >> 9;
-  *ptr++ = values[0] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 49);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
 
-  *ptr = values[0] << 7;
-  *ptr++ |= values[1] >> 50;
-  *ptr++ = values[1] >> 42;
-  *ptr++ = values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 51;
-  *ptr++ = values[2] >> 43;
-  *ptr++ = values[2] >> 35;
-  *ptr++ = values[2] >> 27;
-  *ptr++ = values[2] >> 19;
-  *ptr++ = values[2] >> 11;
-  *ptr++ = values[2] >> 3;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 51);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 43);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
 
-  *ptr = values[2] << 5;
-  *ptr++ |= values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 53;
-  *ptr++ = values[4] >> 45;
-  *ptr++ = values[4] >> 37;
-  *ptr++ = values[4] >> 29;
-  *ptr++ = values[4] >> 21;
-  *ptr++ = values[4] >> 13;
-  *ptr++ = values[4] >> 5;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 53);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 45);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
 
-  *ptr = values[4] << 3;
-  *ptr++ |= values[5] >> 54;
-  *ptr++ = values[5] >> 46;
-  *ptr++ = values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 54);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 55;
-  *ptr++ = values[6] >> 47;
-  *ptr++ = values[6] >> 39;
-  *ptr++ = values[6] >> 31;
-  *ptr++ = values[6] >> 23;
-  *ptr++ = values[6] >> 15;
-  *ptr++ = values[6] >> 7;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 55);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 47);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
 
-  *ptr = values[6] << 1;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_58(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 50;
-  *ptr++ = values[0] >> 42;
-  *ptr++ = values[0] >> 34;
-  *ptr++ = values[0] >> 26;
-  *ptr++ = values[0] >> 18;
-  *ptr++ = values[0] >> 10;
-  *ptr++ = values[0] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
 
-  *ptr = values[0] << 6;
-  *ptr++ |= values[1] >> 52;
-  *ptr++ = values[1] >> 44;
-  *ptr++ = values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 54;
-  *ptr++ = values[2] >> 46;
-  *ptr++ = values[2] >> 38;
-  *ptr++ = values[2] >> 30;
-  *ptr++ = values[2] >> 22;
-  *ptr++ = values[2] >> 14;
-  *ptr++ = values[2] >> 6;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 54);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
 
-  *ptr = values[2] << 2;
-  *ptr++ |= values[3] >> 56;
-  *ptr++ = values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 50;
-  *ptr++ = values[4] >> 42;
-  *ptr++ = values[4] >> 34;
-  *ptr++ = values[4] >> 26;
-  *ptr++ = values[4] >> 18;
-  *ptr++ = values[4] >> 10;
-  *ptr++ = values[4] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
 
-  *ptr = values[4] << 6;
-  *ptr++ |= values[5] >> 52;
-  *ptr++ = values[5] >> 44;
-  *ptr++ = values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 54;
-  *ptr++ = values[6] >> 46;
-  *ptr++ = values[6] >> 38;
-  *ptr++ = values[6] >> 30;
-  *ptr++ = values[6] >> 22;
-  *ptr++ = values[6] >> 14;
-  *ptr++ = values[6] >> 6;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 54);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
 
-  *ptr = values[6] << 2;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_59(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 51;
-  *ptr++ = values[0] >> 43;
-  *ptr++ = values[0] >> 35;
-  *ptr++ = values[0] >> 27;
-  *ptr++ = values[0] >> 19;
-  *ptr++ = values[0] >> 11;
-  *ptr++ = values[0] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 51);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 43);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
 
-  *ptr = values[0] << 5;
-  *ptr++ |= values[1] >> 54;
-  *ptr++ = values[1] >> 46;
-  *ptr++ = values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 54);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 57;
-  *ptr++ = values[2] >> 49;
-  *ptr++ = values[2] >> 41;
-  *ptr++ = values[2] >> 33;
-  *ptr++ = values[2] >> 25;
-  *ptr++ = values[2] >> 17;
-  *ptr++ = values[2] >> 9;
-  *ptr++ = values[2] >> 1;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 57);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 49);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr++ |= values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 55;
-  *ptr++ = values[4] >> 47;
-  *ptr++ = values[4] >> 39;
-  *ptr++ = values[4] >> 31;
-  *ptr++ = values[4] >> 23;
-  *ptr++ = values[4] >> 15;
-  *ptr++ = values[4] >> 7;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 55);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 47);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
 
-  *ptr = values[4] << 1;
-  *ptr++ |= values[5] >> 58;
-  *ptr++ = values[5] >> 50;
-  *ptr++ = values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 58);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 53;
-  *ptr++ = values[6] >> 45;
-  *ptr++ = values[6] >> 37;
-  *ptr++ = values[6] >> 29;
-  *ptr++ = values[6] >> 21;
-  *ptr++ = values[6] >> 13;
-  *ptr++ = values[6] >> 5;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 53);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 45);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
 
-  *ptr = values[6] << 3;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_60(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 52;
-  *ptr++ = values[0] >> 44;
-  *ptr++ = values[0] >> 36;
-  *ptr++ = values[0] >> 28;
-  *ptr++ = values[0] >> 20;
-  *ptr++ = values[0] >> 12;
-  *ptr++ = values[0] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
 
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1] >> 56;
-  *ptr++ = values[1] >> 48;
-  *ptr++ = values[1] >> 40;
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 52;
-  *ptr++ = values[2] >> 44;
-  *ptr++ = values[2] >> 36;
-  *ptr++ = values[2] >> 28;
-  *ptr++ = values[2] >> 20;
-  *ptr++ = values[2] >> 12;
-  *ptr++ = values[2] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
 
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3] >> 56;
-  *ptr++ = values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 52;
-  *ptr++ = values[4] >> 44;
-  *ptr++ = values[4] >> 36;
-  *ptr++ = values[4] >> 28;
-  *ptr++ = values[4] >> 20;
-  *ptr++ = values[4] >> 12;
-  *ptr++ = values[4] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
 
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5] >> 56;
-  *ptr++ = values[5] >> 48;
-  *ptr++ = values[5] >> 40;
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 52;
-  *ptr++ = values[6] >> 44;
-  *ptr++ = values[6] >> 36;
-  *ptr++ = values[6] >> 28;
-  *ptr++ = values[6] >> 20;
-  *ptr++ = values[6] >> 12;
-  *ptr++ = values[6] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
 
-  *ptr = values[6] << 4;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_61(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 53;
-  *ptr++ = values[0] >> 45;
-  *ptr++ = values[0] >> 37;
-  *ptr++ = values[0] >> 29;
-  *ptr++ = values[0] >> 21;
-  *ptr++ = values[0] >> 13;
-  *ptr++ = values[0] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 53);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 45);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
 
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 58;
-  *ptr++ = values[1] >> 50;
-  *ptr++ = values[1] >> 42;
-  *ptr++ = values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 58);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 55;
-  *ptr++ = values[2] >> 47;
-  *ptr++ = values[2] >> 39;
-  *ptr++ = values[2] >> 31;
-  *ptr++ = values[2] >> 23;
-  *ptr++ = values[2] >> 15;
-  *ptr++ = values[2] >> 7;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 55);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 47);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
 
-  *ptr = values[2] << 1;
-  *ptr++ |= values[3] >> 60;
-  *ptr++ = values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 60);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 57;
-  *ptr++ = values[4] >> 49;
-  *ptr++ = values[4] >> 41;
-  *ptr++ = values[4] >> 33;
-  *ptr++ = values[4] >> 25;
-  *ptr++ = values[4] >> 17;
-  *ptr++ = values[4] >> 9;
-  *ptr++ = values[4] >> 1;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 57);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 49);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr++ |= values[5] >> 54;
-  *ptr++ = values[5] >> 46;
-  *ptr++ = values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 54);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 59;
-  *ptr++ = values[6] >> 51;
-  *ptr++ = values[6] >> 43;
-  *ptr++ = values[6] >> 35;
-  *ptr++ = values[6] >> 27;
-  *ptr++ = values[6] >> 19;
-  *ptr++ = values[6] >> 11;
-  *ptr++ = values[6] >> 3;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 59);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 51);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 43);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_62(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 54;
-  *ptr++ = values[0] >> 46;
-  *ptr++ = values[0] >> 38;
-  *ptr++ = values[0] >> 30;
-  *ptr++ = values[0] >> 22;
-  *ptr++ = values[0] >> 14;
-  *ptr++ = values[0] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 54);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
 
-  *ptr = values[0] << 2;
-  *ptr++ |= values[1] >> 60;
-  *ptr++ = values[1] >> 52;
-  *ptr++ = values[1] >> 44;
-  *ptr++ = values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 60);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 58;
-  *ptr++ = values[2] >> 50;
-  *ptr++ = values[2] >> 42;
-  *ptr++ = values[2] >> 34;
-  *ptr++ = values[2] >> 26;
-  *ptr++ = values[2] >> 18;
-  *ptr++ = values[2] >> 10;
-  *ptr++ = values[2] >> 2;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 58);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3] >> 56;
-  *ptr++ = values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 54;
-  *ptr++ = values[4] >> 46;
-  *ptr++ = values[4] >> 38;
-  *ptr++ = values[4] >> 30;
-  *ptr++ = values[4] >> 22;
-  *ptr++ = values[4] >> 14;
-  *ptr++ = values[4] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 54);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 60;
-  *ptr++ = values[5] >> 52;
-  *ptr++ = values[5] >> 44;
-  *ptr++ = values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 60);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 58;
-  *ptr++ = values[6] >> 50;
-  *ptr++ = values[6] >> 42;
-  *ptr++ = values[6] >> 34;
-  *ptr++ = values[6] >> 26;
-  *ptr++ = values[6] >> 18;
-  *ptr++ = values[6] >> 10;
-  *ptr++ = values[6] >> 2;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 58);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_63(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 55;
-  *ptr++ = values[0] >> 47;
-  *ptr++ = values[0] >> 39;
-  *ptr++ = values[0] >> 31;
-  *ptr++ = values[0] >> 23;
-  *ptr++ = values[0] >> 15;
-  *ptr++ = values[0] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 55);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 47);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 39);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 31);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 23);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
 
-  *ptr = values[0] << 1;
-  *ptr++ |= values[1] >> 62;
-  *ptr++ = values[1] >> 54;
-  *ptr++ = values[1] >> 46;
-  *ptr++ = values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 62);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 54);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 46);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 38);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 61;
-  *ptr++ = values[2] >> 53;
-  *ptr++ = values[2] >> 45;
-  *ptr++ = values[2] >> 37;
-  *ptr++ = values[2] >> 29;
-  *ptr++ = values[2] >> 21;
-  *ptr++ = values[2] >> 13;
-  *ptr++ = values[2] >> 5;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 61);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 53);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 45);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 37);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 29);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 21);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 60;
-  *ptr++ = values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 60);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 52);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 59;
-  *ptr++ = values[4] >> 51;
-  *ptr++ = values[4] >> 43;
-  *ptr++ = values[4] >> 35;
-  *ptr++ = values[4] >> 27;
-  *ptr++ = values[4] >> 19;
-  *ptr++ = values[4] >> 11;
-  *ptr++ = values[4] >> 3;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 59);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 51);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 43);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 35);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 27);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 19);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 58;
-  *ptr++ = values[5] >> 50;
-  *ptr++ = values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 58);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 50);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 42);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 57;
-  *ptr++ = values[6] >> 49;
-  *ptr++ = values[6] >> 41;
-  *ptr++ = values[6] >> 33;
-  *ptr++ = values[6] >> 25;
-  *ptr++ = values[6] >> 17;
-  *ptr++ = values[6] >> 9;
-  *ptr++ = values[6] >> 1;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 57);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 49);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 41);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 33);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 25);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 17);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[6] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void unpack_bits_1(uint64_t* values, const uint8_t* ptr) {
diff --git a/theta/include/theta_helpers.hpp b/theta/include/theta_helpers.hpp
index 0b98cab..cbdebb4 100644
--- a/theta/include/theta_helpers.hpp
+++ b/theta/include/theta_helpers.hpp
@@ -57,7 +57,7 @@
   // consistent way of initializing theta from p
   // avoids multiplication if p == 1 since it might not yield MAX_THETA exactly
   static uint64_t starting_theta_from_p(float p) {
-    if (p < 1) return static_cast<float>(theta_constants::MAX_THETA) * p;
+    if (p < 1) return static_cast<uint64_t>(theta_constants::MAX_THETA * p);
     return theta_constants::MAX_THETA;
   }
 
diff --git a/theta/include/theta_sketch_impl.hpp b/theta/include/theta_sketch_impl.hpp
index 06b3139..e5e5050 100644
--- a/theta/include/theta_sketch_impl.hpp
+++ b/theta/include/theta_sketch_impl.hpp
@@ -357,7 +357,7 @@
   write(os, flags_byte);
   write(os, get_seed_hash());
   if (preamble_longs > 1) {
-    write<uint32_t>(os, entries_.size());
+    write(os, static_cast<uint32_t>(entries_.size()));
     write<uint32_t>(os, 0); // unused
   }
   if (this->is_estimation_mode()) write(os, this->theta_);
@@ -385,7 +385,7 @@
   *ptr++ = flags_byte;
   ptr += copy_to_mem(get_seed_hash(), ptr);
   if (preamble_longs > 1) {
-    ptr += copy_to_mem<uint32_t>(entries_.size(), ptr);
+    ptr += copy_to_mem(static_cast<uint32_t>(entries_.size()), ptr);
     ptr += sizeof(uint32_t); // unused
   }
   if (this->is_estimation_mode()) ptr += copy_to_mem(theta_, ptr);
@@ -432,7 +432,7 @@
   const uint8_t entry_bits = 64 - compute_min_leading_zeros();
 
   // store num_entries as whole bytes since whole-byte blocks will follow (most probably)
-  const uint8_t num_entries_bytes = whole_bytes_to_hold_bits<uint8_t>(32 - count_leading_zeros_in_u32(entries_.size()));
+  const uint8_t num_entries_bytes = whole_bytes_to_hold_bits<uint8_t>(32 - count_leading_zeros_in_u32(static_cast<uint32_t>(entries_.size())));
 
   write(os, preamble_longs);
   write(os, COMPRESSED_SERIAL_VERSION);
@@ -447,7 +447,7 @@
   write(os, flags_byte);
   write(os, get_seed_hash());
   if (this->is_estimation_mode()) write(os, this->theta_);
-  uint32_t num_entries = entries_.size();
+  uint32_t num_entries = static_cast<uint32_t>(entries_.size());
   for (unsigned i = 0; i < num_entries_bytes; ++i) {
     write<uint8_t>(os, num_entries & 0xff);
     num_entries >>= 8;
@@ -488,7 +488,7 @@
   const size_t compressed_bits = entry_bits * entries_.size();
 
   // store num_entries as whole bytes since whole-byte blocks will follow (most probably)
-  const uint8_t num_entries_bytes = whole_bytes_to_hold_bits<uint8_t>(32 - count_leading_zeros_in_u32(entries_.size()));
+  const uint8_t num_entries_bytes = whole_bytes_to_hold_bits<uint8_t>(32 - count_leading_zeros_in_u32(static_cast<uint32_t>(entries_.size())));
 
   const size_t size = header_size_bytes + sizeof(uint64_t) * preamble_longs + num_entries_bytes
       + whole_bytes_to_hold_bits(compressed_bits);
@@ -510,7 +510,7 @@
   if (this->is_estimation_mode()) {
     ptr += copy_to_mem(theta_, ptr);
   }
-  uint32_t num_entries = entries_.size();
+  uint32_t num_entries = static_cast<uint32_t>(entries_.size());
   for (unsigned i = 0; i < num_entries_bytes; ++i) {
     *ptr++ = num_entries & 0xff;
     num_entries >>= 8;
diff --git a/tuple/test/engagement_test.cpp b/tuple/test/engagement_test.cpp
index 05d5cfc..e91fef5 100644
--- a/tuple/test/engagement_test.cpp
+++ b/tuple/test/engagement_test.cpp
@@ -42,11 +42,11 @@
 public:
     always_one_policy(): initial_value(1) {}
     T create() const { return 1; }
-    void update(T&, const T&) const { }
+    void update(T&, const T&) const {}
 private:
     T initial_value;
 };
-using always_one_tuple_sketch = datasketches::update_tuple_sketch<int, int, always_one_policy<int>> ;
+using always_one_tuple_sketch = datasketches::update_tuple_sketch<int, int, always_one_policy<int>>;
 
 template<typename T>
 class update_sum_value_policy {
@@ -66,20 +66,20 @@
     }
 };
 
-using sum_union_tuple_sketch = datasketches::tuple_union<int,  union_sum_value_policy<int>> ;
+using sum_union_tuple_sketch = datasketches::tuple_union<int, union_sum_value_policy<int>>;
 
 
-class EngagementTest{
+class EngagementTest {
 public:
-    int num_std_dev = 2 ;
-    void test_always_one_update(){
+    uint8_t num_std_dev = 2;
+    void test_always_one_update() {
         /*
          * Tests that updates into an update_tuple_sketch sketch only keeps a 1 in the column for stored values.
          */
-        int lgK = 8 ;
-        std::vector<datasketches::update_tuple_sketch<int, int, always_one_policy<int>>> sketch_array ;
+        uint8_t lgK = 8;
+        std::vector<datasketches::update_tuple_sketch<int, int, always_one_policy<int>>> sketch_array;
 
-        auto always_one_sketch = always_one_tuple_sketch::builder(always_one_policy<int>()).set_lg_k(lgK).build() ;
+        auto always_one_sketch = always_one_tuple_sketch::builder(always_one_policy<int>()).set_lg_k(lgK).build();
 
         always_one_sketch.update(1, 1);
         always_one_sketch.update(1, 2);
@@ -97,12 +97,12 @@
         REQUIRE(sum == 3); // we only keep 1 for every stored key.
     }
 
-    void test_sum_update_policy(){
+    void test_sum_update_policy() {
         /*
         * Tests that updates into an sum_update_tuple_sketch sum the stored values on updates.
         */
-        int lgK = 8 ;
-        auto sum_sketch = sum_update_tuple_sketch::builder().set_lg_k(lgK).build() ;
+        uint8_t lgK = 8;
+        auto sum_sketch = sum_update_tuple_sketch::builder().set_lg_k(lgK).build();
 
         sum_sketch.update(1, 1);
         sum_sketch.update(1, 2);
@@ -124,8 +124,8 @@
          * Tests that updates into two sketches of sum_update_tuple_sketch flavour, which have been unioned,
          * cause the stored values of two of the same keys to be summed.
          */
-        auto sketch1 = sum_update_tuple_sketch::builder().build() ;
-        auto sketch2 = sum_update_tuple_sketch::builder().build() ;
+        auto sketch1 = sum_update_tuple_sketch::builder().build();
+        auto sketch2 = sum_update_tuple_sketch::builder().build();
 
         sketch1.update(1, 1);
         sketch1.update(2, 1);
@@ -135,10 +135,10 @@
         sketch2.update(2, 1);
         sketch2.update(3, 7);
 
-        auto union_sketch = sum_union_tuple_sketch::builder().build() ;
-        union_sketch.update(sketch1) ;
-        union_sketch.update(sketch2) ;
-        auto union_result = union_sketch.get_result() ;
+        auto union_sketch = sum_union_tuple_sketch::builder().build();
+        union_sketch.update(sketch1);
+        union_sketch.update(sketch2);
+        auto union_result = union_sketch.get_result();
 
         int num_retained = 0;
         int sum = 0;
@@ -150,95 +150,95 @@
         REQUIRE(sum == 15); // 1:(1+2) + 2:(1+1) + 3:(3+7) = 15
     }
 
-    void compute_engagement_histogram(){
+    void compute_engagement_histogram() {
         /*
          * Returns the estimated histogram from the synthetic data.
          * On inspection one can verify this agrees with the
          * https://github.com/apache/datasketches-java/blob/master/src/test/java/org/apache/datasketches/tuple/aninteger/EngagementTest.java
          */
-        int lgK = 8 ;
-        const int days = 30 ;
-        int v = 0 ;
+        uint8_t lgK = 8;
+        const int days = 30;
+        int v = 0;
         std::set<int> set_array[days];
-        std::vector<datasketches::update_tuple_sketch<int, int, always_one_policy<int>>> sketch_array ;
+        std::vector<datasketches::update_tuple_sketch<int, int, always_one_policy<int>>> sketch_array;
 
 
-        for(int i=0; i<days ; i++){
-            auto builder = always_one_tuple_sketch::builder(always_one_policy<int>()) ;
-            builder.set_lg_k(lgK) ;
-            auto sketch = builder.build() ;
+        for (int i = 0; i < days; ++i) {
+            auto builder = always_one_tuple_sketch::builder(always_one_policy<int>());
+            builder.set_lg_k(lgK);
+            auto sketch = builder.build();
             sketch_array.push_back(sketch);
         }
-        REQUIRE(sketch_array.size() == days) ;
+        REQUIRE(sketch_array.size() == days);
 
-        for(int i=0; i<=days; i++){
-            int32_t num_ids = get_num_ids(days, i) ;
-            int32_t num_days = get_num_days(days, i) ;
+        for (int i = 0; i <= days; ++i) {
+            int32_t num_ids = get_num_ids(days, i);
+            int32_t num_days = get_num_days(days, i);
 
-            int my_v = v++ ;
-            for(int d=0 ; d<num_days; d++){
-                for(int id = 0; id < num_ids; id++){
-                    set_array[d].insert(my_v + id) ;
-                    sketch_array[d].update(my_v + id, 1) ;
+            int my_v = v++;
+            for (int d = 0; d < num_days; ++d) {
+                for (int id = 0; id < num_ids; ++id) {
+                    set_array[d].insert(my_v + id);
+                    sketch_array[d].update(my_v + id, 1);
                 }
             }
-            v += num_ids ;
+            v += num_ids;
         }
-        union_ops(lgK, sketch_array) ;
+        union_ops(lgK, sketch_array);
     }
 private:
-    int32_t get_num_ids(int total_days, int index){
+    int32_t get_num_ids(int total_days, int index) {
         /*
          * Generates power law distributed synthetic data
          */
-        double d = total_days ;
-        double i = index ;
-        return int(round(exp(i * log(d) / d))) ;
+        double d = total_days;
+        double i = index;
+        return int(round(exp(i * log(d) / d)));
     }
 
-    int32_t get_num_days(int total_days, int index){
-        double d = total_days ;
-        double i = index ;
-        return int(round(exp( (d-i) * log(d) / d ))) ;
+    int32_t get_num_days(int total_days, int index) {
+        double d = total_days;
+        double i = index;
+        return int(round(exp((d-i) * log(d) / d )));
     }
 
-    int32_t round_double_to_int(double x){
-        return int(std::round(x)) ;
+    int32_t round_double_to_int(double x) {
+        return int(std::round(x));
     }
 
-    void union_ops(int lgk, std::vector<datasketches::update_tuple_sketch<int, int, always_one_policy<int>>> sketches){
-        int num_sketches = sketches.size() ;
-        auto u = sum_union_tuple_sketch::builder().set_lg_k(lgk).build() ;
+    void union_ops(uint8_t lgk, std::vector<datasketches::update_tuple_sketch<int, int, always_one_policy<int>>> sketches) {
+        auto num_sketches = sketches.size();
+        auto u = sum_union_tuple_sketch::builder().set_lg_k(lgk).build();
 
-        for(auto sk:sketches){
-            u.update(sk) ;
+        for (auto sk: sketches) {
+            u.update(sk);
         }
-        auto union_result = u.get_result() ;
-        std::vector<uint64_t> num_days_arr(num_sketches+1) ;
+        auto union_result = u.get_result();
+        std::vector<uint64_t> num_days_arr(num_sketches+1);
 
         for (const auto& entry: union_result) {
-            int num_days_visited = entry.second ;
-            num_days_arr[num_days_visited]++;
+            int num_days_visited = entry.second;
+            ++num_days_arr[num_days_visited];
         }
 
-        int sum_visits = 0;
+        uint64_t sum_visits = 0;
         double theta = union_result.get_theta();
-        std::cout <<"\t\tEngagement Histogram.\t\t\t\n" ;
-        std::cout << "Number of Unique Visitors by Number of Days Visited" << std::endl ;
-        std::cout << "---------------------------------------------------" << std::endl ;
+        std::cout <<"\t\tEngagement Histogram.\t\t\t\n";
+        std::cout << "Number of Unique Visitors by Number of Days Visited" << std::endl;
+        std::cout << "---------------------------------------------------" << std::endl;
 
         std::cout << std::setw(12) << "Days Visited"
                   << std::setw(12) << "Estimate"
                   << std::setw(12) << "LB"
                   << std::setw(12) << "UB"
-                  << std:: endl ;
+                  << std:: endl;
 
-        for (uint64_t i = 0; i < num_days_arr.size(); i++) {
-            int visitors_at_days_visited = num_days_arr[i] ;
-            if(visitors_at_days_visited == 0){ continue; }
-            sum_visits += visitors_at_days_visited * i ;
+        for (size_t i = 0; i < num_days_arr.size(); ++i) {
+            auto visitors_at_days_visited = num_days_arr[i];
+            if (visitors_at_days_visited == 0) continue;
+            sum_visits += visitors_at_days_visited * i;
 
-            double est_visitors_at_days_visited = visitors_at_days_visited / theta ;
+            double est_visitors_at_days_visited = visitors_at_days_visited / theta;
             double lower_bound_at_days_visited =  union_result.get_lower_bound(num_std_dev, visitors_at_days_visited);
             double upper_bound_at_days_visited =  union_result.get_upper_bound(num_std_dev, visitors_at_days_visited);
 
@@ -246,27 +246,25 @@
                       << std::setw(12) << est_visitors_at_days_visited
                       << std::setw(12) << lower_bound_at_days_visited
                       << std::setw(12) << upper_bound_at_days_visited
-                      << std:: endl ;
-
-    }
-        std::cout << std::endl << std::endl ;
+                      << std:: endl;
+        }
+        std::cout << std::endl << std::endl;
         std::cout << std::setw(12) << "Totals"
                   << std::setw(12) << "Estimate"
                   << std::setw(12) << "LB"
                   << std::setw(12) << "UB"
-                  << std:: endl ;
-        std::cout << "---------------------------------------------------" << std::endl ;
+                  << std:: endl;
+        std::cout << "---------------------------------------------------" << std::endl;
 
-        const double total_visitors = union_result.get_estimate() ;
-        const double lb_visitors = union_result.get_lower_bound(num_std_dev) ;
-        const double ub_visitors = union_result.get_upper_bound(num_std_dev) ;
-
+        const double total_visitors = union_result.get_estimate();
+        const double lb_visitors = union_result.get_lower_bound(num_std_dev);
+        const double ub_visitors = union_result.get_upper_bound(num_std_dev);
 
         std::cout << std::setw(12) << "Visitors"
                   << std::setw(12) << total_visitors
                   << std::setw(12) << lb_visitors
                   << std::setw(12) << ub_visitors
-                  << std:: endl ;
+                  << std:: endl;
 
         // The total number of visits, however, is a scaled metric and takes advantage of the fact that
         // the retained entries in the sketch is a uniform random sample of all unique visitors, and
@@ -275,25 +273,23 @@
         const double lb_visits = est_visits * lb_visitors / total_visitors;
         const double ub_visits = est_visits * ub_visitors / total_visitors;
 
-
         std::cout << std::setw(12) << "Visits"
                   << std::setw(12) << est_visits
                   << std::setw(12) << lb_visits
                   << std::setw(12) << ub_visits
-                  << std:: endl ;
+                  << std:: endl;
     }
 
 };
 
 namespace datasketches {
 
-    TEST_CASE("engagement", "[engagement]") {
-    EngagementTest E ;
-    E.test_always_one_update() ;
-    E.test_sum_update_policy() ;
-    E.test_sum_union_policy() ;
-    E.compute_engagement_histogram() ;
-}
+  TEST_CASE("engagement", "[engagement]") {
+    EngagementTest E;
+    E.test_always_one_update();
+    E.test_sum_update_policy();
+    E.test_sum_union_policy();
+    E.compute_engagement_histogram();
+  }
 
-
-} /* namespace datasketches */
\ No newline at end of file
+} /* namespace datasketches */