// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file is generated by net/tools/transport_security_state_generator/.
// See transport_security_state_static.template for more information on the data
// in this file.

#include <stdint.h>

#include "base/stl_util.h"
#include "net/http/transport_security_state_source.h"

[[SPKI_HASHES]]

static const char* const kExpectCTReportURIs[] = [[EXPECT_CT_REPORT_URIS]];

static const char* const kNoRejectedPublicKeys[] = {
    NULL,
};

[[ACCEPTABLE_CERTS]]

static const struct net::TransportSecurityStateSource::Pinset kPinsets[] = [[PINSETS]];

static const uint8_t kHSTSHuffmanTree[] = [[HUFFMAN_TREE]];

static const uint8_t kPreloadedHSTSData[] = [[HSTS_TRIE]];

static const unsigned kPreloadedHSTSBits = [[HSTS_TRIE_BITS]];
static const unsigned kHSTSRootPosition = [[HSTS_TRIE_ROOT]];

static const net::TransportSecurityStateSource kHSTSSource = {
  kHSTSHuffmanTree,
  sizeof(kHSTSHuffmanTree),
  kPreloadedHSTSData,
  kPreloadedHSTSBits,
  kHSTSRootPosition,
  kExpectCTReportURIs,
  kPinsets,
  base::size(kPinsets)
};
