blob: f2c6c5f6a2087d17f2a45f83c1a282a399c68fc7 [file] [log] [blame]
// gpu/ipc/common/vulkan_types.mojom.h is auto generated by mojom_bindings_generator.py, do not edit
// Copyright 2013 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.
#ifndef GPU_IPC_COMMON_VULKAN_TYPES_MOJOM_H_
#define GPU_IPC_COMMON_VULKAN_TYPES_MOJOM_H_
#include <stdint.h>
#include <limits>
#include <type_traits>
#include <utility>
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "mojo/public/cpp/bindings/clone_traits.h"
#include "mojo/public/cpp/bindings/equals_traits.h"
#include "mojo/public/cpp/bindings/lib/serialization.h"
#include "mojo/public/cpp/bindings/struct_ptr.h"
#include "mojo/public/cpp/bindings/struct_traits.h"
#include "mojo/public/cpp/bindings/union_traits.h"
#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"
#include "gpu/ipc/common/vulkan_types.mojom-shared.h"
#include "gpu/ipc/common/vulkan_types.mojom-forward.h"
#include <string>
#include <vector>
#include "gpu/ipc/common/vulkan_types_mojom_traits.h"
#include "gpu/gpu_export.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace gpu {
namespace mojom {
// @generated_from: gpu.mojom.VkExtensionProperties
class GPU_EXPORT VkExtensionProperties {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VkExtensionProperties, T>::value>;
using DataView = VkExtensionPropertiesDataView;
using Data_ = internal::VkExtensionProperties_Data;
template <typename... Args>
static VkExtensionPropertiesPtr New(Args&&... args) {
return VkExtensionPropertiesPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VkExtensionPropertiesPtr From(const U& u) {
return mojo::TypeConverter<VkExtensionPropertiesPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VkExtensionProperties>::Convert(*this);
}
VkExtensionProperties();
VkExtensionProperties(
const std::string& extensionName,
uint32_t specVersion);
~VkExtensionProperties();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VkExtensionPropertiesPtr>
VkExtensionPropertiesPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VkExtensionProperties::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VkExtensionProperties::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VkExtensionProperties::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VkExtensionProperties::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VkExtensionProperties_UnserializedMessageContext<
UserType, VkExtensionProperties::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VkExtensionProperties::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VkExtensionProperties::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VkExtensionProperties_UnserializedMessageContext<
UserType, VkExtensionProperties::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VkExtensionProperties::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: gpu.mojom.VkExtensionProperties.extensionName
std::string extensionName;
// @generated_from: gpu.mojom.VkExtensionProperties.specVersion
uint32_t specVersion;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VkExtensionProperties::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VkExtensionProperties::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VkExtensionProperties::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VkExtensionProperties::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: gpu.mojom.VkLayerProperties
class GPU_EXPORT VkLayerProperties {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VkLayerProperties, T>::value>;
using DataView = VkLayerPropertiesDataView;
using Data_ = internal::VkLayerProperties_Data;
template <typename... Args>
static VkLayerPropertiesPtr New(Args&&... args) {
return VkLayerPropertiesPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VkLayerPropertiesPtr From(const U& u) {
return mojo::TypeConverter<VkLayerPropertiesPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VkLayerProperties>::Convert(*this);
}
VkLayerProperties();
VkLayerProperties(
const std::string& layerName,
uint32_t specVersion,
uint32_t implementationVersion,
const std::string& description);
~VkLayerProperties();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VkLayerPropertiesPtr>
VkLayerPropertiesPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VkLayerProperties::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VkLayerProperties::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VkLayerProperties::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VkLayerProperties::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VkLayerProperties_UnserializedMessageContext<
UserType, VkLayerProperties::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VkLayerProperties::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VkLayerProperties::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VkLayerProperties_UnserializedMessageContext<
UserType, VkLayerProperties::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VkLayerProperties::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: gpu.mojom.VkLayerProperties.layerName
std::string layerName;
// @generated_from: gpu.mojom.VkLayerProperties.specVersion
uint32_t specVersion;
// @generated_from: gpu.mojom.VkLayerProperties.implementationVersion
uint32_t implementationVersion;
// @generated_from: gpu.mojom.VkLayerProperties.description
std::string description;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VkLayerProperties::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VkLayerProperties::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VkLayerProperties::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VkLayerProperties::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: gpu.mojom.VkExtent3D
class GPU_EXPORT VkExtent3D {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VkExtent3D, T>::value>;
using DataView = VkExtent3DDataView;
using Data_ = internal::VkExtent3D_Data;
template <typename... Args>
static VkExtent3DPtr New(Args&&... args) {
return VkExtent3DPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VkExtent3DPtr From(const U& u) {
return mojo::TypeConverter<VkExtent3DPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VkExtent3D>::Convert(*this);
}
VkExtent3D();
VkExtent3D(
uint32_t width,
uint32_t height,
uint32_t depth);
~VkExtent3D();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VkExtent3DPtr>
VkExtent3DPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VkExtent3D::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VkExtent3D::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VkExtent3D::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VkExtent3D::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VkExtent3D_UnserializedMessageContext<
UserType, VkExtent3D::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VkExtent3D::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VkExtent3D::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VkExtent3D_UnserializedMessageContext<
UserType, VkExtent3D::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VkExtent3D::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: gpu.mojom.VkExtent3D.width
uint32_t width;
// @generated_from: gpu.mojom.VkExtent3D.height
uint32_t height;
// @generated_from: gpu.mojom.VkExtent3D.depth
uint32_t depth;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VkExtent3D::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VkExtent3D::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VkExtent3D::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VkExtent3D::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits
class GPU_EXPORT VkPhysicalDeviceLimits {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VkPhysicalDeviceLimits, T>::value>;
using DataView = VkPhysicalDeviceLimitsDataView;
using Data_ = internal::VkPhysicalDeviceLimits_Data;
template <typename... Args>
static VkPhysicalDeviceLimitsPtr New(Args&&... args) {
return VkPhysicalDeviceLimitsPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VkPhysicalDeviceLimitsPtr From(const U& u) {
return mojo::TypeConverter<VkPhysicalDeviceLimitsPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VkPhysicalDeviceLimits>::Convert(*this);
}
VkPhysicalDeviceLimits();
VkPhysicalDeviceLimits(
uint32_t maxImageDimension1D,
uint32_t maxImageDimension2D,
uint32_t maxImageDimension3D,
uint32_t maxImageDimensionCube,
uint32_t maxImageArrayLayers,
uint32_t maxTexelBufferElements,
uint32_t maxUniformBufferRange,
uint32_t maxStorageBufferRange,
uint32_t maxPushConstantsSize,
uint32_t maxMemoryAllocationCount,
uint32_t maxSamplerAllocationCount,
uint64_t bufferImageGranularity,
uint64_t sparseAddressSpaceSize,
uint32_t maxBoundDescriptorSets,
uint32_t maxPerStageDescriptorSamplers,
uint32_t maxPerStageDescriptorUniformBuffers,
uint32_t maxPerStageDescriptorStorageBuffers,
uint32_t maxPerStageDescriptorSampledImages,
uint32_t maxPerStageDescriptorStorageImages,
uint32_t maxPerStageDescriptorInputAttachments,
uint32_t maxPerStageResources,
uint32_t maxDescriptorSetSamplers,
uint32_t maxDescriptorSetUniformBuffers,
uint32_t maxDescriptorSetUniformBuffersDynamic,
uint32_t maxDescriptorSetStorageBuffers,
uint32_t maxDescriptorSetStorageBuffersDynamic,
uint32_t maxDescriptorSetSampledImages,
uint32_t maxDescriptorSetStorageImages,
uint32_t maxDescriptorSetInputAttachments,
uint32_t maxVertexInputAttributes,
uint32_t maxVertexInputBindings,
uint32_t maxVertexInputAttributeOffset,
uint32_t maxVertexInputBindingStride,
uint32_t maxVertexOutputComponents,
uint32_t maxTessellationGenerationLevel,
uint32_t maxTessellationPatchSize,
uint32_t maxTessellationControlPerVertexInputComponents,
uint32_t maxTessellationControlPerVertexOutputComponents,
uint32_t maxTessellationControlPerPatchOutputComponents,
uint32_t maxTessellationControlTotalOutputComponents,
uint32_t maxTessellationEvaluationInputComponents,
uint32_t maxTessellationEvaluationOutputComponents,
uint32_t maxGeometryShaderInvocations,
uint32_t maxGeometryInputComponents,
uint32_t maxGeometryOutputComponents,
uint32_t maxGeometryOutputVertices,
uint32_t maxGeometryTotalOutputComponents,
uint32_t maxFragmentInputComponents,
uint32_t maxFragmentOutputAttachments,
uint32_t maxFragmentDualSrcAttachments,
uint32_t maxFragmentCombinedOutputResources,
uint32_t maxComputeSharedMemorySize,
std::vector<uint32_t> maxComputeWorkGroupCount,
uint32_t maxComputeWorkGroupInvocations,
std::vector<uint32_t> maxComputeWorkGroupSize,
uint32_t subPixelPrecisionBits,
uint32_t subTexelPrecisionBits,
uint32_t mipmapPrecisionBits,
uint32_t maxDrawIndexedIndexValue,
uint32_t maxDrawIndirectCount,
float maxSamplerLodBias,
float maxSamplerAnisotropy,
uint32_t maxViewports,
std::vector<uint32_t> maxViewportDimensions,
std::vector<float> viewportBoundsRange,
uint32_t viewportSubPixelBits,
uint64_t minMemoryMapAlignment,
uint64_t minTexelBufferOffsetAlignment,
uint64_t minUniformBufferOffsetAlignment,
uint64_t minStorageBufferOffsetAlignment,
int32_t minTexelOffset,
uint32_t maxTexelOffset,
int32_t minTexelGatherOffset,
uint32_t maxTexelGatherOffset,
float minInterpolationOffset,
float maxInterpolationOffset,
uint32_t subPixelInterpolationOffsetBits,
uint32_t maxFramebufferWidth,
uint32_t maxFramebufferHeight,
uint32_t maxFramebufferLayers,
uint32_t framebufferColorSampleCounts,
uint32_t framebufferDepthSampleCounts,
uint32_t framebufferStencilSampleCounts,
uint32_t framebufferNoAttachmentsSampleCounts,
uint32_t maxColorAttachments,
uint32_t sampledImageColorSampleCounts,
uint32_t sampledImageIntegerSampleCounts,
uint32_t sampledImageDepthSampleCounts,
uint32_t sampledImageStencilSampleCounts,
uint32_t storageImageSampleCounts,
uint32_t maxSampleMaskWords,
bool timestampComputeAndGraphics,
float timestampPeriod,
uint32_t maxClipDistances,
uint32_t maxCullDistances,
uint32_t maxCombinedClipAndCullDistances,
uint32_t discreteQueuePriorities,
std::vector<float> pointSizeRange,
std::vector<float> lineWidthRange,
float pointSizeGranularity,
float lineWidthGranularity,
bool strictLines,
bool standardSampleLocations,
uint64_t optimalBufferCopyOffsetAlignment,
uint64_t optimalBufferCopyRowPitchAlignment,
uint64_t nonCoherentAtomSize);
~VkPhysicalDeviceLimits();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VkPhysicalDeviceLimitsPtr>
VkPhysicalDeviceLimitsPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VkPhysicalDeviceLimits::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VkPhysicalDeviceLimits::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VkPhysicalDeviceLimits::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VkPhysicalDeviceLimits::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VkPhysicalDeviceLimits_UnserializedMessageContext<
UserType, VkPhysicalDeviceLimits::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VkPhysicalDeviceLimits::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VkPhysicalDeviceLimits::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VkPhysicalDeviceLimits_UnserializedMessageContext<
UserType, VkPhysicalDeviceLimits::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VkPhysicalDeviceLimits::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxImageDimension1D
uint32_t maxImageDimension1D;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxImageDimension2D
uint32_t maxImageDimension2D;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxImageDimension3D
uint32_t maxImageDimension3D;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxImageDimensionCube
uint32_t maxImageDimensionCube;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxImageArrayLayers
uint32_t maxImageArrayLayers;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTexelBufferElements
uint32_t maxTexelBufferElements;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxUniformBufferRange
uint32_t maxUniformBufferRange;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxStorageBufferRange
uint32_t maxStorageBufferRange;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxPushConstantsSize
uint32_t maxPushConstantsSize;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxMemoryAllocationCount
uint32_t maxMemoryAllocationCount;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxSamplerAllocationCount
uint32_t maxSamplerAllocationCount;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.bufferImageGranularity
uint64_t bufferImageGranularity;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.sparseAddressSpaceSize
uint64_t sparseAddressSpaceSize;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxBoundDescriptorSets
uint32_t maxBoundDescriptorSets;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxPerStageDescriptorSamplers
uint32_t maxPerStageDescriptorSamplers;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxPerStageDescriptorUniformBuffers
uint32_t maxPerStageDescriptorUniformBuffers;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxPerStageDescriptorStorageBuffers
uint32_t maxPerStageDescriptorStorageBuffers;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxPerStageDescriptorSampledImages
uint32_t maxPerStageDescriptorSampledImages;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxPerStageDescriptorStorageImages
uint32_t maxPerStageDescriptorStorageImages;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxPerStageDescriptorInputAttachments
uint32_t maxPerStageDescriptorInputAttachments;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxPerStageResources
uint32_t maxPerStageResources;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxDescriptorSetSamplers
uint32_t maxDescriptorSetSamplers;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxDescriptorSetUniformBuffers
uint32_t maxDescriptorSetUniformBuffers;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxDescriptorSetUniformBuffersDynamic
uint32_t maxDescriptorSetUniformBuffersDynamic;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxDescriptorSetStorageBuffers
uint32_t maxDescriptorSetStorageBuffers;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxDescriptorSetStorageBuffersDynamic
uint32_t maxDescriptorSetStorageBuffersDynamic;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxDescriptorSetSampledImages
uint32_t maxDescriptorSetSampledImages;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxDescriptorSetStorageImages
uint32_t maxDescriptorSetStorageImages;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxDescriptorSetInputAttachments
uint32_t maxDescriptorSetInputAttachments;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxVertexInputAttributes
uint32_t maxVertexInputAttributes;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxVertexInputBindings
uint32_t maxVertexInputBindings;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxVertexInputAttributeOffset
uint32_t maxVertexInputAttributeOffset;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxVertexInputBindingStride
uint32_t maxVertexInputBindingStride;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxVertexOutputComponents
uint32_t maxVertexOutputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTessellationGenerationLevel
uint32_t maxTessellationGenerationLevel;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTessellationPatchSize
uint32_t maxTessellationPatchSize;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTessellationControlPerVertexInputComponents
uint32_t maxTessellationControlPerVertexInputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTessellationControlPerVertexOutputComponents
uint32_t maxTessellationControlPerVertexOutputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTessellationControlPerPatchOutputComponents
uint32_t maxTessellationControlPerPatchOutputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTessellationControlTotalOutputComponents
uint32_t maxTessellationControlTotalOutputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTessellationEvaluationInputComponents
uint32_t maxTessellationEvaluationInputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTessellationEvaluationOutputComponents
uint32_t maxTessellationEvaluationOutputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxGeometryShaderInvocations
uint32_t maxGeometryShaderInvocations;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxGeometryInputComponents
uint32_t maxGeometryInputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxGeometryOutputComponents
uint32_t maxGeometryOutputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxGeometryOutputVertices
uint32_t maxGeometryOutputVertices;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxGeometryTotalOutputComponents
uint32_t maxGeometryTotalOutputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxFragmentInputComponents
uint32_t maxFragmentInputComponents;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxFragmentOutputAttachments
uint32_t maxFragmentOutputAttachments;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxFragmentDualSrcAttachments
uint32_t maxFragmentDualSrcAttachments;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxFragmentCombinedOutputResources
uint32_t maxFragmentCombinedOutputResources;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxComputeSharedMemorySize
uint32_t maxComputeSharedMemorySize;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxComputeWorkGroupCount
std::vector<uint32_t> maxComputeWorkGroupCount;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxComputeWorkGroupInvocations
uint32_t maxComputeWorkGroupInvocations;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxComputeWorkGroupSize
std::vector<uint32_t> maxComputeWorkGroupSize;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.subPixelPrecisionBits
uint32_t subPixelPrecisionBits;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.subTexelPrecisionBits
uint32_t subTexelPrecisionBits;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.mipmapPrecisionBits
uint32_t mipmapPrecisionBits;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxDrawIndexedIndexValue
uint32_t maxDrawIndexedIndexValue;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxDrawIndirectCount
uint32_t maxDrawIndirectCount;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxSamplerLodBias
float maxSamplerLodBias;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxSamplerAnisotropy
float maxSamplerAnisotropy;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxViewports
uint32_t maxViewports;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxViewportDimensions
std::vector<uint32_t> maxViewportDimensions;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.viewportBoundsRange
std::vector<float> viewportBoundsRange;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.viewportSubPixelBits
uint32_t viewportSubPixelBits;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.minMemoryMapAlignment
uint64_t minMemoryMapAlignment;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.minTexelBufferOffsetAlignment
uint64_t minTexelBufferOffsetAlignment;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.minUniformBufferOffsetAlignment
uint64_t minUniformBufferOffsetAlignment;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.minStorageBufferOffsetAlignment
uint64_t minStorageBufferOffsetAlignment;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.minTexelOffset
int32_t minTexelOffset;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTexelOffset
uint32_t maxTexelOffset;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.minTexelGatherOffset
int32_t minTexelGatherOffset;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxTexelGatherOffset
uint32_t maxTexelGatherOffset;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.minInterpolationOffset
float minInterpolationOffset;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxInterpolationOffset
float maxInterpolationOffset;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.subPixelInterpolationOffsetBits
uint32_t subPixelInterpolationOffsetBits;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxFramebufferWidth
uint32_t maxFramebufferWidth;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxFramebufferHeight
uint32_t maxFramebufferHeight;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxFramebufferLayers
uint32_t maxFramebufferLayers;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.framebufferColorSampleCounts
uint32_t framebufferColorSampleCounts;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.framebufferDepthSampleCounts
uint32_t framebufferDepthSampleCounts;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.framebufferStencilSampleCounts
uint32_t framebufferStencilSampleCounts;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.framebufferNoAttachmentsSampleCounts
uint32_t framebufferNoAttachmentsSampleCounts;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxColorAttachments
uint32_t maxColorAttachments;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.sampledImageColorSampleCounts
uint32_t sampledImageColorSampleCounts;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.sampledImageIntegerSampleCounts
uint32_t sampledImageIntegerSampleCounts;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.sampledImageDepthSampleCounts
uint32_t sampledImageDepthSampleCounts;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.sampledImageStencilSampleCounts
uint32_t sampledImageStencilSampleCounts;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.storageImageSampleCounts
uint32_t storageImageSampleCounts;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxSampleMaskWords
uint32_t maxSampleMaskWords;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.timestampComputeAndGraphics
bool timestampComputeAndGraphics;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.timestampPeriod
float timestampPeriod;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxClipDistances
uint32_t maxClipDistances;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxCullDistances
uint32_t maxCullDistances;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.maxCombinedClipAndCullDistances
uint32_t maxCombinedClipAndCullDistances;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.discreteQueuePriorities
uint32_t discreteQueuePriorities;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.pointSizeRange
std::vector<float> pointSizeRange;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.lineWidthRange
std::vector<float> lineWidthRange;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.pointSizeGranularity
float pointSizeGranularity;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.lineWidthGranularity
float lineWidthGranularity;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.strictLines
bool strictLines;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.standardSampleLocations
bool standardSampleLocations;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.optimalBufferCopyOffsetAlignment
uint64_t optimalBufferCopyOffsetAlignment;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.optimalBufferCopyRowPitchAlignment
uint64_t optimalBufferCopyRowPitchAlignment;
// @generated_from: gpu.mojom.VkPhysicalDeviceLimits.nonCoherentAtomSize
uint64_t nonCoherentAtomSize;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VkPhysicalDeviceLimits::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VkPhysicalDeviceLimits::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VkPhysicalDeviceLimits::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VkPhysicalDeviceLimits::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: gpu.mojom.VkPhysicalDeviceSparseProperties
class GPU_EXPORT VkPhysicalDeviceSparseProperties {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VkPhysicalDeviceSparseProperties, T>::value>;
using DataView = VkPhysicalDeviceSparsePropertiesDataView;
using Data_ = internal::VkPhysicalDeviceSparseProperties_Data;
template <typename... Args>
static VkPhysicalDeviceSparsePropertiesPtr New(Args&&... args) {
return VkPhysicalDeviceSparsePropertiesPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VkPhysicalDeviceSparsePropertiesPtr From(const U& u) {
return mojo::TypeConverter<VkPhysicalDeviceSparsePropertiesPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VkPhysicalDeviceSparseProperties>::Convert(*this);
}
VkPhysicalDeviceSparseProperties();
VkPhysicalDeviceSparseProperties(
bool residencyStandard2DBlockShape,
bool residencyStandard2DMultisampleBlockShape,
bool residencyStandard3DBlockShape,
bool residencyAlignedMipSize,
bool residencyNonResidentStrict);
~VkPhysicalDeviceSparseProperties();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VkPhysicalDeviceSparsePropertiesPtr>
VkPhysicalDeviceSparsePropertiesPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VkPhysicalDeviceSparseProperties::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VkPhysicalDeviceSparseProperties::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VkPhysicalDeviceSparseProperties::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VkPhysicalDeviceSparseProperties::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VkPhysicalDeviceSparseProperties_UnserializedMessageContext<
UserType, VkPhysicalDeviceSparseProperties::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VkPhysicalDeviceSparseProperties::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VkPhysicalDeviceSparseProperties::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VkPhysicalDeviceSparseProperties_UnserializedMessageContext<
UserType, VkPhysicalDeviceSparseProperties::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VkPhysicalDeviceSparseProperties::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: gpu.mojom.VkPhysicalDeviceSparseProperties.residencyStandard2DBlockShape
bool residencyStandard2DBlockShape;
// @generated_from: gpu.mojom.VkPhysicalDeviceSparseProperties.residencyStandard2DMultisampleBlockShape
bool residencyStandard2DMultisampleBlockShape;
// @generated_from: gpu.mojom.VkPhysicalDeviceSparseProperties.residencyStandard3DBlockShape
bool residencyStandard3DBlockShape;
// @generated_from: gpu.mojom.VkPhysicalDeviceSparseProperties.residencyAlignedMipSize
bool residencyAlignedMipSize;
// @generated_from: gpu.mojom.VkPhysicalDeviceSparseProperties.residencyNonResidentStrict
bool residencyNonResidentStrict;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VkPhysicalDeviceSparseProperties::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VkPhysicalDeviceSparseProperties::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VkPhysicalDeviceSparseProperties::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VkPhysicalDeviceSparseProperties::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: gpu.mojom.VkPhysicalDeviceProperties
class GPU_EXPORT VkPhysicalDeviceProperties {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VkPhysicalDeviceProperties, T>::value>;
using DataView = VkPhysicalDevicePropertiesDataView;
using Data_ = internal::VkPhysicalDeviceProperties_Data;
template <typename... Args>
static VkPhysicalDevicePropertiesPtr New(Args&&... args) {
return VkPhysicalDevicePropertiesPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VkPhysicalDevicePropertiesPtr From(const U& u) {
return mojo::TypeConverter<VkPhysicalDevicePropertiesPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VkPhysicalDeviceProperties>::Convert(*this);
}
VkPhysicalDeviceProperties();
VkPhysicalDeviceProperties(
uint32_t apiVersion,
uint32_t driverVersion,
uint32_t vendorID,
uint32_t deviceID,
::VkPhysicalDeviceType deviceType,
const std::string& deviceName,
std::vector<uint8_t> pipelineCacheUUID,
const ::VkPhysicalDeviceLimits& limits,
const ::VkPhysicalDeviceSparseProperties& sparseProperties);
~VkPhysicalDeviceProperties();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VkPhysicalDevicePropertiesPtr>
VkPhysicalDevicePropertiesPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VkPhysicalDeviceProperties::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VkPhysicalDeviceProperties::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VkPhysicalDeviceProperties::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VkPhysicalDeviceProperties::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VkPhysicalDeviceProperties_UnserializedMessageContext<
UserType, VkPhysicalDeviceProperties::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VkPhysicalDeviceProperties::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VkPhysicalDeviceProperties::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VkPhysicalDeviceProperties_UnserializedMessageContext<
UserType, VkPhysicalDeviceProperties::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VkPhysicalDeviceProperties::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: gpu.mojom.VkPhysicalDeviceProperties.apiVersion
uint32_t apiVersion;
// @generated_from: gpu.mojom.VkPhysicalDeviceProperties.driverVersion
uint32_t driverVersion;
// @generated_from: gpu.mojom.VkPhysicalDeviceProperties.vendorID
uint32_t vendorID;
// @generated_from: gpu.mojom.VkPhysicalDeviceProperties.deviceID
uint32_t deviceID;
// @generated_from: gpu.mojom.VkPhysicalDeviceProperties.deviceType
::VkPhysicalDeviceType deviceType;
// @generated_from: gpu.mojom.VkPhysicalDeviceProperties.deviceName
std::string deviceName;
// @generated_from: gpu.mojom.VkPhysicalDeviceProperties.pipelineCacheUUID
std::vector<uint8_t> pipelineCacheUUID;
// @generated_from: gpu.mojom.VkPhysicalDeviceProperties.limits
::VkPhysicalDeviceLimits limits;
// @generated_from: gpu.mojom.VkPhysicalDeviceProperties.sparseProperties
::VkPhysicalDeviceSparseProperties sparseProperties;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VkPhysicalDeviceProperties::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VkPhysicalDeviceProperties::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VkPhysicalDeviceProperties::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VkPhysicalDeviceProperties::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures
class GPU_EXPORT VkPhysicalDeviceFeatures {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VkPhysicalDeviceFeatures, T>::value>;
using DataView = VkPhysicalDeviceFeaturesDataView;
using Data_ = internal::VkPhysicalDeviceFeatures_Data;
template <typename... Args>
static VkPhysicalDeviceFeaturesPtr New(Args&&... args) {
return VkPhysicalDeviceFeaturesPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VkPhysicalDeviceFeaturesPtr From(const U& u) {
return mojo::TypeConverter<VkPhysicalDeviceFeaturesPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VkPhysicalDeviceFeatures>::Convert(*this);
}
VkPhysicalDeviceFeatures();
VkPhysicalDeviceFeatures(
bool robustBufferAccess,
bool fullDrawIndexUint32,
bool imageCubeArray,
bool independentBlend,
bool geometryShader,
bool tessellationShader,
bool sampleRateShading,
bool dualSrcBlend,
bool logicOp,
bool multiDrawIndirect,
bool drawIndirectFirstInstance,
bool depthClamp,
bool depthBiasClamp,
bool fillModeNonSolid,
bool depthBounds,
bool wideLines,
bool largePoints,
bool alphaToOne,
bool multiViewport,
bool samplerAnisotropy,
bool textureCompressionETC2,
bool textureCompressionASTC_LDR,
bool textureCompressionBC,
bool occlusionQueryPrecise,
bool pipelineStatisticsQuery,
bool vertexPipelineStoresAndAtomics,
bool fragmentStoresAndAtomics,
bool shaderTessellationAndGeometryPointSize,
bool shaderImageGatherExtended,
bool shaderStorageImageExtendedFormats,
bool shaderStorageImageMultisample,
bool shaderStorageImageReadWithoutFormat,
bool shaderStorageImageWriteWithoutFormat,
bool shaderUniformBufferArrayDynamicIndexing,
bool shaderSampledImageArrayDynamicIndexing,
bool shaderStorageBufferArrayDynamicIndexing,
bool shaderStorageImageArrayDynamicIndexing,
bool shaderClipDistance,
bool shaderCullDistance,
bool shaderFloat64,
bool shaderInt64,
bool shaderInt16,
bool shaderResourceResidency,
bool shaderResourceMinLod,
bool sparseBinding,
bool sparseResidencyBuffer,
bool sparseResidencyImage2D,
bool sparseResidencyImage3D,
bool sparseResidency2Samples,
bool sparseResidency4Samples,
bool sparseResidency8Samples,
bool sparseResidency16Samples,
bool sparseResidencyAliased,
bool variableMultisampleRate,
bool inheritedQueries);
~VkPhysicalDeviceFeatures();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VkPhysicalDeviceFeaturesPtr>
VkPhysicalDeviceFeaturesPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VkPhysicalDeviceFeatures::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VkPhysicalDeviceFeatures::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VkPhysicalDeviceFeatures::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VkPhysicalDeviceFeatures::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VkPhysicalDeviceFeatures_UnserializedMessageContext<
UserType, VkPhysicalDeviceFeatures::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VkPhysicalDeviceFeatures::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VkPhysicalDeviceFeatures::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VkPhysicalDeviceFeatures_UnserializedMessageContext<
UserType, VkPhysicalDeviceFeatures::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VkPhysicalDeviceFeatures::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.robustBufferAccess
bool robustBufferAccess;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.fullDrawIndexUint32
bool fullDrawIndexUint32;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.imageCubeArray
bool imageCubeArray;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.independentBlend
bool independentBlend;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.geometryShader
bool geometryShader;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.tessellationShader
bool tessellationShader;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.sampleRateShading
bool sampleRateShading;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.dualSrcBlend
bool dualSrcBlend;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.logicOp
bool logicOp;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.multiDrawIndirect
bool multiDrawIndirect;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.drawIndirectFirstInstance
bool drawIndirectFirstInstance;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.depthClamp
bool depthClamp;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.depthBiasClamp
bool depthBiasClamp;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.fillModeNonSolid
bool fillModeNonSolid;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.depthBounds
bool depthBounds;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.wideLines
bool wideLines;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.largePoints
bool largePoints;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.alphaToOne
bool alphaToOne;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.multiViewport
bool multiViewport;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.samplerAnisotropy
bool samplerAnisotropy;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.textureCompressionETC2
bool textureCompressionETC2;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.textureCompressionASTC_LDR
bool textureCompressionASTC_LDR;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.textureCompressionBC
bool textureCompressionBC;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.occlusionQueryPrecise
bool occlusionQueryPrecise;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.pipelineStatisticsQuery
bool pipelineStatisticsQuery;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.vertexPipelineStoresAndAtomics
bool vertexPipelineStoresAndAtomics;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.fragmentStoresAndAtomics
bool fragmentStoresAndAtomics;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderTessellationAndGeometryPointSize
bool shaderTessellationAndGeometryPointSize;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderImageGatherExtended
bool shaderImageGatherExtended;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderStorageImageExtendedFormats
bool shaderStorageImageExtendedFormats;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderStorageImageMultisample
bool shaderStorageImageMultisample;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderStorageImageReadWithoutFormat
bool shaderStorageImageReadWithoutFormat;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderStorageImageWriteWithoutFormat
bool shaderStorageImageWriteWithoutFormat;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderUniformBufferArrayDynamicIndexing
bool shaderUniformBufferArrayDynamicIndexing;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderSampledImageArrayDynamicIndexing
bool shaderSampledImageArrayDynamicIndexing;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderStorageBufferArrayDynamicIndexing
bool shaderStorageBufferArrayDynamicIndexing;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderStorageImageArrayDynamicIndexing
bool shaderStorageImageArrayDynamicIndexing;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderClipDistance
bool shaderClipDistance;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderCullDistance
bool shaderCullDistance;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderFloat64
bool shaderFloat64;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderInt64
bool shaderInt64;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderInt16
bool shaderInt16;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderResourceResidency
bool shaderResourceResidency;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.shaderResourceMinLod
bool shaderResourceMinLod;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.sparseBinding
bool sparseBinding;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.sparseResidencyBuffer
bool sparseResidencyBuffer;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.sparseResidencyImage2D
bool sparseResidencyImage2D;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.sparseResidencyImage3D
bool sparseResidencyImage3D;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.sparseResidency2Samples
bool sparseResidency2Samples;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.sparseResidency4Samples
bool sparseResidency4Samples;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.sparseResidency8Samples
bool sparseResidency8Samples;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.sparseResidency16Samples
bool sparseResidency16Samples;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.sparseResidencyAliased
bool sparseResidencyAliased;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.variableMultisampleRate
bool variableMultisampleRate;
// @generated_from: gpu.mojom.VkPhysicalDeviceFeatures.inheritedQueries
bool inheritedQueries;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VkPhysicalDeviceFeatures::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VkPhysicalDeviceFeatures::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VkPhysicalDeviceFeatures::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VkPhysicalDeviceFeatures::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: gpu.mojom.VkQueueFamilyProperties
class GPU_EXPORT VkQueueFamilyProperties {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<VkQueueFamilyProperties, T>::value>;
using DataView = VkQueueFamilyPropertiesDataView;
using Data_ = internal::VkQueueFamilyProperties_Data;
template <typename... Args>
static VkQueueFamilyPropertiesPtr New(Args&&... args) {
return VkQueueFamilyPropertiesPtr(
absl::in_place, std::forward<Args>(args)...);
}
template <typename U>
static VkQueueFamilyPropertiesPtr From(const U& u) {
return mojo::TypeConverter<VkQueueFamilyPropertiesPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, VkQueueFamilyProperties>::Convert(*this);
}
VkQueueFamilyProperties();
VkQueueFamilyProperties(
uint32_t queueFlags,
uint32_t queueCount,
uint32_t timestampValidBits,
const ::VkExtent3D& minImageTransferGranularity);
~VkQueueFamilyProperties();
// Clone() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Clone() or copy
// constructor/assignment are available for members.
template <typename StructPtrType = VkQueueFamilyPropertiesPtr>
VkQueueFamilyPropertiesPtr Clone() const;
// Equals() is a template so it is only instantiated if it is used. Thus, the
// bindings generator does not need to know whether Equals() or == operator
// are available for members.
template <typename T, VkQueueFamilyProperties::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, VkQueueFamilyProperties::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
VkQueueFamilyProperties::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
VkQueueFamilyProperties::DataView>(input);
}
// The returned Message is serialized only if the message is moved
// cross-process or cross-language. Otherwise if the message is Deserialized
// as the same UserType |input| will just be moved to |output| in
// DeserializeFromMessage.
template <typename UserType>
static mojo::Message WrapAsMessage(UserType input) {
return mojo::Message(std::make_unique<
internal::VkQueueFamilyProperties_UnserializedMessageContext<
UserType, VkQueueFamilyProperties::DataView>>(0, 0, std::move(input)),
MOJO_CREATE_MESSAGE_FLAG_NONE);
}
template <typename UserType>
static bool Deserialize(const void* data,
size_t data_num_bytes,
UserType* output) {
mojo::Message message;
return mojo::internal::DeserializeImpl<VkQueueFamilyProperties::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return VkQueueFamilyProperties::Deserialize(
input.size() == 0 ? nullptr : &input.front(), input.size(), output);
}
template <typename UserType>
static bool DeserializeFromMessage(mojo::Message input,
UserType* output) {
auto context = input.TakeUnserializedContext<
internal::VkQueueFamilyProperties_UnserializedMessageContext<
UserType, VkQueueFamilyProperties::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<VkQueueFamilyProperties::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: gpu.mojom.VkQueueFamilyProperties.queueFlags
uint32_t queueFlags;
// @generated_from: gpu.mojom.VkQueueFamilyProperties.queueCount
uint32_t queueCount;
// @generated_from: gpu.mojom.VkQueueFamilyProperties.timestampValidBits
uint32_t timestampValidBits;
// @generated_from: gpu.mojom.VkQueueFamilyProperties.minImageTransferGranularity
::VkExtent3D minImageTransferGranularity;
// Serialise this struct into a trace.
void WriteIntoTrace(perfetto::TracedValue traced_context) const;
private:
static bool Validate(const void* data,
mojo::internal::ValidationContext* validation_context);
};
// The comparison operators are templates, so they are only instantiated if they
// are used. Thus, the bindings generator does not need to know whether
// comparison operators are available for members.
template <typename T, VkQueueFamilyProperties::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, VkQueueFamilyProperties::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, VkQueueFamilyProperties::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, VkQueueFamilyProperties::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
template <typename StructPtrType>
VkExtensionPropertiesPtr VkExtensionProperties::Clone() const {
return New(
mojo::Clone(extensionName),
mojo::Clone(specVersion)
);
}
template <typename T, VkExtensionProperties::EnableIfSame<T>*>
bool VkExtensionProperties::Equals(const T& other_struct) const {
if (!mojo::Equals(this->extensionName, other_struct.extensionName))
return false;
if (!mojo::Equals(this->specVersion, other_struct.specVersion))
return false;
return true;
}
template <typename T, VkExtensionProperties::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.extensionName < rhs.extensionName)
return true;
if (rhs.extensionName < lhs.extensionName)
return false;
if (lhs.specVersion < rhs.specVersion)
return true;
if (rhs.specVersion < lhs.specVersion)
return false;
return false;
}
template <typename StructPtrType>
VkLayerPropertiesPtr VkLayerProperties::Clone() const {
return New(
mojo::Clone(layerName),
mojo::Clone(specVersion),
mojo::Clone(implementationVersion),
mojo::Clone(description)
);
}
template <typename T, VkLayerProperties::EnableIfSame<T>*>
bool VkLayerProperties::Equals(const T& other_struct) const {
if (!mojo::Equals(this->layerName, other_struct.layerName))
return false;
if (!mojo::Equals(this->specVersion, other_struct.specVersion))
return false;
if (!mojo::Equals(this->implementationVersion, other_struct.implementationVersion))
return false;
if (!mojo::Equals(this->description, other_struct.description))
return false;
return true;
}
template <typename T, VkLayerProperties::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.layerName < rhs.layerName)
return true;
if (rhs.layerName < lhs.layerName)
return false;
if (lhs.specVersion < rhs.specVersion)
return true;
if (rhs.specVersion < lhs.specVersion)
return false;
if (lhs.implementationVersion < rhs.implementationVersion)
return true;
if (rhs.implementationVersion < lhs.implementationVersion)
return false;
if (lhs.description < rhs.description)
return true;
if (rhs.description < lhs.description)
return false;
return false;
}
template <typename StructPtrType>
VkPhysicalDeviceLimitsPtr VkPhysicalDeviceLimits::Clone() const {
return New(
mojo::Clone(maxImageDimension1D),
mojo::Clone(maxImageDimension2D),
mojo::Clone(maxImageDimension3D),
mojo::Clone(maxImageDimensionCube),
mojo::Clone(maxImageArrayLayers),
mojo::Clone(maxTexelBufferElements),
mojo::Clone(maxUniformBufferRange),
mojo::Clone(maxStorageBufferRange),
mojo::Clone(maxPushConstantsSize),
mojo::Clone(maxMemoryAllocationCount),
mojo::Clone(maxSamplerAllocationCount),
mojo::Clone(bufferImageGranularity),
mojo::Clone(sparseAddressSpaceSize),
mojo::Clone(maxBoundDescriptorSets),
mojo::Clone(maxPerStageDescriptorSamplers),
mojo::Clone(maxPerStageDescriptorUniformBuffers),
mojo::Clone(maxPerStageDescriptorStorageBuffers),
mojo::Clone(maxPerStageDescriptorSampledImages),
mojo::Clone(maxPerStageDescriptorStorageImages),
mojo::Clone(maxPerStageDescriptorInputAttachments),
mojo::Clone(maxPerStageResources),
mojo::Clone(maxDescriptorSetSamplers),
mojo::Clone(maxDescriptorSetUniformBuffers),
mojo::Clone(maxDescriptorSetUniformBuffersDynamic),
mojo::Clone(maxDescriptorSetStorageBuffers),
mojo::Clone(maxDescriptorSetStorageBuffersDynamic),
mojo::Clone(maxDescriptorSetSampledImages),
mojo::Clone(maxDescriptorSetStorageImages),
mojo::Clone(maxDescriptorSetInputAttachments),
mojo::Clone(maxVertexInputAttributes),
mojo::Clone(maxVertexInputBindings),
mojo::Clone(maxVertexInputAttributeOffset),
mojo::Clone(maxVertexInputBindingStride),
mojo::Clone(maxVertexOutputComponents),
mojo::Clone(maxTessellationGenerationLevel),
mojo::Clone(maxTessellationPatchSize),
mojo::Clone(maxTessellationControlPerVertexInputComponents),
mojo::Clone(maxTessellationControlPerVertexOutputComponents),
mojo::Clone(maxTessellationControlPerPatchOutputComponents),
mojo::Clone(maxTessellationControlTotalOutputComponents),
mojo::Clone(maxTessellationEvaluationInputComponents),
mojo::Clone(maxTessellationEvaluationOutputComponents),
mojo::Clone(maxGeometryShaderInvocations),
mojo::Clone(maxGeometryInputComponents),
mojo::Clone(maxGeometryOutputComponents),
mojo::Clone(maxGeometryOutputVertices),
mojo::Clone(maxGeometryTotalOutputComponents),
mojo::Clone(maxFragmentInputComponents),
mojo::Clone(maxFragmentOutputAttachments),
mojo::Clone(maxFragmentDualSrcAttachments),
mojo::Clone(maxFragmentCombinedOutputResources),
mojo::Clone(maxComputeSharedMemorySize),
mojo::Clone(maxComputeWorkGroupCount),
mojo::Clone(maxComputeWorkGroupInvocations),
mojo::Clone(maxComputeWorkGroupSize),
mojo::Clone(subPixelPrecisionBits),
mojo::Clone(subTexelPrecisionBits),
mojo::Clone(mipmapPrecisionBits),
mojo::Clone(maxDrawIndexedIndexValue),
mojo::Clone(maxDrawIndirectCount),
mojo::Clone(maxSamplerLodBias),
mojo::Clone(maxSamplerAnisotropy),
mojo::Clone(maxViewports),
mojo::Clone(maxViewportDimensions),
mojo::Clone(viewportBoundsRange),
mojo::Clone(viewportSubPixelBits),
mojo::Clone(minMemoryMapAlignment),
mojo::Clone(minTexelBufferOffsetAlignment),
mojo::Clone(minUniformBufferOffsetAlignment),
mojo::Clone(minStorageBufferOffsetAlignment),
mojo::Clone(minTexelOffset),
mojo::Clone(maxTexelOffset),
mojo::Clone(minTexelGatherOffset),
mojo::Clone(maxTexelGatherOffset),
mojo::Clone(minInterpolationOffset),
mojo::Clone(maxInterpolationOffset),
mojo::Clone(subPixelInterpolationOffsetBits),
mojo::Clone(maxFramebufferWidth),
mojo::Clone(maxFramebufferHeight),
mojo::Clone(maxFramebufferLayers),
mojo::Clone(framebufferColorSampleCounts),
mojo::Clone(framebufferDepthSampleCounts),
mojo::Clone(framebufferStencilSampleCounts),
mojo::Clone(framebufferNoAttachmentsSampleCounts),
mojo::Clone(maxColorAttachments),
mojo::Clone(sampledImageColorSampleCounts),
mojo::Clone(sampledImageIntegerSampleCounts),
mojo::Clone(sampledImageDepthSampleCounts),
mojo::Clone(sampledImageStencilSampleCounts),
mojo::Clone(storageImageSampleCounts),
mojo::Clone(maxSampleMaskWords),
mojo::Clone(timestampComputeAndGraphics),
mojo::Clone(timestampPeriod),
mojo::Clone(maxClipDistances),
mojo::Clone(maxCullDistances),
mojo::Clone(maxCombinedClipAndCullDistances),
mojo::Clone(discreteQueuePriorities),
mojo::Clone(pointSizeRange),
mojo::Clone(lineWidthRange),
mojo::Clone(pointSizeGranularity),
mojo::Clone(lineWidthGranularity),
mojo::Clone(strictLines),
mojo::Clone(standardSampleLocations),
mojo::Clone(optimalBufferCopyOffsetAlignment),
mojo::Clone(optimalBufferCopyRowPitchAlignment),
mojo::Clone(nonCoherentAtomSize)
);
}
template <typename T, VkPhysicalDeviceLimits::EnableIfSame<T>*>
bool VkPhysicalDeviceLimits::Equals(const T& other_struct) const {
if (!mojo::Equals(this->maxImageDimension1D, other_struct.maxImageDimension1D))
return false;
if (!mojo::Equals(this->maxImageDimension2D, other_struct.maxImageDimension2D))
return false;
if (!mojo::Equals(this->maxImageDimension3D, other_struct.maxImageDimension3D))
return false;
if (!mojo::Equals(this->maxImageDimensionCube, other_struct.maxImageDimensionCube))
return false;
if (!mojo::Equals(this->maxImageArrayLayers, other_struct.maxImageArrayLayers))
return false;
if (!mojo::Equals(this->maxTexelBufferElements, other_struct.maxTexelBufferElements))
return false;
if (!mojo::Equals(this->maxUniformBufferRange, other_struct.maxUniformBufferRange))
return false;
if (!mojo::Equals(this->maxStorageBufferRange, other_struct.maxStorageBufferRange))
return false;
if (!mojo::Equals(this->maxPushConstantsSize, other_struct.maxPushConstantsSize))
return false;
if (!mojo::Equals(this->maxMemoryAllocationCount, other_struct.maxMemoryAllocationCount))
return false;
if (!mojo::Equals(this->maxSamplerAllocationCount, other_struct.maxSamplerAllocationCount))
return false;
if (!mojo::Equals(this->bufferImageGranularity, other_struct.bufferImageGranularity))
return false;
if (!mojo::Equals(this->sparseAddressSpaceSize, other_struct.sparseAddressSpaceSize))
return false;
if (!mojo::Equals(this->maxBoundDescriptorSets, other_struct.maxBoundDescriptorSets))
return false;
if (!mojo::Equals(this->maxPerStageDescriptorSamplers, other_struct.maxPerStageDescriptorSamplers))
return false;
if (!mojo::Equals(this->maxPerStageDescriptorUniformBuffers, other_struct.maxPerStageDescriptorUniformBuffers))
return false;
if (!mojo::Equals(this->maxPerStageDescriptorStorageBuffers, other_struct.maxPerStageDescriptorStorageBuffers))
return false;
if (!mojo::Equals(this->maxPerStageDescriptorSampledImages, other_struct.maxPerStageDescriptorSampledImages))
return false;
if (!mojo::Equals(this->maxPerStageDescriptorStorageImages, other_struct.maxPerStageDescriptorStorageImages))
return false;
if (!mojo::Equals(this->maxPerStageDescriptorInputAttachments, other_struct.maxPerStageDescriptorInputAttachments))
return false;
if (!mojo::Equals(this->maxPerStageResources, other_struct.maxPerStageResources))
return false;
if (!mojo::Equals(this->maxDescriptorSetSamplers, other_struct.maxDescriptorSetSamplers))
return false;
if (!mojo::Equals(this->maxDescriptorSetUniformBuffers, other_struct.maxDescriptorSetUniformBuffers))
return false;
if (!mojo::Equals(this->maxDescriptorSetUniformBuffersDynamic, other_struct.maxDescriptorSetUniformBuffersDynamic))
return false;
if (!mojo::Equals(this->maxDescriptorSetStorageBuffers, other_struct.maxDescriptorSetStorageBuffers))
return false;
if (!mojo::Equals(this->maxDescriptorSetStorageBuffersDynamic, other_struct.maxDescriptorSetStorageBuffersDynamic))
return false;
if (!mojo::Equals(this->maxDescriptorSetSampledImages, other_struct.maxDescriptorSetSampledImages))
return false;
if (!mojo::Equals(this->maxDescriptorSetStorageImages, other_struct.maxDescriptorSetStorageImages))
return false;
if (!mojo::Equals(this->maxDescriptorSetInputAttachments, other_struct.maxDescriptorSetInputAttachments))
return false;
if (!mojo::Equals(this->maxVertexInputAttributes, other_struct.maxVertexInputAttributes))
return false;
if (!mojo::Equals(this->maxVertexInputBindings, other_struct.maxVertexInputBindings))
return false;
if (!mojo::Equals(this->maxVertexInputAttributeOffset, other_struct.maxVertexInputAttributeOffset))
return false;
if (!mojo::Equals(this->maxVertexInputBindingStride, other_struct.maxVertexInputBindingStride))
return false;
if (!mojo::Equals(this->maxVertexOutputComponents, other_struct.maxVertexOutputComponents))
return false;
if (!mojo::Equals(this->maxTessellationGenerationLevel, other_struct.maxTessellationGenerationLevel))
return false;
if (!mojo::Equals(this->maxTessellationPatchSize, other_struct.maxTessellationPatchSize))
return false;
if (!mojo::Equals(this->maxTessellationControlPerVertexInputComponents, other_struct.maxTessellationControlPerVertexInputComponents))
return false;
if (!mojo::Equals(this->maxTessellationControlPerVertexOutputComponents, other_struct.maxTessellationControlPerVertexOutputComponents))
return false;
if (!mojo::Equals(this->maxTessellationControlPerPatchOutputComponents, other_struct.maxTessellationControlPerPatchOutputComponents))
return false;
if (!mojo::Equals(this->maxTessellationControlTotalOutputComponents, other_struct.maxTessellationControlTotalOutputComponents))
return false;
if (!mojo::Equals(this->maxTessellationEvaluationInputComponents, other_struct.maxTessellationEvaluationInputComponents))
return false;
if (!mojo::Equals(this->maxTessellationEvaluationOutputComponents, other_struct.maxTessellationEvaluationOutputComponents))
return false;
if (!mojo::Equals(this->maxGeometryShaderInvocations, other_struct.maxGeometryShaderInvocations))
return false;
if (!mojo::Equals(this->maxGeometryInputComponents, other_struct.maxGeometryInputComponents))
return false;
if (!mojo::Equals(this->maxGeometryOutputComponents, other_struct.maxGeometryOutputComponents))
return false;
if (!mojo::Equals(this->maxGeometryOutputVertices, other_struct.maxGeometryOutputVertices))
return false;
if (!mojo::Equals(this->maxGeometryTotalOutputComponents, other_struct.maxGeometryTotalOutputComponents))
return false;
if (!mojo::Equals(this->maxFragmentInputComponents, other_struct.maxFragmentInputComponents))
return false;
if (!mojo::Equals(this->maxFragmentOutputAttachments, other_struct.maxFragmentOutputAttachments))
return false;
if (!mojo::Equals(this->maxFragmentDualSrcAttachments, other_struct.maxFragmentDualSrcAttachments))
return false;
if (!mojo::Equals(this->maxFragmentCombinedOutputResources, other_struct.maxFragmentCombinedOutputResources))
return false;
if (!mojo::Equals(this->maxComputeSharedMemorySize, other_struct.maxComputeSharedMemorySize))
return false;
if (!mojo::Equals(this->maxComputeWorkGroupCount, other_struct.maxComputeWorkGroupCount))
return false;
if (!mojo::Equals(this->maxComputeWorkGroupInvocations, other_struct.maxComputeWorkGroupInvocations))
return false;
if (!mojo::Equals(this->maxComputeWorkGroupSize, other_struct.maxComputeWorkGroupSize))
return false;
if (!mojo::Equals(this->subPixelPrecisionBits, other_struct.subPixelPrecisionBits))
return false;
if (!mojo::Equals(this->subTexelPrecisionBits, other_struct.subTexelPrecisionBits))
return false;
if (!mojo::Equals(this->mipmapPrecisionBits, other_struct.mipmapPrecisionBits))
return false;
if (!mojo::Equals(this->maxDrawIndexedIndexValue, other_struct.maxDrawIndexedIndexValue))
return false;
if (!mojo::Equals(this->maxDrawIndirectCount, other_struct.maxDrawIndirectCount))
return false;
if (!mojo::Equals(this->maxSamplerLodBias, other_struct.maxSamplerLodBias))
return false;
if (!mojo::Equals(this->maxSamplerAnisotropy, other_struct.maxSamplerAnisotropy))
return false;
if (!mojo::Equals(this->maxViewports, other_struct.maxViewports))
return false;
if (!mojo::Equals(this->maxViewportDimensions, other_struct.maxViewportDimensions))
return false;
if (!mojo::Equals(this->viewportBoundsRange, other_struct.viewportBoundsRange))
return false;
if (!mojo::Equals(this->viewportSubPixelBits, other_struct.viewportSubPixelBits))
return false;
if (!mojo::Equals(this->minMemoryMapAlignment, other_struct.minMemoryMapAlignment))
return false;
if (!mojo::Equals(this->minTexelBufferOffsetAlignment, other_struct.minTexelBufferOffsetAlignment))
return false;
if (!mojo::Equals(this->minUniformBufferOffsetAlignment, other_struct.minUniformBufferOffsetAlignment))
return false;
if (!mojo::Equals(this->minStorageBufferOffsetAlignment, other_struct.minStorageBufferOffsetAlignment))
return false;
if (!mojo::Equals(this->minTexelOffset, other_struct.minTexelOffset))
return false;
if (!mojo::Equals(this->maxTexelOffset, other_struct.maxTexelOffset))
return false;
if (!mojo::Equals(this->minTexelGatherOffset, other_struct.minTexelGatherOffset))
return false;
if (!mojo::Equals(this->maxTexelGatherOffset, other_struct.maxTexelGatherOffset))
return false;
if (!mojo::Equals(this->minInterpolationOffset, other_struct.minInterpolationOffset))
return false;
if (!mojo::Equals(this->maxInterpolationOffset, other_struct.maxInterpolationOffset))
return false;
if (!mojo::Equals(this->subPixelInterpolationOffsetBits, other_struct.subPixelInterpolationOffsetBits))
return false;
if (!mojo::Equals(this->maxFramebufferWidth, other_struct.maxFramebufferWidth))
return false;
if (!mojo::Equals(this->maxFramebufferHeight, other_struct.maxFramebufferHeight))
return false;
if (!mojo::Equals(this->maxFramebufferLayers, other_struct.maxFramebufferLayers))
return false;
if (!mojo::Equals(this->framebufferColorSampleCounts, other_struct.framebufferColorSampleCounts))
return false;
if (!mojo::Equals(this->framebufferDepthSampleCounts, other_struct.framebufferDepthSampleCounts))
return false;
if (!mojo::Equals(this->framebufferStencilSampleCounts, other_struct.framebufferStencilSampleCounts))
return false;
if (!mojo::Equals(this->framebufferNoAttachmentsSampleCounts, other_struct.framebufferNoAttachmentsSampleCounts))
return false;
if (!mojo::Equals(this->maxColorAttachments, other_struct.maxColorAttachments))
return false;
if (!mojo::Equals(this->sampledImageColorSampleCounts, other_struct.sampledImageColorSampleCounts))
return false;
if (!mojo::Equals(this->sampledImageIntegerSampleCounts, other_struct.sampledImageIntegerSampleCounts))
return false;
if (!mojo::Equals(this->sampledImageDepthSampleCounts, other_struct.sampledImageDepthSampleCounts))
return false;
if (!mojo::Equals(this->sampledImageStencilSampleCounts, other_struct.sampledImageStencilSampleCounts))
return false;
if (!mojo::Equals(this->storageImageSampleCounts, other_struct.storageImageSampleCounts))
return false;
if (!mojo::Equals(this->maxSampleMaskWords, other_struct.maxSampleMaskWords))
return false;
if (!mojo::Equals(this->timestampComputeAndGraphics, other_struct.timestampComputeAndGraphics))
return false;
if (!mojo::Equals(this->timestampPeriod, other_struct.timestampPeriod))
return false;
if (!mojo::Equals(this->maxClipDistances, other_struct.maxClipDistances))
return false;
if (!mojo::Equals(this->maxCullDistances, other_struct.maxCullDistances))
return false;
if (!mojo::Equals(this->maxCombinedClipAndCullDistances, other_struct.maxCombinedClipAndCullDistances))
return false;
if (!mojo::Equals(this->discreteQueuePriorities, other_struct.discreteQueuePriorities))
return false;
if (!mojo::Equals(this->pointSizeRange, other_struct.pointSizeRange))
return false;
if (!mojo::Equals(this->lineWidthRange, other_struct.lineWidthRange))
return false;
if (!mojo::Equals(this->pointSizeGranularity, other_struct.pointSizeGranularity))
return false;
if (!mojo::Equals(this->lineWidthGranularity, other_struct.lineWidthGranularity))
return false;
if (!mojo::Equals(this->strictLines, other_struct.strictLines))
return false;
if (!mojo::Equals(this->standardSampleLocations, other_struct.standardSampleLocations))
return false;
if (!mojo::Equals(this->optimalBufferCopyOffsetAlignment, other_struct.optimalBufferCopyOffsetAlignment))
return false;
if (!mojo::Equals(this->optimalBufferCopyRowPitchAlignment, other_struct.optimalBufferCopyRowPitchAlignment))
return false;
if (!mojo::Equals(this->nonCoherentAtomSize, other_struct.nonCoherentAtomSize))
return false;
return true;
}
template <typename T, VkPhysicalDeviceLimits::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.maxImageDimension1D < rhs.maxImageDimension1D)
return true;
if (rhs.maxImageDimension1D < lhs.maxImageDimension1D)
return false;
if (lhs.maxImageDimension2D < rhs.maxImageDimension2D)
return true;
if (rhs.maxImageDimension2D < lhs.maxImageDimension2D)
return false;
if (lhs.maxImageDimension3D < rhs.maxImageDimension3D)
return true;
if (rhs.maxImageDimension3D < lhs.maxImageDimension3D)
return false;
if (lhs.maxImageDimensionCube < rhs.maxImageDimensionCube)
return true;
if (rhs.maxImageDimensionCube < lhs.maxImageDimensionCube)
return false;
if (lhs.maxImageArrayLayers < rhs.maxImageArrayLayers)
return true;
if (rhs.maxImageArrayLayers < lhs.maxImageArrayLayers)
return false;
if (lhs.maxTexelBufferElements < rhs.maxTexelBufferElements)
return true;
if (rhs.maxTexelBufferElements < lhs.maxTexelBufferElements)
return false;
if (lhs.maxUniformBufferRange < rhs.maxUniformBufferRange)
return true;
if (rhs.maxUniformBufferRange < lhs.maxUniformBufferRange)
return false;
if (lhs.maxStorageBufferRange < rhs.maxStorageBufferRange)
return true;
if (rhs.maxStorageBufferRange < lhs.maxStorageBufferRange)
return false;
if (lhs.maxPushConstantsSize < rhs.maxPushConstantsSize)
return true;
if (rhs.maxPushConstantsSize < lhs.maxPushConstantsSize)
return false;
if (lhs.maxMemoryAllocationCount < rhs.maxMemoryAllocationCount)
return true;
if (rhs.maxMemoryAllocationCount < lhs.maxMemoryAllocationCount)
return false;
if (lhs.maxSamplerAllocationCount < rhs.maxSamplerAllocationCount)
return true;
if (rhs.maxSamplerAllocationCount < lhs.maxSamplerAllocationCount)
return false;
if (lhs.bufferImageGranularity < rhs.bufferImageGranularity)
return true;
if (rhs.bufferImageGranularity < lhs.bufferImageGranularity)
return false;
if (lhs.sparseAddressSpaceSize < rhs.sparseAddressSpaceSize)
return true;
if (rhs.sparseAddressSpaceSize < lhs.sparseAddressSpaceSize)
return false;
if (lhs.maxBoundDescriptorSets < rhs.maxBoundDescriptorSets)
return true;
if (rhs.maxBoundDescriptorSets < lhs.maxBoundDescriptorSets)
return false;
if (lhs.maxPerStageDescriptorSamplers < rhs.maxPerStageDescriptorSamplers)
return true;
if (rhs.maxPerStageDescriptorSamplers < lhs.maxPerStageDescriptorSamplers)
return false;
if (lhs.maxPerStageDescriptorUniformBuffers < rhs.maxPerStageDescriptorUniformBuffers)
return true;
if (rhs.maxPerStageDescriptorUniformBuffers < lhs.maxPerStageDescriptorUniformBuffers)
return false;
if (lhs.maxPerStageDescriptorStorageBuffers < rhs.maxPerStageDescriptorStorageBuffers)
return true;
if (rhs.maxPerStageDescriptorStorageBuffers < lhs.maxPerStageDescriptorStorageBuffers)
return false;
if (lhs.maxPerStageDescriptorSampledImages < rhs.maxPerStageDescriptorSampledImages)
return true;
if (rhs.maxPerStageDescriptorSampledImages < lhs.maxPerStageDescriptorSampledImages)
return false;
if (lhs.maxPerStageDescriptorStorageImages < rhs.maxPerStageDescriptorStorageImages)
return true;
if (rhs.maxPerStageDescriptorStorageImages < lhs.maxPerStageDescriptorStorageImages)
return false;
if (lhs.maxPerStageDescriptorInputAttachments < rhs.maxPerStageDescriptorInputAttachments)
return true;
if (rhs.maxPerStageDescriptorInputAttachments < lhs.maxPerStageDescriptorInputAttachments)
return false;
if (lhs.maxPerStageResources < rhs.maxPerStageResources)
return true;
if (rhs.maxPerStageResources < lhs.maxPerStageResources)
return false;
if (lhs.maxDescriptorSetSamplers < rhs.maxDescriptorSetSamplers)
return true;
if (rhs.maxDescriptorSetSamplers < lhs.maxDescriptorSetSamplers)
return false;
if (lhs.maxDescriptorSetUniformBuffers < rhs.maxDescriptorSetUniformBuffers)
return true;
if (rhs.maxDescriptorSetUniformBuffers < lhs.maxDescriptorSetUniformBuffers)
return false;
if (lhs.maxDescriptorSetUniformBuffersDynamic < rhs.maxDescriptorSetUniformBuffersDynamic)
return true;
if (rhs.maxDescriptorSetUniformBuffersDynamic < lhs.maxDescriptorSetUniformBuffersDynamic)
return false;
if (lhs.maxDescriptorSetStorageBuffers < rhs.maxDescriptorSetStorageBuffers)
return true;
if (rhs.maxDescriptorSetStorageBuffers < lhs.maxDescriptorSetStorageBuffers)
return false;
if (lhs.maxDescriptorSetStorageBuffersDynamic < rhs.maxDescriptorSetStorageBuffersDynamic)
return true;
if (rhs.maxDescriptorSetStorageBuffersDynamic < lhs.maxDescriptorSetStorageBuffersDynamic)
return false;
if (lhs.maxDescriptorSetSampledImages < rhs.maxDescriptorSetSampledImages)
return true;
if (rhs.maxDescriptorSetSampledImages < lhs.maxDescriptorSetSampledImages)
return false;
if (lhs.maxDescriptorSetStorageImages < rhs.maxDescriptorSetStorageImages)
return true;
if (rhs.maxDescriptorSetStorageImages < lhs.maxDescriptorSetStorageImages)
return false;
if (lhs.maxDescriptorSetInputAttachments < rhs.maxDescriptorSetInputAttachments)
return true;
if (rhs.maxDescriptorSetInputAttachments < lhs.maxDescriptorSetInputAttachments)
return false;
if (lhs.maxVertexInputAttributes < rhs.maxVertexInputAttributes)
return true;
if (rhs.maxVertexInputAttributes < lhs.maxVertexInputAttributes)
return false;
if (lhs.maxVertexInputBindings < rhs.maxVertexInputBindings)
return true;
if (rhs.maxVertexInputBindings < lhs.maxVertexInputBindings)
return false;
if (lhs.maxVertexInputAttributeOffset < rhs.maxVertexInputAttributeOffset)
return true;
if (rhs.maxVertexInputAttributeOffset < lhs.maxVertexInputAttributeOffset)
return false;
if (lhs.maxVertexInputBindingStride < rhs.maxVertexInputBindingStride)
return true;
if (rhs.maxVertexInputBindingStride < lhs.maxVertexInputBindingStride)
return false;
if (lhs.maxVertexOutputComponents < rhs.maxVertexOutputComponents)
return true;
if (rhs.maxVertexOutputComponents < lhs.maxVertexOutputComponents)
return false;
if (lhs.maxTessellationGenerationLevel < rhs.maxTessellationGenerationLevel)
return true;
if (rhs.maxTessellationGenerationLevel < lhs.maxTessellationGenerationLevel)
return false;
if (lhs.maxTessellationPatchSize < rhs.maxTessellationPatchSize)
return true;
if (rhs.maxTessellationPatchSize < lhs.maxTessellationPatchSize)
return false;
if (lhs.maxTessellationControlPerVertexInputComponents < rhs.maxTessellationControlPerVertexInputComponents)
return true;
if (rhs.maxTessellationControlPerVertexInputComponents < lhs.maxTessellationControlPerVertexInputComponents)
return false;
if (lhs.maxTessellationControlPerVertexOutputComponents < rhs.maxTessellationControlPerVertexOutputComponents)
return true;
if (rhs.maxTessellationControlPerVertexOutputComponents < lhs.maxTessellationControlPerVertexOutputComponents)
return false;
if (lhs.maxTessellationControlPerPatchOutputComponents < rhs.maxTessellationControlPerPatchOutputComponents)
return true;
if (rhs.maxTessellationControlPerPatchOutputComponents < lhs.maxTessellationControlPerPatchOutputComponents)
return false;
if (lhs.maxTessellationControlTotalOutputComponents < rhs.maxTessellationControlTotalOutputComponents)
return true;
if (rhs.maxTessellationControlTotalOutputComponents < lhs.maxTessellationControlTotalOutputComponents)
return false;
if (lhs.maxTessellationEvaluationInputComponents < rhs.maxTessellationEvaluationInputComponents)
return true;
if (rhs.maxTessellationEvaluationInputComponents < lhs.maxTessellationEvaluationInputComponents)
return false;
if (lhs.maxTessellationEvaluationOutputComponents < rhs.maxTessellationEvaluationOutputComponents)
return true;
if (rhs.maxTessellationEvaluationOutputComponents < lhs.maxTessellationEvaluationOutputComponents)
return false;
if (lhs.maxGeometryShaderInvocations < rhs.maxGeometryShaderInvocations)
return true;
if (rhs.maxGeometryShaderInvocations < lhs.maxGeometryShaderInvocations)
return false;
if (lhs.maxGeometryInputComponents < rhs.maxGeometryInputComponents)
return true;
if (rhs.maxGeometryInputComponents < lhs.maxGeometryInputComponents)
return false;
if (lhs.maxGeometryOutputComponents < rhs.maxGeometryOutputComponents)
return true;
if (rhs.maxGeometryOutputComponents < lhs.maxGeometryOutputComponents)
return false;
if (lhs.maxGeometryOutputVertices < rhs.maxGeometryOutputVertices)
return true;
if (rhs.maxGeometryOutputVertices < lhs.maxGeometryOutputVertices)
return false;
if (lhs.maxGeometryTotalOutputComponents < rhs.maxGeometryTotalOutputComponents)
return true;
if (rhs.maxGeometryTotalOutputComponents < lhs.maxGeometryTotalOutputComponents)
return false;
if (lhs.maxFragmentInputComponents < rhs.maxFragmentInputComponents)
return true;
if (rhs.maxFragmentInputComponents < lhs.maxFragmentInputComponents)
return false;
if (lhs.maxFragmentOutputAttachments < rhs.maxFragmentOutputAttachments)
return true;
if (rhs.maxFragmentOutputAttachments < lhs.maxFragmentOutputAttachments)
return false;
if (lhs.maxFragmentDualSrcAttachments < rhs.maxFragmentDualSrcAttachments)
return true;
if (rhs.maxFragmentDualSrcAttachments < lhs.maxFragmentDualSrcAttachments)
return false;
if (lhs.maxFragmentCombinedOutputResources < rhs.maxFragmentCombinedOutputResources)
return true;
if (rhs.maxFragmentCombinedOutputResources < lhs.maxFragmentCombinedOutputResources)
return false;
if (lhs.maxComputeSharedMemorySize < rhs.maxComputeSharedMemorySize)
return true;
if (rhs.maxComputeSharedMemorySize < lhs.maxComputeSharedMemorySize)
return false;
if (lhs.maxComputeWorkGroupCount < rhs.maxComputeWorkGroupCount)
return true;
if (rhs.maxComputeWorkGroupCount < lhs.maxComputeWorkGroupCount)
return false;
if (lhs.maxComputeWorkGroupInvocations < rhs.maxComputeWorkGroupInvocations)
return true;
if (rhs.maxComputeWorkGroupInvocations < lhs.maxComputeWorkGroupInvocations)
return false;
if (lhs.maxComputeWorkGroupSize < rhs.maxComputeWorkGroupSize)
return true;
if (rhs.maxComputeWorkGroupSize < lhs.maxComputeWorkGroupSize)
return false;
if (lhs.subPixelPrecisionBits < rhs.subPixelPrecisionBits)
return true;
if (rhs.subPixelPrecisionBits < lhs.subPixelPrecisionBits)
return false;
if (lhs.subTexelPrecisionBits < rhs.subTexelPrecisionBits)
return true;
if (rhs.subTexelPrecisionBits < lhs.subTexelPrecisionBits)
return false;
if (lhs.mipmapPrecisionBits < rhs.mipmapPrecisionBits)
return true;
if (rhs.mipmapPrecisionBits < lhs.mipmapPrecisionBits)
return false;
if (lhs.maxDrawIndexedIndexValue < rhs.maxDrawIndexedIndexValue)
return true;
if (rhs.maxDrawIndexedIndexValue < lhs.maxDrawIndexedIndexValue)
return false;
if (lhs.maxDrawIndirectCount < rhs.maxDrawIndirectCount)
return true;
if (rhs.maxDrawIndirectCount < lhs.maxDrawIndirectCount)
return false;
if (lhs.maxSamplerLodBias < rhs.maxSamplerLodBias)
return true;
if (rhs.maxSamplerLodBias < lhs.maxSamplerLodBias)
return false;
if (lhs.maxSamplerAnisotropy < rhs.maxSamplerAnisotropy)
return true;
if (rhs.maxSamplerAnisotropy < lhs.maxSamplerAnisotropy)
return false;
if (lhs.maxViewports < rhs.maxViewports)
return true;
if (rhs.maxViewports < lhs.maxViewports)
return false;
if (lhs.maxViewportDimensions < rhs.maxViewportDimensions)
return true;
if (rhs.maxViewportDimensions < lhs.maxViewportDimensions)
return false;
if (lhs.viewportBoundsRange < rhs.viewportBoundsRange)
return true;
if (rhs.viewportBoundsRange < lhs.viewportBoundsRange)
return false;
if (lhs.viewportSubPixelBits < rhs.viewportSubPixelBits)
return true;
if (rhs.viewportSubPixelBits < lhs.viewportSubPixelBits)
return false;
if (lhs.minMemoryMapAlignment < rhs.minMemoryMapAlignment)
return true;
if (rhs.minMemoryMapAlignment < lhs.minMemoryMapAlignment)
return false;
if (lhs.minTexelBufferOffsetAlignment < rhs.minTexelBufferOffsetAlignment)
return true;
if (rhs.minTexelBufferOffsetAlignment < lhs.minTexelBufferOffsetAlignment)
return false;
if (lhs.minUniformBufferOffsetAlignment < rhs.minUniformBufferOffsetAlignment)
return true;
if (rhs.minUniformBufferOffsetAlignment < lhs.minUniformBufferOffsetAlignment)
return false;
if (lhs.minStorageBufferOffsetAlignment < rhs.minStorageBufferOffsetAlignment)
return true;
if (rhs.minStorageBufferOffsetAlignment < lhs.minStorageBufferOffsetAlignment)
return false;
if (lhs.minTexelOffset < rhs.minTexelOffset)
return true;
if (rhs.minTexelOffset < lhs.minTexelOffset)
return false;
if (lhs.maxTexelOffset < rhs.maxTexelOffset)
return true;
if (rhs.maxTexelOffset < lhs.maxTexelOffset)
return false;
if (lhs.minTexelGatherOffset < rhs.minTexelGatherOffset)
return true;
if (rhs.minTexelGatherOffset < lhs.minTexelGatherOffset)
return false;
if (lhs.maxTexelGatherOffset < rhs.maxTexelGatherOffset)
return true;
if (rhs.maxTexelGatherOffset < lhs.maxTexelGatherOffset)
return false;
if (lhs.minInterpolationOffset < rhs.minInterpolationOffset)
return true;
if (rhs.minInterpolationOffset < lhs.minInterpolationOffset)
return false;
if (lhs.maxInterpolationOffset < rhs.maxInterpolationOffset)
return true;
if (rhs.maxInterpolationOffset < lhs.maxInterpolationOffset)
return false;
if (lhs.subPixelInterpolationOffsetBits < rhs.subPixelInterpolationOffsetBits)
return true;
if (rhs.subPixelInterpolationOffsetBits < lhs.subPixelInterpolationOffsetBits)
return false;
if (lhs.maxFramebufferWidth < rhs.maxFramebufferWidth)
return true;
if (rhs.maxFramebufferWidth < lhs.maxFramebufferWidth)
return false;
if (lhs.maxFramebufferHeight < rhs.maxFramebufferHeight)
return true;
if (rhs.maxFramebufferHeight < lhs.maxFramebufferHeight)
return false;
if (lhs.maxFramebufferLayers < rhs.maxFramebufferLayers)
return true;
if (rhs.maxFramebufferLayers < lhs.maxFramebufferLayers)
return false;
if (lhs.framebufferColorSampleCounts < rhs.framebufferColorSampleCounts)
return true;
if (rhs.framebufferColorSampleCounts < lhs.framebufferColorSampleCounts)
return false;
if (lhs.framebufferDepthSampleCounts < rhs.framebufferDepthSampleCounts)
return true;
if (rhs.framebufferDepthSampleCounts < lhs.framebufferDepthSampleCounts)
return false;
if (lhs.framebufferStencilSampleCounts < rhs.framebufferStencilSampleCounts)
return true;
if (rhs.framebufferStencilSampleCounts < lhs.framebufferStencilSampleCounts)
return false;
if (lhs.framebufferNoAttachmentsSampleCounts < rhs.framebufferNoAttachmentsSampleCounts)
return true;
if (rhs.framebufferNoAttachmentsSampleCounts < lhs.framebufferNoAttachmentsSampleCounts)
return false;
if (lhs.maxColorAttachments < rhs.maxColorAttachments)
return true;
if (rhs.maxColorAttachments < lhs.maxColorAttachments)
return false;
if (lhs.sampledImageColorSampleCounts < rhs.sampledImageColorSampleCounts)
return true;
if (rhs.sampledImageColorSampleCounts < lhs.sampledImageColorSampleCounts)
return false;
if (lhs.sampledImageIntegerSampleCounts < rhs.sampledImageIntegerSampleCounts)
return true;
if (rhs.sampledImageIntegerSampleCounts < lhs.sampledImageIntegerSampleCounts)
return false;
if (lhs.sampledImageDepthSampleCounts < rhs.sampledImageDepthSampleCounts)
return true;
if (rhs.sampledImageDepthSampleCounts < lhs.sampledImageDepthSampleCounts)
return false;
if (lhs.sampledImageStencilSampleCounts < rhs.sampledImageStencilSampleCounts)
return true;
if (rhs.sampledImageStencilSampleCounts < lhs.sampledImageStencilSampleCounts)
return false;
if (lhs.storageImageSampleCounts < rhs.storageImageSampleCounts)
return true;
if (rhs.storageImageSampleCounts < lhs.storageImageSampleCounts)
return false;
if (lhs.maxSampleMaskWords < rhs.maxSampleMaskWords)
return true;
if (rhs.maxSampleMaskWords < lhs.maxSampleMaskWords)
return false;
if (lhs.timestampComputeAndGraphics < rhs.timestampComputeAndGraphics)
return true;
if (rhs.timestampComputeAndGraphics < lhs.timestampComputeAndGraphics)
return false;
if (lhs.timestampPeriod < rhs.timestampPeriod)
return true;
if (rhs.timestampPeriod < lhs.timestampPeriod)
return false;
if (lhs.maxClipDistances < rhs.maxClipDistances)
return true;
if (rhs.maxClipDistances < lhs.maxClipDistances)
return false;
if (lhs.maxCullDistances < rhs.maxCullDistances)
return true;
if (rhs.maxCullDistances < lhs.maxCullDistances)
return false;
if (lhs.maxCombinedClipAndCullDistances < rhs.maxCombinedClipAndCullDistances)
return true;
if (rhs.maxCombinedClipAndCullDistances < lhs.maxCombinedClipAndCullDistances)
return false;
if (lhs.discreteQueuePriorities < rhs.discreteQueuePriorities)
return true;
if (rhs.discreteQueuePriorities < lhs.discreteQueuePriorities)
return false;
if (lhs.pointSizeRange < rhs.pointSizeRange)
return true;
if (rhs.pointSizeRange < lhs.pointSizeRange)
return false;
if (lhs.lineWidthRange < rhs.lineWidthRange)
return true;
if (rhs.lineWidthRange < lhs.lineWidthRange)
return false;
if (lhs.pointSizeGranularity < rhs.pointSizeGranularity)
return true;
if (rhs.pointSizeGranularity < lhs.pointSizeGranularity)
return false;
if (lhs.lineWidthGranularity < rhs.lineWidthGranularity)
return true;
if (rhs.lineWidthGranularity < lhs.lineWidthGranularity)
return false;
if (lhs.strictLines < rhs.strictLines)
return true;
if (rhs.strictLines < lhs.strictLines)
return false;
if (lhs.standardSampleLocations < rhs.standardSampleLocations)
return true;
if (rhs.standardSampleLocations < lhs.standardSampleLocations)
return false;
if (lhs.optimalBufferCopyOffsetAlignment < rhs.optimalBufferCopyOffsetAlignment)
return true;
if (rhs.optimalBufferCopyOffsetAlignment < lhs.optimalBufferCopyOffsetAlignment)
return false;
if (lhs.optimalBufferCopyRowPitchAlignment < rhs.optimalBufferCopyRowPitchAlignment)
return true;
if (rhs.optimalBufferCopyRowPitchAlignment < lhs.optimalBufferCopyRowPitchAlignment)
return false;
if (lhs.nonCoherentAtomSize < rhs.nonCoherentAtomSize)
return true;
if (rhs.nonCoherentAtomSize < lhs.nonCoherentAtomSize)
return false;
return false;
}
template <typename StructPtrType>
VkPhysicalDeviceSparsePropertiesPtr VkPhysicalDeviceSparseProperties::Clone() const {
return New(
mojo::Clone(residencyStandard2DBlockShape),
mojo::Clone(residencyStandard2DMultisampleBlockShape),
mojo::Clone(residencyStandard3DBlockShape),
mojo::Clone(residencyAlignedMipSize),
mojo::Clone(residencyNonResidentStrict)
);
}
template <typename T, VkPhysicalDeviceSparseProperties::EnableIfSame<T>*>
bool VkPhysicalDeviceSparseProperties::Equals(const T& other_struct) const {
if (!mojo::Equals(this->residencyStandard2DBlockShape, other_struct.residencyStandard2DBlockShape))
return false;
if (!mojo::Equals(this->residencyStandard2DMultisampleBlockShape, other_struct.residencyStandard2DMultisampleBlockShape))
return false;
if (!mojo::Equals(this->residencyStandard3DBlockShape, other_struct.residencyStandard3DBlockShape))
return false;
if (!mojo::Equals(this->residencyAlignedMipSize, other_struct.residencyAlignedMipSize))
return false;
if (!mojo::Equals(this->residencyNonResidentStrict, other_struct.residencyNonResidentStrict))
return false;
return true;
}
template <typename T, VkPhysicalDeviceSparseProperties::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.residencyStandard2DBlockShape < rhs.residencyStandard2DBlockShape)
return true;
if (rhs.residencyStandard2DBlockShape < lhs.residencyStandard2DBlockShape)
return false;
if (lhs.residencyStandard2DMultisampleBlockShape < rhs.residencyStandard2DMultisampleBlockShape)
return true;
if (rhs.residencyStandard2DMultisampleBlockShape < lhs.residencyStandard2DMultisampleBlockShape)
return false;
if (lhs.residencyStandard3DBlockShape < rhs.residencyStandard3DBlockShape)
return true;
if (rhs.residencyStandard3DBlockShape < lhs.residencyStandard3DBlockShape)
return false;
if (lhs.residencyAlignedMipSize < rhs.residencyAlignedMipSize)
return true;
if (rhs.residencyAlignedMipSize < lhs.residencyAlignedMipSize)
return false;
if (lhs.residencyNonResidentStrict < rhs.residencyNonResidentStrict)
return true;
if (rhs.residencyNonResidentStrict < lhs.residencyNonResidentStrict)
return false;
return false;
}
template <typename StructPtrType>
VkPhysicalDevicePropertiesPtr VkPhysicalDeviceProperties::Clone() const {
return New(
mojo::Clone(apiVersion),
mojo::Clone(driverVersion),
mojo::Clone(vendorID),
mojo::Clone(deviceID),
mojo::Clone(deviceType),
mojo::Clone(deviceName),
mojo::Clone(pipelineCacheUUID),
mojo::Clone(limits),
mojo::Clone(sparseProperties)
);
}
template <typename T, VkPhysicalDeviceProperties::EnableIfSame<T>*>
bool VkPhysicalDeviceProperties::Equals(const T& other_struct) const {
if (!mojo::Equals(this->apiVersion, other_struct.apiVersion))
return false;
if (!mojo::Equals(this->driverVersion, other_struct.driverVersion))
return false;
if (!mojo::Equals(this->vendorID, other_struct.vendorID))
return false;
if (!mojo::Equals(this->deviceID, other_struct.deviceID))
return false;
if (!mojo::Equals(this->deviceType, other_struct.deviceType))
return false;
if (!mojo::Equals(this->deviceName, other_struct.deviceName))
return false;
if (!mojo::Equals(this->pipelineCacheUUID, other_struct.pipelineCacheUUID))
return false;
if (!mojo::Equals(this->limits, other_struct.limits))
return false;
if (!mojo::Equals(this->sparseProperties, other_struct.sparseProperties))
return false;
return true;
}
template <typename T, VkPhysicalDeviceProperties::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.apiVersion < rhs.apiVersion)
return true;
if (rhs.apiVersion < lhs.apiVersion)
return false;
if (lhs.driverVersion < rhs.driverVersion)
return true;
if (rhs.driverVersion < lhs.driverVersion)
return false;
if (lhs.vendorID < rhs.vendorID)
return true;
if (rhs.vendorID < lhs.vendorID)
return false;
if (lhs.deviceID < rhs.deviceID)
return true;
if (rhs.deviceID < lhs.deviceID)
return false;
if (lhs.deviceType < rhs.deviceType)
return true;
if (rhs.deviceType < lhs.deviceType)
return false;
if (lhs.deviceName < rhs.deviceName)
return true;
if (rhs.deviceName < lhs.deviceName)
return false;
if (lhs.pipelineCacheUUID < rhs.pipelineCacheUUID)
return true;
if (rhs.pipelineCacheUUID < lhs.pipelineCacheUUID)
return false;
if (lhs.limits < rhs.limits)
return true;
if (rhs.limits < lhs.limits)
return false;
if (lhs.sparseProperties < rhs.sparseProperties)
return true;
if (rhs.sparseProperties < lhs.sparseProperties)
return false;
return false;
}
template <typename StructPtrType>
VkPhysicalDeviceFeaturesPtr VkPhysicalDeviceFeatures::Clone() const {
return New(
mojo::Clone(robustBufferAccess),
mojo::Clone(fullDrawIndexUint32),
mojo::Clone(imageCubeArray),
mojo::Clone(independentBlend),
mojo::Clone(geometryShader),
mojo::Clone(tessellationShader),
mojo::Clone(sampleRateShading),
mojo::Clone(dualSrcBlend),
mojo::Clone(logicOp),
mojo::Clone(multiDrawIndirect),
mojo::Clone(drawIndirectFirstInstance),
mojo::Clone(depthClamp),
mojo::Clone(depthBiasClamp),
mojo::Clone(fillModeNonSolid),
mojo::Clone(depthBounds),
mojo::Clone(wideLines),
mojo::Clone(largePoints),
mojo::Clone(alphaToOne),
mojo::Clone(multiViewport),
mojo::Clone(samplerAnisotropy),
mojo::Clone(textureCompressionETC2),
mojo::Clone(textureCompressionASTC_LDR),
mojo::Clone(textureCompressionBC),
mojo::Clone(occlusionQueryPrecise),
mojo::Clone(pipelineStatisticsQuery),
mojo::Clone(vertexPipelineStoresAndAtomics),
mojo::Clone(fragmentStoresAndAtomics),
mojo::Clone(shaderTessellationAndGeometryPointSize),
mojo::Clone(shaderImageGatherExtended),
mojo::Clone(shaderStorageImageExtendedFormats),
mojo::Clone(shaderStorageImageMultisample),
mojo::Clone(shaderStorageImageReadWithoutFormat),
mojo::Clone(shaderStorageImageWriteWithoutFormat),
mojo::Clone(shaderUniformBufferArrayDynamicIndexing),
mojo::Clone(shaderSampledImageArrayDynamicIndexing),
mojo::Clone(shaderStorageBufferArrayDynamicIndexing),
mojo::Clone(shaderStorageImageArrayDynamicIndexing),
mojo::Clone(shaderClipDistance),
mojo::Clone(shaderCullDistance),
mojo::Clone(shaderFloat64),
mojo::Clone(shaderInt64),
mojo::Clone(shaderInt16),
mojo::Clone(shaderResourceResidency),
mojo::Clone(shaderResourceMinLod),
mojo::Clone(sparseBinding),
mojo::Clone(sparseResidencyBuffer),
mojo::Clone(sparseResidencyImage2D),
mojo::Clone(sparseResidencyImage3D),
mojo::Clone(sparseResidency2Samples),
mojo::Clone(sparseResidency4Samples),
mojo::Clone(sparseResidency8Samples),
mojo::Clone(sparseResidency16Samples),
mojo::Clone(sparseResidencyAliased),
mojo::Clone(variableMultisampleRate),
mojo::Clone(inheritedQueries)
);
}
template <typename T, VkPhysicalDeviceFeatures::EnableIfSame<T>*>
bool VkPhysicalDeviceFeatures::Equals(const T& other_struct) const {
if (!mojo::Equals(this->robustBufferAccess, other_struct.robustBufferAccess))
return false;
if (!mojo::Equals(this->fullDrawIndexUint32, other_struct.fullDrawIndexUint32))
return false;
if (!mojo::Equals(this->imageCubeArray, other_struct.imageCubeArray))
return false;
if (!mojo::Equals(this->independentBlend, other_struct.independentBlend))
return false;
if (!mojo::Equals(this->geometryShader, other_struct.geometryShader))
return false;
if (!mojo::Equals(this->tessellationShader, other_struct.tessellationShader))
return false;
if (!mojo::Equals(this->sampleRateShading, other_struct.sampleRateShading))
return false;
if (!mojo::Equals(this->dualSrcBlend, other_struct.dualSrcBlend))
return false;
if (!mojo::Equals(this->logicOp, other_struct.logicOp))
return false;
if (!mojo::Equals(this->multiDrawIndirect, other_struct.multiDrawIndirect))
return false;
if (!mojo::Equals(this->drawIndirectFirstInstance, other_struct.drawIndirectFirstInstance))
return false;
if (!mojo::Equals(this->depthClamp, other_struct.depthClamp))
return false;
if (!mojo::Equals(this->depthBiasClamp, other_struct.depthBiasClamp))
return false;
if (!mojo::Equals(this->fillModeNonSolid, other_struct.fillModeNonSolid))
return false;
if (!mojo::Equals(this->depthBounds, other_struct.depthBounds))
return false;
if (!mojo::Equals(this->wideLines, other_struct.wideLines))
return false;
if (!mojo::Equals(this->largePoints, other_struct.largePoints))
return false;
if (!mojo::Equals(this->alphaToOne, other_struct.alphaToOne))
return false;
if (!mojo::Equals(this->multiViewport, other_struct.multiViewport))
return false;
if (!mojo::Equals(this->samplerAnisotropy, other_struct.samplerAnisotropy))
return false;
if (!mojo::Equals(this->textureCompressionETC2, other_struct.textureCompressionETC2))
return false;
if (!mojo::Equals(this->textureCompressionASTC_LDR, other_struct.textureCompressionASTC_LDR))
return false;
if (!mojo::Equals(this->textureCompressionBC, other_struct.textureCompressionBC))
return false;
if (!mojo::Equals(this->occlusionQueryPrecise, other_struct.occlusionQueryPrecise))
return false;
if (!mojo::Equals(this->pipelineStatisticsQuery, other_struct.pipelineStatisticsQuery))
return false;
if (!mojo::Equals(this->vertexPipelineStoresAndAtomics, other_struct.vertexPipelineStoresAndAtomics))
return false;
if (!mojo::Equals(this->fragmentStoresAndAtomics, other_struct.fragmentStoresAndAtomics))
return false;
if (!mojo::Equals(this->shaderTessellationAndGeometryPointSize, other_struct.shaderTessellationAndGeometryPointSize))
return false;
if (!mojo::Equals(this->shaderImageGatherExtended, other_struct.shaderImageGatherExtended))
return false;
if (!mojo::Equals(this->shaderStorageImageExtendedFormats, other_struct.shaderStorageImageExtendedFormats))
return false;
if (!mojo::Equals(this->shaderStorageImageMultisample, other_struct.shaderStorageImageMultisample))
return false;
if (!mojo::Equals(this->shaderStorageImageReadWithoutFormat, other_struct.shaderStorageImageReadWithoutFormat))
return false;
if (!mojo::Equals(this->shaderStorageImageWriteWithoutFormat, other_struct.shaderStorageImageWriteWithoutFormat))
return false;
if (!mojo::Equals(this->shaderUniformBufferArrayDynamicIndexing, other_struct.shaderUniformBufferArrayDynamicIndexing))
return false;
if (!mojo::Equals(this->shaderSampledImageArrayDynamicIndexing, other_struct.shaderSampledImageArrayDynamicIndexing))
return false;
if (!mojo::Equals(this->shaderStorageBufferArrayDynamicIndexing, other_struct.shaderStorageBufferArrayDynamicIndexing))
return false;
if (!mojo::Equals(this->shaderStorageImageArrayDynamicIndexing, other_struct.shaderStorageImageArrayDynamicIndexing))
return false;
if (!mojo::Equals(this->shaderClipDistance, other_struct.shaderClipDistance))
return false;
if (!mojo::Equals(this->shaderCullDistance, other_struct.shaderCullDistance))
return false;
if (!mojo::Equals(this->shaderFloat64, other_struct.shaderFloat64))
return false;
if (!mojo::Equals(this->shaderInt64, other_struct.shaderInt64))
return false;
if (!mojo::Equals(this->shaderInt16, other_struct.shaderInt16))
return false;
if (!mojo::Equals(this->shaderResourceResidency, other_struct.shaderResourceResidency))
return false;
if (!mojo::Equals(this->shaderResourceMinLod, other_struct.shaderResourceMinLod))
return false;
if (!mojo::Equals(this->sparseBinding, other_struct.sparseBinding))
return false;
if (!mojo::Equals(this->sparseResidencyBuffer, other_struct.sparseResidencyBuffer))
return false;
if (!mojo::Equals(this->sparseResidencyImage2D, other_struct.sparseResidencyImage2D))
return false;
if (!mojo::Equals(this->sparseResidencyImage3D, other_struct.sparseResidencyImage3D))
return false;
if (!mojo::Equals(this->sparseResidency2Samples, other_struct.sparseResidency2Samples))
return false;
if (!mojo::Equals(this->sparseResidency4Samples, other_struct.sparseResidency4Samples))
return false;
if (!mojo::Equals(this->sparseResidency8Samples, other_struct.sparseResidency8Samples))
return false;
if (!mojo::Equals(this->sparseResidency16Samples, other_struct.sparseResidency16Samples))
return false;
if (!mojo::Equals(this->sparseResidencyAliased, other_struct.sparseResidencyAliased))
return false;
if (!mojo::Equals(this->variableMultisampleRate, other_struct.variableMultisampleRate))
return false;
if (!mojo::Equals(this->inheritedQueries, other_struct.inheritedQueries))
return false;
return true;
}
template <typename T, VkPhysicalDeviceFeatures::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.robustBufferAccess < rhs.robustBufferAccess)
return true;
if (rhs.robustBufferAccess < lhs.robustBufferAccess)
return false;
if (lhs.fullDrawIndexUint32 < rhs.fullDrawIndexUint32)
return true;
if (rhs.fullDrawIndexUint32 < lhs.fullDrawIndexUint32)
return false;
if (lhs.imageCubeArray < rhs.imageCubeArray)
return true;
if (rhs.imageCubeArray < lhs.imageCubeArray)
return false;
if (lhs.independentBlend < rhs.independentBlend)
return true;
if (rhs.independentBlend < lhs.independentBlend)
return false;
if (lhs.geometryShader < rhs.geometryShader)
return true;
if (rhs.geometryShader < lhs.geometryShader)
return false;
if (lhs.tessellationShader < rhs.tessellationShader)
return true;
if (rhs.tessellationShader < lhs.tessellationShader)
return false;
if (lhs.sampleRateShading < rhs.sampleRateShading)
return true;
if (rhs.sampleRateShading < lhs.sampleRateShading)
return false;
if (lhs.dualSrcBlend < rhs.dualSrcBlend)
return true;
if (rhs.dualSrcBlend < lhs.dualSrcBlend)
return false;
if (lhs.logicOp < rhs.logicOp)
return true;
if (rhs.logicOp < lhs.logicOp)
return false;
if (lhs.multiDrawIndirect < rhs.multiDrawIndirect)
return true;
if (rhs.multiDrawIndirect < lhs.multiDrawIndirect)
return false;
if (lhs.drawIndirectFirstInstance < rhs.drawIndirectFirstInstance)
return true;
if (rhs.drawIndirectFirstInstance < lhs.drawIndirectFirstInstance)
return false;
if (lhs.depthClamp < rhs.depthClamp)
return true;
if (rhs.depthClamp < lhs.depthClamp)
return false;
if (lhs.depthBiasClamp < rhs.depthBiasClamp)
return true;
if (rhs.depthBiasClamp < lhs.depthBiasClamp)
return false;
if (lhs.fillModeNonSolid < rhs.fillModeNonSolid)
return true;
if (rhs.fillModeNonSolid < lhs.fillModeNonSolid)
return false;
if (lhs.depthBounds < rhs.depthBounds)
return true;
if (rhs.depthBounds < lhs.depthBounds)
return false;
if (lhs.wideLines < rhs.wideLines)
return true;
if (rhs.wideLines < lhs.wideLines)
return false;
if (lhs.largePoints < rhs.largePoints)
return true;
if (rhs.largePoints < lhs.largePoints)
return false;
if (lhs.alphaToOne < rhs.alphaToOne)
return true;
if (rhs.alphaToOne < lhs.alphaToOne)
return false;
if (lhs.multiViewport < rhs.multiViewport)
return true;
if (rhs.multiViewport < lhs.multiViewport)
return false;
if (lhs.samplerAnisotropy < rhs.samplerAnisotropy)
return true;
if (rhs.samplerAnisotropy < lhs.samplerAnisotropy)
return false;
if (lhs.textureCompressionETC2 < rhs.textureCompressionETC2)
return true;
if (rhs.textureCompressionETC2 < lhs.textureCompressionETC2)
return false;
if (lhs.textureCompressionASTC_LDR < rhs.textureCompressionASTC_LDR)
return true;
if (rhs.textureCompressionASTC_LDR < lhs.textureCompressionASTC_LDR)
return false;
if (lhs.textureCompressionBC < rhs.textureCompressionBC)
return true;
if (rhs.textureCompressionBC < lhs.textureCompressionBC)
return false;
if (lhs.occlusionQueryPrecise < rhs.occlusionQueryPrecise)
return true;
if (rhs.occlusionQueryPrecise < lhs.occlusionQueryPrecise)
return false;
if (lhs.pipelineStatisticsQuery < rhs.pipelineStatisticsQuery)
return true;
if (rhs.pipelineStatisticsQuery < lhs.pipelineStatisticsQuery)
return false;
if (lhs.vertexPipelineStoresAndAtomics < rhs.vertexPipelineStoresAndAtomics)
return true;
if (rhs.vertexPipelineStoresAndAtomics < lhs.vertexPipelineStoresAndAtomics)
return false;
if (lhs.fragmentStoresAndAtomics < rhs.fragmentStoresAndAtomics)
return true;
if (rhs.fragmentStoresAndAtomics < lhs.fragmentStoresAndAtomics)
return false;
if (lhs.shaderTessellationAndGeometryPointSize < rhs.shaderTessellationAndGeometryPointSize)
return true;
if (rhs.shaderTessellationAndGeometryPointSize < lhs.shaderTessellationAndGeometryPointSize)
return false;
if (lhs.shaderImageGatherExtended < rhs.shaderImageGatherExtended)
return true;
if (rhs.shaderImageGatherExtended < lhs.shaderImageGatherExtended)
return false;
if (lhs.shaderStorageImageExtendedFormats < rhs.shaderStorageImageExtendedFormats)
return true;
if (rhs.shaderStorageImageExtendedFormats < lhs.shaderStorageImageExtendedFormats)
return false;
if (lhs.shaderStorageImageMultisample < rhs.shaderStorageImageMultisample)
return true;
if (rhs.shaderStorageImageMultisample < lhs.shaderStorageImageMultisample)
return false;
if (lhs.shaderStorageImageReadWithoutFormat < rhs.shaderStorageImageReadWithoutFormat)
return true;
if (rhs.shaderStorageImageReadWithoutFormat < lhs.shaderStorageImageReadWithoutFormat)
return false;
if (lhs.shaderStorageImageWriteWithoutFormat < rhs.shaderStorageImageWriteWithoutFormat)
return true;
if (rhs.shaderStorageImageWriteWithoutFormat < lhs.shaderStorageImageWriteWithoutFormat)
return false;
if (lhs.shaderUniformBufferArrayDynamicIndexing < rhs.shaderUniformBufferArrayDynamicIndexing)
return true;
if (rhs.shaderUniformBufferArrayDynamicIndexing < lhs.shaderUniformBufferArrayDynamicIndexing)
return false;
if (lhs.shaderSampledImageArrayDynamicIndexing < rhs.shaderSampledImageArrayDynamicIndexing)
return true;
if (rhs.shaderSampledImageArrayDynamicIndexing < lhs.shaderSampledImageArrayDynamicIndexing)
return false;
if (lhs.shaderStorageBufferArrayDynamicIndexing < rhs.shaderStorageBufferArrayDynamicIndexing)
return true;
if (rhs.shaderStorageBufferArrayDynamicIndexing < lhs.shaderStorageBufferArrayDynamicIndexing)
return false;
if (lhs.shaderStorageImageArrayDynamicIndexing < rhs.shaderStorageImageArrayDynamicIndexing)
return true;
if (rhs.shaderStorageImageArrayDynamicIndexing < lhs.shaderStorageImageArrayDynamicIndexing)
return false;
if (lhs.shaderClipDistance < rhs.shaderClipDistance)
return true;
if (rhs.shaderClipDistance < lhs.shaderClipDistance)
return false;
if (lhs.shaderCullDistance < rhs.shaderCullDistance)
return true;
if (rhs.shaderCullDistance < lhs.shaderCullDistance)
return false;
if (lhs.shaderFloat64 < rhs.shaderFloat64)
return true;
if (rhs.shaderFloat64 < lhs.shaderFloat64)
return false;
if (lhs.shaderInt64 < rhs.shaderInt64)
return true;
if (rhs.shaderInt64 < lhs.shaderInt64)
return false;
if (lhs.shaderInt16 < rhs.shaderInt16)
return true;
if (rhs.shaderInt16 < lhs.shaderInt16)
return false;
if (lhs.shaderResourceResidency < rhs.shaderResourceResidency)
return true;
if (rhs.shaderResourceResidency < lhs.shaderResourceResidency)
return false;
if (lhs.shaderResourceMinLod < rhs.shaderResourceMinLod)
return true;
if (rhs.shaderResourceMinLod < lhs.shaderResourceMinLod)
return false;
if (lhs.sparseBinding < rhs.sparseBinding)
return true;
if (rhs.sparseBinding < lhs.sparseBinding)
return false;
if (lhs.sparseResidencyBuffer < rhs.sparseResidencyBuffer)
return true;
if (rhs.sparseResidencyBuffer < lhs.sparseResidencyBuffer)
return false;
if (lhs.sparseResidencyImage2D < rhs.sparseResidencyImage2D)
return true;
if (rhs.sparseResidencyImage2D < lhs.sparseResidencyImage2D)
return false;
if (lhs.sparseResidencyImage3D < rhs.sparseResidencyImage3D)
return true;
if (rhs.sparseResidencyImage3D < lhs.sparseResidencyImage3D)
return false;
if (lhs.sparseResidency2Samples < rhs.sparseResidency2Samples)
return true;
if (rhs.sparseResidency2Samples < lhs.sparseResidency2Samples)
return false;
if (lhs.sparseResidency4Samples < rhs.sparseResidency4Samples)
return true;
if (rhs.sparseResidency4Samples < lhs.sparseResidency4Samples)
return false;
if (lhs.sparseResidency8Samples < rhs.sparseResidency8Samples)
return true;
if (rhs.sparseResidency8Samples < lhs.sparseResidency8Samples)
return false;
if (lhs.sparseResidency16Samples < rhs.sparseResidency16Samples)
return true;
if (rhs.sparseResidency16Samples < lhs.sparseResidency16Samples)
return false;
if (lhs.sparseResidencyAliased < rhs.sparseResidencyAliased)
return true;
if (rhs.sparseResidencyAliased < lhs.sparseResidencyAliased)
return false;
if (lhs.variableMultisampleRate < rhs.variableMultisampleRate)
return true;
if (rhs.variableMultisampleRate < lhs.variableMultisampleRate)
return false;
if (lhs.inheritedQueries < rhs.inheritedQueries)
return true;
if (rhs.inheritedQueries < lhs.inheritedQueries)
return false;
return false;
}
template <typename StructPtrType>
VkExtent3DPtr VkExtent3D::Clone() const {
return New(
mojo::Clone(width),
mojo::Clone(height),
mojo::Clone(depth)
);
}
template <typename T, VkExtent3D::EnableIfSame<T>*>
bool VkExtent3D::Equals(const T& other_struct) const {
if (!mojo::Equals(this->width, other_struct.width))
return false;
if (!mojo::Equals(this->height, other_struct.height))
return false;
if (!mojo::Equals(this->depth, other_struct.depth))
return false;
return true;
}
template <typename T, VkExtent3D::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.width < rhs.width)
return true;
if (rhs.width < lhs.width)
return false;
if (lhs.height < rhs.height)
return true;
if (rhs.height < lhs.height)
return false;
if (lhs.depth < rhs.depth)
return true;
if (rhs.depth < lhs.depth)
return false;
return false;
}
template <typename StructPtrType>
VkQueueFamilyPropertiesPtr VkQueueFamilyProperties::Clone() const {
return New(
mojo::Clone(queueFlags),
mojo::Clone(queueCount),
mojo::Clone(timestampValidBits),
mojo::Clone(minImageTransferGranularity)
);
}
template <typename T, VkQueueFamilyProperties::EnableIfSame<T>*>
bool VkQueueFamilyProperties::Equals(const T& other_struct) const {
if (!mojo::Equals(this->queueFlags, other_struct.queueFlags))
return false;
if (!mojo::Equals(this->queueCount, other_struct.queueCount))
return false;
if (!mojo::Equals(this->timestampValidBits, other_struct.timestampValidBits))
return false;
if (!mojo::Equals(this->minImageTransferGranularity, other_struct.minImageTransferGranularity))
return false;
return true;
}
template <typename T, VkQueueFamilyProperties::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.queueFlags < rhs.queueFlags)
return true;
if (rhs.queueFlags < lhs.queueFlags)
return false;
if (lhs.queueCount < rhs.queueCount)
return true;
if (rhs.queueCount < lhs.queueCount)
return false;
if (lhs.timestampValidBits < rhs.timestampValidBits)
return true;
if (rhs.timestampValidBits < lhs.timestampValidBits)
return false;
if (lhs.minImageTransferGranularity < rhs.minImageTransferGranularity)
return true;
if (rhs.minImageTransferGranularity < lhs.minImageTransferGranularity)
return false;
return false;
}
} // namespace mojom
} // namespace gpu
namespace mojo {
template <>
struct GPU_EXPORT StructTraits<::gpu::mojom::VkExtensionProperties::DataView,
::gpu::mojom::VkExtensionPropertiesPtr> {
static bool IsNull(const ::gpu::mojom::VkExtensionPropertiesPtr& input) { return !input; }
static void SetToNull(::gpu::mojom::VkExtensionPropertiesPtr* output) { output->reset(); }
static const decltype(::gpu::mojom::VkExtensionProperties::extensionName)& extensionName(
const ::gpu::mojom::VkExtensionPropertiesPtr& input) {
return input->extensionName;
}
static decltype(::gpu::mojom::VkExtensionProperties::specVersion) specVersion(
const ::gpu::mojom::VkExtensionPropertiesPtr& input) {
return input->specVersion;
}
static bool Read(::gpu::mojom::VkExtensionProperties::DataView input, ::gpu::mojom::VkExtensionPropertiesPtr* output);
};
template <>
struct GPU_EXPORT StructTraits<::gpu::mojom::VkLayerProperties::DataView,
::gpu::mojom::VkLayerPropertiesPtr> {
static bool IsNull(const ::gpu::mojom::VkLayerPropertiesPtr& input) { return !input; }
static void SetToNull(::gpu::mojom::VkLayerPropertiesPtr* output) { output->reset(); }
static const decltype(::gpu::mojom::VkLayerProperties::layerName)& layerName(
const ::gpu::mojom::VkLayerPropertiesPtr& input) {
return input->layerName;
}
static decltype(::gpu::mojom::VkLayerProperties::specVersion) specVersion(
const ::gpu::mojom::VkLayerPropertiesPtr& input) {
return input->specVersion;
}
static decltype(::gpu::mojom::VkLayerProperties::implementationVersion) implementationVersion(
const ::gpu::mojom::VkLayerPropertiesPtr& input) {
return input->implementationVersion;
}
static const decltype(::gpu::mojom::VkLayerProperties::description)& description(
const ::gpu::mojom::VkLayerPropertiesPtr& input) {
return input->description;
}
static bool Read(::gpu::mojom::VkLayerProperties::DataView input, ::gpu::mojom::VkLayerPropertiesPtr* output);
};
template <>
struct GPU_EXPORT StructTraits<::gpu::mojom::VkPhysicalDeviceLimits::DataView,
::gpu::mojom::VkPhysicalDeviceLimitsPtr> {
static bool IsNull(const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) { return !input; }
static void SetToNull(::gpu::mojom::VkPhysicalDeviceLimitsPtr* output) { output->reset(); }
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxImageDimension1D) maxImageDimension1D(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxImageDimension1D;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxImageDimension2D) maxImageDimension2D(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxImageDimension2D;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxImageDimension3D) maxImageDimension3D(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxImageDimension3D;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxImageDimensionCube) maxImageDimensionCube(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxImageDimensionCube;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxImageArrayLayers) maxImageArrayLayers(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxImageArrayLayers;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTexelBufferElements) maxTexelBufferElements(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTexelBufferElements;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxUniformBufferRange) maxUniformBufferRange(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxUniformBufferRange;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxStorageBufferRange) maxStorageBufferRange(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxStorageBufferRange;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxPushConstantsSize) maxPushConstantsSize(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxPushConstantsSize;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxMemoryAllocationCount) maxMemoryAllocationCount(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxMemoryAllocationCount;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxSamplerAllocationCount) maxSamplerAllocationCount(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxSamplerAllocationCount;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::bufferImageGranularity) bufferImageGranularity(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->bufferImageGranularity;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::sparseAddressSpaceSize) sparseAddressSpaceSize(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->sparseAddressSpaceSize;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxBoundDescriptorSets) maxBoundDescriptorSets(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxBoundDescriptorSets;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxPerStageDescriptorSamplers) maxPerStageDescriptorSamplers(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxPerStageDescriptorSamplers;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxPerStageDescriptorUniformBuffers) maxPerStageDescriptorUniformBuffers(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxPerStageDescriptorUniformBuffers;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxPerStageDescriptorStorageBuffers) maxPerStageDescriptorStorageBuffers(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxPerStageDescriptorStorageBuffers;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxPerStageDescriptorSampledImages) maxPerStageDescriptorSampledImages(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxPerStageDescriptorSampledImages;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxPerStageDescriptorStorageImages) maxPerStageDescriptorStorageImages(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxPerStageDescriptorStorageImages;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxPerStageDescriptorInputAttachments) maxPerStageDescriptorInputAttachments(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxPerStageDescriptorInputAttachments;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxPerStageResources) maxPerStageResources(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxPerStageResources;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxDescriptorSetSamplers) maxDescriptorSetSamplers(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxDescriptorSetSamplers;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxDescriptorSetUniformBuffers) maxDescriptorSetUniformBuffers(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxDescriptorSetUniformBuffers;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxDescriptorSetUniformBuffersDynamic) maxDescriptorSetUniformBuffersDynamic(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxDescriptorSetUniformBuffersDynamic;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxDescriptorSetStorageBuffers) maxDescriptorSetStorageBuffers(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxDescriptorSetStorageBuffers;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxDescriptorSetStorageBuffersDynamic) maxDescriptorSetStorageBuffersDynamic(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxDescriptorSetStorageBuffersDynamic;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxDescriptorSetSampledImages) maxDescriptorSetSampledImages(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxDescriptorSetSampledImages;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxDescriptorSetStorageImages) maxDescriptorSetStorageImages(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxDescriptorSetStorageImages;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxDescriptorSetInputAttachments) maxDescriptorSetInputAttachments(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxDescriptorSetInputAttachments;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxVertexInputAttributes) maxVertexInputAttributes(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxVertexInputAttributes;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxVertexInputBindings) maxVertexInputBindings(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxVertexInputBindings;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxVertexInputAttributeOffset) maxVertexInputAttributeOffset(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxVertexInputAttributeOffset;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxVertexInputBindingStride) maxVertexInputBindingStride(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxVertexInputBindingStride;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxVertexOutputComponents) maxVertexOutputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxVertexOutputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTessellationGenerationLevel) maxTessellationGenerationLevel(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTessellationGenerationLevel;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTessellationPatchSize) maxTessellationPatchSize(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTessellationPatchSize;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTessellationControlPerVertexInputComponents) maxTessellationControlPerVertexInputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTessellationControlPerVertexInputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTessellationControlPerVertexOutputComponents) maxTessellationControlPerVertexOutputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTessellationControlPerVertexOutputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTessellationControlPerPatchOutputComponents) maxTessellationControlPerPatchOutputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTessellationControlPerPatchOutputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTessellationControlTotalOutputComponents) maxTessellationControlTotalOutputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTessellationControlTotalOutputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTessellationEvaluationInputComponents) maxTessellationEvaluationInputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTessellationEvaluationInputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTessellationEvaluationOutputComponents) maxTessellationEvaluationOutputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTessellationEvaluationOutputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxGeometryShaderInvocations) maxGeometryShaderInvocations(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxGeometryShaderInvocations;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxGeometryInputComponents) maxGeometryInputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxGeometryInputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxGeometryOutputComponents) maxGeometryOutputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxGeometryOutputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxGeometryOutputVertices) maxGeometryOutputVertices(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxGeometryOutputVertices;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxGeometryTotalOutputComponents) maxGeometryTotalOutputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxGeometryTotalOutputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxFragmentInputComponents) maxFragmentInputComponents(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxFragmentInputComponents;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxFragmentOutputAttachments) maxFragmentOutputAttachments(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxFragmentOutputAttachments;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxFragmentDualSrcAttachments) maxFragmentDualSrcAttachments(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxFragmentDualSrcAttachments;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxFragmentCombinedOutputResources) maxFragmentCombinedOutputResources(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxFragmentCombinedOutputResources;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxComputeSharedMemorySize) maxComputeSharedMemorySize(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxComputeSharedMemorySize;
}
static const decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxComputeWorkGroupCount)& maxComputeWorkGroupCount(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxComputeWorkGroupCount;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxComputeWorkGroupInvocations) maxComputeWorkGroupInvocations(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxComputeWorkGroupInvocations;
}
static const decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxComputeWorkGroupSize)& maxComputeWorkGroupSize(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxComputeWorkGroupSize;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::subPixelPrecisionBits) subPixelPrecisionBits(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->subPixelPrecisionBits;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::subTexelPrecisionBits) subTexelPrecisionBits(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->subTexelPrecisionBits;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::mipmapPrecisionBits) mipmapPrecisionBits(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->mipmapPrecisionBits;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxDrawIndexedIndexValue) maxDrawIndexedIndexValue(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxDrawIndexedIndexValue;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxDrawIndirectCount) maxDrawIndirectCount(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxDrawIndirectCount;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxSamplerLodBias) maxSamplerLodBias(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxSamplerLodBias;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxSamplerAnisotropy) maxSamplerAnisotropy(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxSamplerAnisotropy;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxViewports) maxViewports(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxViewports;
}
static const decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxViewportDimensions)& maxViewportDimensions(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxViewportDimensions;
}
static const decltype(::gpu::mojom::VkPhysicalDeviceLimits::viewportBoundsRange)& viewportBoundsRange(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->viewportBoundsRange;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::viewportSubPixelBits) viewportSubPixelBits(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->viewportSubPixelBits;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::minMemoryMapAlignment) minMemoryMapAlignment(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->minMemoryMapAlignment;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::minTexelBufferOffsetAlignment) minTexelBufferOffsetAlignment(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->minTexelBufferOffsetAlignment;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::minUniformBufferOffsetAlignment) minUniformBufferOffsetAlignment(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->minUniformBufferOffsetAlignment;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::minStorageBufferOffsetAlignment) minStorageBufferOffsetAlignment(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->minStorageBufferOffsetAlignment;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::minTexelOffset) minTexelOffset(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->minTexelOffset;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTexelOffset) maxTexelOffset(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTexelOffset;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::minTexelGatherOffset) minTexelGatherOffset(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->minTexelGatherOffset;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxTexelGatherOffset) maxTexelGatherOffset(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxTexelGatherOffset;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::minInterpolationOffset) minInterpolationOffset(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->minInterpolationOffset;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxInterpolationOffset) maxInterpolationOffset(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxInterpolationOffset;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::subPixelInterpolationOffsetBits) subPixelInterpolationOffsetBits(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->subPixelInterpolationOffsetBits;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxFramebufferWidth) maxFramebufferWidth(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxFramebufferWidth;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxFramebufferHeight) maxFramebufferHeight(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxFramebufferHeight;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxFramebufferLayers) maxFramebufferLayers(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxFramebufferLayers;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::framebufferColorSampleCounts) framebufferColorSampleCounts(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->framebufferColorSampleCounts;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::framebufferDepthSampleCounts) framebufferDepthSampleCounts(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->framebufferDepthSampleCounts;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::framebufferStencilSampleCounts) framebufferStencilSampleCounts(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->framebufferStencilSampleCounts;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::framebufferNoAttachmentsSampleCounts) framebufferNoAttachmentsSampleCounts(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->framebufferNoAttachmentsSampleCounts;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxColorAttachments) maxColorAttachments(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxColorAttachments;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::sampledImageColorSampleCounts) sampledImageColorSampleCounts(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->sampledImageColorSampleCounts;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::sampledImageIntegerSampleCounts) sampledImageIntegerSampleCounts(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->sampledImageIntegerSampleCounts;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::sampledImageDepthSampleCounts) sampledImageDepthSampleCounts(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->sampledImageDepthSampleCounts;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::sampledImageStencilSampleCounts) sampledImageStencilSampleCounts(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->sampledImageStencilSampleCounts;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::storageImageSampleCounts) storageImageSampleCounts(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->storageImageSampleCounts;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxSampleMaskWords) maxSampleMaskWords(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxSampleMaskWords;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::timestampComputeAndGraphics) timestampComputeAndGraphics(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->timestampComputeAndGraphics;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::timestampPeriod) timestampPeriod(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->timestampPeriod;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxClipDistances) maxClipDistances(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxClipDistances;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxCullDistances) maxCullDistances(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxCullDistances;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::maxCombinedClipAndCullDistances) maxCombinedClipAndCullDistances(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->maxCombinedClipAndCullDistances;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::discreteQueuePriorities) discreteQueuePriorities(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->discreteQueuePriorities;
}
static const decltype(::gpu::mojom::VkPhysicalDeviceLimits::pointSizeRange)& pointSizeRange(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->pointSizeRange;
}
static const decltype(::gpu::mojom::VkPhysicalDeviceLimits::lineWidthRange)& lineWidthRange(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->lineWidthRange;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::pointSizeGranularity) pointSizeGranularity(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->pointSizeGranularity;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::lineWidthGranularity) lineWidthGranularity(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->lineWidthGranularity;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::strictLines) strictLines(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->strictLines;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::standardSampleLocations) standardSampleLocations(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->standardSampleLocations;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::optimalBufferCopyOffsetAlignment) optimalBufferCopyOffsetAlignment(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->optimalBufferCopyOffsetAlignment;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::optimalBufferCopyRowPitchAlignment) optimalBufferCopyRowPitchAlignment(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->optimalBufferCopyRowPitchAlignment;
}
static decltype(::gpu::mojom::VkPhysicalDeviceLimits::nonCoherentAtomSize) nonCoherentAtomSize(
const ::gpu::mojom::VkPhysicalDeviceLimitsPtr& input) {
return input->nonCoherentAtomSize;
}
static bool Read(::gpu::mojom::VkPhysicalDeviceLimits::DataView input, ::gpu::mojom::VkPhysicalDeviceLimitsPtr* output);
};
template <>
struct GPU_EXPORT StructTraits<::gpu::mojom::VkPhysicalDeviceSparseProperties::DataView,
::gpu::mojom::VkPhysicalDeviceSparsePropertiesPtr> {
static bool IsNull(const ::gpu::mojom::VkPhysicalDeviceSparsePropertiesPtr& input) { return !input; }
static void SetToNull(::gpu::mojom::VkPhysicalDeviceSparsePropertiesPtr* output) { output->reset(); }
static decltype(::gpu::mojom::VkPhysicalDeviceSparseProperties::residencyStandard2DBlockShape) residencyStandard2DBlockShape(
const ::gpu::mojom::VkPhysicalDeviceSparsePropertiesPtr& input) {
return input->residencyStandard2DBlockShape;
}
static decltype(::gpu::mojom::VkPhysicalDeviceSparseProperties::residencyStandard2DMultisampleBlockShape) residencyStandard2DMultisampleBlockShape(
const ::gpu::mojom::VkPhysicalDeviceSparsePropertiesPtr& input) {
return input->residencyStandard2DMultisampleBlockShape;
}
static decltype(::gpu::mojom::VkPhysicalDeviceSparseProperties::residencyStandard3DBlockShape) residencyStandard3DBlockShape(
const ::gpu::mojom::VkPhysicalDeviceSparsePropertiesPtr& input) {
return input->residencyStandard3DBlockShape;
}
static decltype(::gpu::mojom::VkPhysicalDeviceSparseProperties::residencyAlignedMipSize) residencyAlignedMipSize(
const ::gpu::mojom::VkPhysicalDeviceSparsePropertiesPtr& input) {
return input->residencyAlignedMipSize;
}
static decltype(::gpu::mojom::VkPhysicalDeviceSparseProperties::residencyNonResidentStrict) residencyNonResidentStrict(
const ::gpu::mojom::VkPhysicalDeviceSparsePropertiesPtr& input) {
return input->residencyNonResidentStrict;
}
static bool Read(::gpu::mojom::VkPhysicalDeviceSparseProperties::DataView input, ::gpu::mojom::VkPhysicalDeviceSparsePropertiesPtr* output);
};
template <>
struct GPU_EXPORT StructTraits<::gpu::mojom::VkPhysicalDeviceProperties::DataView,
::gpu::mojom::VkPhysicalDevicePropertiesPtr> {
static bool IsNull(const ::gpu::mojom::VkPhysicalDevicePropertiesPtr& input) { return !input; }
static void SetToNull(::gpu::mojom::VkPhysicalDevicePropertiesPtr* output) { output->reset(); }
static decltype(::gpu::mojom::VkPhysicalDeviceProperties::apiVersion) apiVersion(
const ::gpu::mojom::VkPhysicalDevicePropertiesPtr& input) {
return input->apiVersion;
}
static decltype(::gpu::mojom::VkPhysicalDeviceProperties::driverVersion) driverVersion(
const ::gpu::mojom::VkPhysicalDevicePropertiesPtr& input) {
return input->driverVersion;
}
static decltype(::gpu::mojom::VkPhysicalDeviceProperties::vendorID) vendorID(
const ::gpu::mojom::VkPhysicalDevicePropertiesPtr& input) {
return input->vendorID;
}
static decltype(::gpu::mojom::VkPhysicalDeviceProperties::deviceID) deviceID(
const ::gpu::mojom::VkPhysicalDevicePropertiesPtr& input) {
return input->deviceID;
}
static decltype(::gpu::mojom::VkPhysicalDeviceProperties::deviceType) deviceType(
const ::gpu::mojom::VkPhysicalDevicePropertiesPtr& input) {
return input->deviceType;
}
static const decltype(::gpu::mojom::VkPhysicalDeviceProperties::deviceName)& deviceName(
const ::gpu::mojom::VkPhysicalDevicePropertiesPtr& input) {
return input->deviceName;
}
static const decltype(::gpu::mojom::VkPhysicalDeviceProperties::pipelineCacheUUID)& pipelineCacheUUID(
const ::gpu::mojom::VkPhysicalDevicePropertiesPtr& input) {
return input->pipelineCacheUUID;
}
static const decltype(::gpu::mojom::VkPhysicalDeviceProperties::limits)& limits(
const ::gpu::mojom::VkPhysicalDevicePropertiesPtr& input) {
return input->limits;
}
static const decltype(::gpu::mojom::VkPhysicalDeviceProperties::sparseProperties)& sparseProperties(
const ::gpu::mojom::VkPhysicalDevicePropertiesPtr& input) {
return input->sparseProperties;
}
static bool Read(::gpu::mojom::VkPhysicalDeviceProperties::DataView input, ::gpu::mojom::VkPhysicalDevicePropertiesPtr* output);
};
template <>
struct GPU_EXPORT StructTraits<::gpu::mojom::VkPhysicalDeviceFeatures::DataView,
::gpu::mojom::VkPhysicalDeviceFeaturesPtr> {
static bool IsNull(const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) { return !input; }
static void SetToNull(::gpu::mojom::VkPhysicalDeviceFeaturesPtr* output) { output->reset(); }
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::robustBufferAccess) robustBufferAccess(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->robustBufferAccess;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::fullDrawIndexUint32) fullDrawIndexUint32(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->fullDrawIndexUint32;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::imageCubeArray) imageCubeArray(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->imageCubeArray;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::independentBlend) independentBlend(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->independentBlend;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::geometryShader) geometryShader(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->geometryShader;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::tessellationShader) tessellationShader(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->tessellationShader;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::sampleRateShading) sampleRateShading(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->sampleRateShading;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::dualSrcBlend) dualSrcBlend(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->dualSrcBlend;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::logicOp) logicOp(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->logicOp;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::multiDrawIndirect) multiDrawIndirect(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->multiDrawIndirect;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::drawIndirectFirstInstance) drawIndirectFirstInstance(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->drawIndirectFirstInstance;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::depthClamp) depthClamp(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->depthClamp;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::depthBiasClamp) depthBiasClamp(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->depthBiasClamp;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::fillModeNonSolid) fillModeNonSolid(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->fillModeNonSolid;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::depthBounds) depthBounds(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->depthBounds;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::wideLines) wideLines(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->wideLines;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::largePoints) largePoints(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->largePoints;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::alphaToOne) alphaToOne(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->alphaToOne;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::multiViewport) multiViewport(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->multiViewport;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::samplerAnisotropy) samplerAnisotropy(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->samplerAnisotropy;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::textureCompressionETC2) textureCompressionETC2(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->textureCompressionETC2;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::textureCompressionASTC_LDR) textureCompressionASTC_LDR(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->textureCompressionASTC_LDR;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::textureCompressionBC) textureCompressionBC(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->textureCompressionBC;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::occlusionQueryPrecise) occlusionQueryPrecise(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->occlusionQueryPrecise;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::pipelineStatisticsQuery) pipelineStatisticsQuery(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->pipelineStatisticsQuery;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::vertexPipelineStoresAndAtomics) vertexPipelineStoresAndAtomics(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->vertexPipelineStoresAndAtomics;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::fragmentStoresAndAtomics) fragmentStoresAndAtomics(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->fragmentStoresAndAtomics;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderTessellationAndGeometryPointSize) shaderTessellationAndGeometryPointSize(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderTessellationAndGeometryPointSize;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderImageGatherExtended) shaderImageGatherExtended(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderImageGatherExtended;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderStorageImageExtendedFormats) shaderStorageImageExtendedFormats(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderStorageImageExtendedFormats;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderStorageImageMultisample) shaderStorageImageMultisample(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderStorageImageMultisample;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderStorageImageReadWithoutFormat) shaderStorageImageReadWithoutFormat(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderStorageImageReadWithoutFormat;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderStorageImageWriteWithoutFormat) shaderStorageImageWriteWithoutFormat(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderStorageImageWriteWithoutFormat;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderUniformBufferArrayDynamicIndexing) shaderUniformBufferArrayDynamicIndexing(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderUniformBufferArrayDynamicIndexing;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderSampledImageArrayDynamicIndexing) shaderSampledImageArrayDynamicIndexing(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderSampledImageArrayDynamicIndexing;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderStorageBufferArrayDynamicIndexing) shaderStorageBufferArrayDynamicIndexing(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderStorageBufferArrayDynamicIndexing;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderStorageImageArrayDynamicIndexing) shaderStorageImageArrayDynamicIndexing(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderStorageImageArrayDynamicIndexing;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderClipDistance) shaderClipDistance(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderClipDistance;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderCullDistance) shaderCullDistance(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderCullDistance;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderFloat64) shaderFloat64(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderFloat64;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderInt64) shaderInt64(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderInt64;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderInt16) shaderInt16(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderInt16;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderResourceResidency) shaderResourceResidency(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderResourceResidency;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::shaderResourceMinLod) shaderResourceMinLod(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->shaderResourceMinLod;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::sparseBinding) sparseBinding(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->sparseBinding;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::sparseResidencyBuffer) sparseResidencyBuffer(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->sparseResidencyBuffer;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::sparseResidencyImage2D) sparseResidencyImage2D(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->sparseResidencyImage2D;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::sparseResidencyImage3D) sparseResidencyImage3D(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->sparseResidencyImage3D;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::sparseResidency2Samples) sparseResidency2Samples(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->sparseResidency2Samples;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::sparseResidency4Samples) sparseResidency4Samples(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->sparseResidency4Samples;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::sparseResidency8Samples) sparseResidency8Samples(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->sparseResidency8Samples;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::sparseResidency16Samples) sparseResidency16Samples(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->sparseResidency16Samples;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::sparseResidencyAliased) sparseResidencyAliased(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->sparseResidencyAliased;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::variableMultisampleRate) variableMultisampleRate(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->variableMultisampleRate;
}
static decltype(::gpu::mojom::VkPhysicalDeviceFeatures::inheritedQueries) inheritedQueries(
const ::gpu::mojom::VkPhysicalDeviceFeaturesPtr& input) {
return input->inheritedQueries;
}
static bool Read(::gpu::mojom::VkPhysicalDeviceFeatures::DataView input, ::gpu::mojom::VkPhysicalDeviceFeaturesPtr* output);
};
template <>
struct GPU_EXPORT StructTraits<::gpu::mojom::VkExtent3D::DataView,
::gpu::mojom::VkExtent3DPtr> {
static bool IsNull(const ::gpu::mojom::VkExtent3DPtr& input) { return !input; }
static void SetToNull(::gpu::mojom::VkExtent3DPtr* output) { output->reset(); }
static decltype(::gpu::mojom::VkExtent3D::width) width(
const ::gpu::mojom::VkExtent3DPtr& input) {
return input->width;
}
static decltype(::gpu::mojom::VkExtent3D::height) height(
const ::gpu::mojom::VkExtent3DPtr& input) {
return input->height;
}
static decltype(::gpu::mojom::VkExtent3D::depth) depth(
const ::gpu::mojom::VkExtent3DPtr& input) {
return input->depth;
}
static bool Read(::gpu::mojom::VkExtent3D::DataView input, ::gpu::mojom::VkExtent3DPtr* output);
};
template <>
struct GPU_EXPORT StructTraits<::gpu::mojom::VkQueueFamilyProperties::DataView,
::gpu::mojom::VkQueueFamilyPropertiesPtr> {
static bool IsNull(const ::gpu::mojom::VkQueueFamilyPropertiesPtr& input) { return !input; }
static void SetToNull(::gpu::mojom::VkQueueFamilyPropertiesPtr* output) { output->reset(); }
static decltype(::gpu::mojom::VkQueueFamilyProperties::queueFlags) queueFlags(
const ::gpu::mojom::VkQueueFamilyPropertiesPtr& input) {
return input->queueFlags;
}
static decltype(::gpu::mojom::VkQueueFamilyProperties::queueCount) queueCount(
const ::gpu::mojom::VkQueueFamilyPropertiesPtr& input) {
return input->queueCount;
}
static decltype(::gpu::mojom::VkQueueFamilyProperties::timestampValidBits) timestampValidBits(
const ::gpu::mojom::VkQueueFamilyPropertiesPtr& input) {
return input->timestampValidBits;
}
static const decltype(::gpu::mojom::VkQueueFamilyProperties::minImageTransferGranularity)& minImageTransferGranularity(
const ::gpu::mojom::VkQueueFamilyPropertiesPtr& input) {
return input->minImageTransferGranularity;
}
static bool Read(::gpu::mojom::VkQueueFamilyProperties::DataView input, ::gpu::mojom::VkQueueFamilyPropertiesPtr* output);
};
} // namespace mojo
#endif // GPU_IPC_COMMON_VULKAN_TYPES_MOJOM_H_
/* Metadata comment
eyJtZXRhIjogW3siZW5kIjogMTMzMywgImJlZ2luIjogMTMxMiwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa0V4dGVuc2lvblByb3BlcnRpZXMi
fX0sIHsiZW5kIjogNTIwNSwgImJlZ2luIjogNTE5MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa0V4dGVuc2lvblByb3BlcnRpZXMuZXh0ZW5z
aW9uTmFtZSJ9fSwgeyJlbmQiOiA1Mjk2LCAiYmVnaW4iOiA1Mjg1LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrRXh0ZW5zaW9uUHJvcGVydGll
cy5zcGVjVmVyc2lvbiJ9fSwgeyJlbmQiOiA2MzgxLCAiYmVnaW4iOiA2MzY0LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUi
OiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJs
YW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrTGF5ZXJQcm9wZXJ0
aWVzIn19LCB7ImVuZCI6IDEwMjE3LCAiYmVnaW4iOiAxMDIwOCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa0xheWVyUHJvcGVydGllcy5sYXll
ck5hbWUifX0sIHsiZW5kIjogMTAzMDQsICJiZWdpbiI6IDEwMjkzLCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrTGF5ZXJQcm9wZXJ0aWVzLnNw
ZWNWZXJzaW9uIn19LCB7ImVuZCI6IDEwNDExLCAiYmVnaW4iOiAxMDM5MCwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa0xheWVyUHJvcGVydGll
cy5pbXBsZW1lbnRhdGlvblZlcnNpb24ifX0sIHsiZW5kIjogMTA1MDEsICJiZWdpbiI6IDEwNDkw
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZr
TGF5ZXJQcm9wZXJ0aWVzLmRlc2NyaXB0aW9uIn19LCB7ImVuZCI6IDExNTYwLCAiYmVnaW4iOiAx
MTU1MCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pv
bS5Wa0V4dGVudDNEIn19LCB7ImVuZCI6IDE1MTM3LCAiYmVnaW4iOiAxNTEzMiwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa0V4dGVudDNELndp
ZHRoIn19LCB7ImVuZCI6IDE1MjA3LCAiYmVnaW4iOiAxNTIwMSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa0V4dGVudDNELmhlaWdodCJ9fSwg
eyJlbmQiOiAxNTI3NSwgImJlZ2luIjogMTUyNzAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtFeHRlbnQzRC5kZXB0aCJ9fSwgeyJlbmQiOiAx
NjMzMSwgImJlZ2luIjogMTYzMDksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cyJ9fSwgeyJlbmQiOiAyNDcy
MSwgImJlZ2luIjogMjQ3MDIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhJbWFnZURpbWVuc2lvbjFE
In19LCB7ImVuZCI6IDI0ODI5LCAiYmVnaW4iOiAyNDgxMCwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1h
eEltYWdlRGltZW5zaW9uMkQifX0sIHsiZW5kIjogMjQ5MzcsICJiZWdpbiI6IDI0OTE4LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2lj
YWxEZXZpY2VMaW1pdHMubWF4SW1hZ2VEaW1lbnNpb24zRCJ9fSwgeyJlbmQiOiAyNTA0OSwgImJl
Z2luIjogMjUwMjgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJn
cHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhJbWFnZURpbWVuc2lvbkN1YmUifX0s
IHsiZW5kIjogMjUxNTcsICJiZWdpbiI6IDI1MTM4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4SW1h
Z2VBcnJheUxheWVycyJ9fSwgeyJlbmQiOiAyNTI3MSwgImJlZ2luIjogMjUyNDksICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERl
dmljZUxpbWl0cy5tYXhUZXhlbEJ1ZmZlckVsZW1lbnRzIn19LCB7ImVuZCI6IDI1MzgzLCAiYmVn
aW4iOiAyNTM2MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdw
dS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heFVuaWZvcm1CdWZmZXJSYW5nZSJ9fSwg
eyJlbmQiOiAyNTQ5NSwgImJlZ2luIjogMjU0NzQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhTdG9y
YWdlQnVmZmVyUmFuZ2UifX0sIHsiZW5kIjogMjU2MDUsICJiZWdpbiI6IDI1NTg1LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxE
ZXZpY2VMaW1pdHMubWF4UHVzaENvbnN0YW50c1NpemUifX0sIHsiZW5kIjogMjU3MjMsICJiZWdp
biI6IDI1Njk5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1
Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4TWVtb3J5QWxsb2NhdGlvbkNvdW50In19
LCB7ImVuZCI6IDI1ODQzLCAiYmVnaW4iOiAyNTgxOCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heFNh
bXBsZXJBbGxvY2F0aW9uQ291bnQifX0sIHsiZW5kIjogMjU5NTcsICJiZWdpbiI6IDI1OTM1LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5
c2ljYWxEZXZpY2VMaW1pdHMuYnVmZmVySW1hZ2VHcmFudWxhcml0eSJ9fSwgeyJlbmQiOiAyNjA3
MSwgImJlZ2luIjogMjYwNDksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5zcGFyc2VBZGRyZXNzU3BhY2VT
aXplIn19LCB7ImVuZCI6IDI2MTg1LCAiYmVnaW4iOiAyNjE2MywgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRz
Lm1heEJvdW5kRGVzY3JpcHRvclNldHMifX0sIHsiZW5kIjogMjYzMTMsICJiZWdpbiI6IDI2Mjg0
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZr
UGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4UGVyU3RhZ2VEZXNjcmlwdG9yU2FtcGxlcnMifX0sIHsi
ZW5kIjogMjY0NTMsICJiZWdpbiI6IDI2NDE4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4UGVyU3Rh
Z2VEZXNjcmlwdG9yVW5pZm9ybUJ1ZmZlcnMifX0sIHsiZW5kIjogMjY1OTMsICJiZWdpbiI6IDI2
NTU4LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9t
LlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4UGVyU3RhZ2VEZXNjcmlwdG9yU3RvcmFnZUJ1ZmZl
cnMifX0sIHsiZW5kIjogMjY3MzEsICJiZWdpbiI6IDI2Njk3LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMu
bWF4UGVyU3RhZ2VEZXNjcmlwdG9yU2FtcGxlZEltYWdlcyJ9fSwgeyJlbmQiOiAyNjg2OSwgImJl
Z2luIjogMjY4MzUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJn
cHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhQZXJTdGFnZURlc2NyaXB0b3JTdG9y
YWdlSW1hZ2VzIn19LCB7ImVuZCI6IDI3MDEzLCAiYmVnaW4iOiAyNjk3NiwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNl
TGltaXRzLm1heFBlclN0YWdlRGVzY3JpcHRvcklucHV0QXR0YWNobWVudHMifX0sIHsiZW5kIjog
MjcxMjMsICJiZWdpbiI6IDI3MTAzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4UGVyU3RhZ2VSZXNv
dXJjZXMifX0sIHsiZW5kIjogMjcyNDEsICJiZWdpbiI6IDI3MjE3LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1p
dHMubWF4RGVzY3JpcHRvclNldFNhbXBsZXJzIn19LCB7ImVuZCI6IDI3MzcxLCAiYmVnaW4iOiAy
NzM0MSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pv
bS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heERlc2NyaXB0b3JTZXRVbmlmb3JtQnVmZmVycyJ9
fSwgeyJlbmQiOiAyNzUxNSwgImJlZ2luIjogMjc0NzgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhE
ZXNjcmlwdG9yU2V0VW5pZm9ybUJ1ZmZlcnNEeW5hbWljIn19LCB7ImVuZCI6IDI3NjQ1LCAiYmVn
aW4iOiAyNzYxNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdw
dS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heERlc2NyaXB0b3JTZXRTdG9yYWdlQnVm
ZmVycyJ9fSwgeyJlbmQiOiAyNzc4OSwgImJlZ2luIjogMjc3NTIsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0
cy5tYXhEZXNjcmlwdG9yU2V0U3RvcmFnZUJ1ZmZlcnNEeW5hbWljIn19LCB7ImVuZCI6IDI3OTE3
LCAiYmVnaW4iOiAyNzg4OCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heERlc2NyaXB0b3JTZXRTYW1w
bGVkSW1hZ2VzIn19LCB7ImVuZCI6IDI4MDQ1LCAiYmVnaW4iOiAyODAxNiwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNl
TGltaXRzLm1heERlc2NyaXB0b3JTZXRTdG9yYWdlSW1hZ2VzIn19LCB7ImVuZCI6IDI4MTc5LCAi
YmVnaW4iOiAyODE0NywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heERlc2NyaXB0b3JTZXRJbnB1dEF0
dGFjaG1lbnRzIn19LCB7ImVuZCI6IDI4Mjk3LCAiYmVnaW4iOiAyODI3MywgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNl
TGltaXRzLm1heFZlcnRleElucHV0QXR0cmlidXRlcyJ9fSwgeyJlbmQiOiAyODQxMSwgImJlZ2lu
IjogMjgzODksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUu
bW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhWZXJ0ZXhJbnB1dEJpbmRpbmdzIn19LCB7
ImVuZCI6IDI4NTM5LCAiYmVnaW4iOiAyODUxMCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heFZlcnRl
eElucHV0QXR0cmlidXRlT2Zmc2V0In19LCB7ImVuZCI6IDI4NjYzLCAiYmVnaW4iOiAyODYzNiwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1Bo
eXNpY2FsRGV2aWNlTGltaXRzLm1heFZlcnRleElucHV0QmluZGluZ1N0cmlkZSJ9fSwgeyJlbmQi
OiAyODc4MywgImJlZ2luIjogMjg3NTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhWZXJ0ZXhPdXRw
dXRDb21wb25lbnRzIn19LCB7ImVuZCI6IDI4OTEzLCAiYmVnaW4iOiAyODg4MywgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2
aWNlTGltaXRzLm1heFRlc3NlbGxhdGlvbkdlbmVyYXRpb25MZXZlbCJ9fSwgeyJlbmQiOiAyOTAz
MSwgImJlZ2luIjogMjkwMDcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhUZXNzZWxsYXRpb25QYXRj
aFNpemUifX0sIHsiZW5kIjogMjkxOTMsICJiZWdpbiI6IDI5MTQ3LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1p
dHMubWF4VGVzc2VsbGF0aW9uQ29udHJvbFBlclZlcnRleElucHV0Q29tcG9uZW50cyJ9fSwgeyJl
bmQiOiAyOTM1NywgImJlZ2luIjogMjkzMTAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwg
InNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhUZXNzZWxs
YXRpb25Db250cm9sUGVyVmVydGV4T3V0cHV0Q29tcG9uZW50cyJ9fSwgeyJlbmQiOiAyOTUxOSwg
ImJlZ2luIjogMjk0NzMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhUZXNzZWxsYXRpb25Db250cm9s
UGVyUGF0Y2hPdXRwdXRDb21wb25lbnRzIn19LCB7ImVuZCI6IDI5Njc1LCAiYmVnaW4iOiAyOTYz
MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5W
a1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heFRlc3NlbGxhdGlvbkNvbnRyb2xUb3RhbE91dHB1dENv
bXBvbmVudHMifX0sIHsiZW5kIjogMjk4MjUsICJiZWdpbiI6IDI5Nzg1LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VM
aW1pdHMubWF4VGVzc2VsbGF0aW9uRXZhbHVhdGlvbklucHV0Q29tcG9uZW50cyJ9fSwgeyJlbmQi
OiAyOTk3NywgImJlZ2luIjogMjk5MzYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhUZXNzZWxsYXRp
b25FdmFsdWF0aW9uT3V0cHV0Q29tcG9uZW50cyJ9fSwgeyJlbmQiOiAzMDEwMywgImJlZ2luIjog
MzAwNzUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9q
b20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhHZW9tZXRyeVNoYWRlckludm9jYXRpb25zIn19
LCB7ImVuZCI6IDMwMjI1LCAiYmVnaW4iOiAzMDE5OSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heEdl
b21ldHJ5SW5wdXRDb21wb25lbnRzIn19LCB7ImVuZCI6IDMwMzQ5LCAiYmVnaW4iOiAzMDMyMiwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1Bo
eXNpY2FsRGV2aWNlTGltaXRzLm1heEdlb21ldHJ5T3V0cHV0Q29tcG9uZW50cyJ9fSwgeyJlbmQi
OiAzMDQ2OSwgImJlZ2luIjogMzA0NDQsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhHZW9tZXRyeU91
dHB1dFZlcnRpY2VzIn19LCB7ImVuZCI6IDMwNjAzLCAiYmVnaW4iOiAzMDU3MSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2
aWNlTGltaXRzLm1heEdlb21ldHJ5VG90YWxPdXRwdXRDb21wb25lbnRzIn19LCB7ImVuZCI6IDMw
NzI1LCAiYmVnaW4iOiAzMDY5OSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heEZyYWdtZW50SW5wdXRD
b21wb25lbnRzIn19LCB7ImVuZCI6IDMwODUxLCAiYmVnaW4iOiAzMDgyMywgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNl
TGltaXRzLm1heEZyYWdtZW50T3V0cHV0QXR0YWNobWVudHMifX0sIHsiZW5kIjogMzA5NzksICJi
ZWdpbiI6IDMwOTUwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
Z3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4RnJhZ21lbnREdWFsU3JjQXR0YWNo
bWVudHMifX0sIHsiZW5kIjogMzExMTcsICJiZWdpbiI6IDMxMDgzLCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1p
dHMubWF4RnJhZ21lbnRDb21iaW5lZE91dHB1dFJlc291cmNlcyJ9fSwgeyJlbmQiOiAzMTIzOSwg
ImJlZ2luIjogMzEyMTMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhDb21wdXRlU2hhcmVkTWVtb3J5
U2l6ZSJ9fSwgeyJlbmQiOiAzMTM3MCwgImJlZ2luIjogMzEzNDYsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0
cy5tYXhDb21wdXRlV29ya0dyb3VwQ291bnQifX0sIHsiZW5kIjogMzE1MDAsICJiZWdpbiI6IDMx
NDcwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9t
LlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4Q29tcHV0ZVdvcmtHcm91cEludm9jYXRpb25zIn19
LCB7ImVuZCI6IDMxNjI5LCAiYmVnaW4iOiAzMTYwNiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heENv
bXB1dGVXb3JrR3JvdXBTaXplIn19LCB7ImVuZCI6IDMxNzQxLCAiYmVnaW4iOiAzMTcyMCwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNp
Y2FsRGV2aWNlTGltaXRzLnN1YlBpeGVsUHJlY2lzaW9uQml0cyJ9fSwgeyJlbmQiOiAzMTg1Mywg
ImJlZ2luIjogMzE4MzIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6
ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5zdWJUZXhlbFByZWNpc2lvbkJpdHMi
fX0sIHsiZW5kIjogMzE5NjEsICJiZWdpbiI6IDMxOTQyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWlw
bWFwUHJlY2lzaW9uQml0cyJ9fSwgeyJlbmQiOiAzMjA3OSwgImJlZ2luIjogMzIwNTUsICJlZGdl
IjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2
bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3Jj
IiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNh
bERldmljZUxpbWl0cy5tYXhEcmF3SW5kZXhlZEluZGV4VmFsdWUifX0sIHsiZW5kIjogMzIxODks
ICJiZWdpbiI6IDMyMTY5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4RHJhd0luZGlyZWN0Q291bnQi
fX0sIHsiZW5kIjogMzIyOTAsICJiZWdpbiI6IDMyMjczLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4
U2FtcGxlckxvZEJpYXMifX0sIHsiZW5kIjogMzIzOTcsICJiZWdpbiI6IDMyMzc3LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxE
ZXZpY2VMaW1pdHMubWF4U2FtcGxlckFuaXNvdHJvcHkifX0sIHsiZW5kIjogMzI0OTEsICJiZWdp
biI6IDMyNDc5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1
Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4Vmlld3BvcnRzIn19LCB7ImVuZCI6IDMy
NjE2LCAiYmVnaW4iOiAzMjU5NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heFZpZXdwb3J0RGltZW5z
aW9ucyJ9fSwgeyJlbmQiOiAzMjczNCwgImJlZ2luIjogMzI3MTUsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0
cy52aWV3cG9ydEJvdW5kc1JhbmdlIn19LCB7ImVuZCI6IDMyODQ0LCAiYmVnaW4iOiAzMjgyNCwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1Bo
eXNpY2FsRGV2aWNlTGltaXRzLnZpZXdwb3J0U3ViUGl4ZWxCaXRzIn19LCB7ImVuZCI6IDMyOTU2
LCAiYmVnaW4iOiAzMjkzNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1pbk1lbW9yeU1hcEFsaWdubWVu
dCJ9fSwgeyJlbmQiOiAzMzA4NCwgImJlZ2luIjogMzMwNTUsICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjog
Im1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5t
aW5UZXhlbEJ1ZmZlck9mZnNldEFsaWdubWVudCJ9fSwgeyJlbmQiOiAzMzIxNiwgImJlZ2luIjog
MzMxODUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9q
b20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5taW5Vbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50
In19LCB7ImVuZCI6IDMzMzQ4LCAiYmVnaW4iOiAzMzMxNywgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1p
blN0b3JhZ2VCdWZmZXJPZmZzZXRBbGlnbm1lbnQifX0sIHsiZW5kIjogMzM0NDUsICJiZWdpbiI6
IDMzNDMxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1v
am9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWluVGV4ZWxPZmZzZXQifX0sIHsiZW5kIjogMzM1
NDMsICJiZWdpbiI6IDMzNTI5LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4VGV4ZWxPZmZzZXQifX0s
IHsiZW5kIjogMzM2NTIsICJiZWdpbiI6IDMzNjMyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pv
bSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWluVGV4
ZWxHYXRoZXJPZmZzZXQifX0sIHsiZW5kIjogMzM3NjIsICJiZWdpbiI6IDMzNzQyLCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxE
ZXZpY2VMaW1pdHMubWF4VGV4ZWxHYXRoZXJPZmZzZXQifX0sIHsiZW5kIjogMzM4NzMsICJiZWdp
biI6IDMzODUxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1
Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWluSW50ZXJwb2xhdGlvbk9mZnNldCJ9fSwg
eyJlbmQiOiAzMzk4NCwgImJlZ2luIjogMzM5NjIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9t
IiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhJbnRl
cnBvbGF0aW9uT2Zmc2V0In19LCB7ImVuZCI6IDM0MTE2LCAiYmVnaW4iOiAzNDA4NSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2Fs
RGV2aWNlTGltaXRzLnN1YlBpeGVsSW50ZXJwb2xhdGlvbk9mZnNldEJpdHMifX0sIHsiZW5kIjog
MzQyMjQsICJiZWdpbiI6IDM0MjA1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubWF4RnJhbWVidWZmZXJX
aWR0aCJ9fSwgeyJlbmQiOiAzNDMzNCwgImJlZ2luIjogMzQzMTQsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0
cy5tYXhGcmFtZWJ1ZmZlckhlaWdodCJ9fSwgeyJlbmQiOiAzNDQ0NCwgImJlZ2luIjogMzQ0MjQs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQ
aHlzaWNhbERldmljZUxpbWl0cy5tYXhGcmFtZWJ1ZmZlckxheWVycyJ9fSwgeyJlbmQiOiAzNDU3
MCwgImJlZ2luIjogMzQ1NDIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5mcmFtZWJ1ZmZlckNvbG9yU2Ft
cGxlQ291bnRzIn19LCB7ImVuZCI6IDM0Njk2LCAiYmVnaW4iOiAzNDY2OCwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNl
TGltaXRzLmZyYW1lYnVmZmVyRGVwdGhTYW1wbGVDb3VudHMifX0sIHsiZW5kIjogMzQ4MjYsICJi
ZWdpbiI6IDM0Nzk2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
Z3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMuZnJhbWVidWZmZXJTdGVuY2lsU2FtcGxl
Q291bnRzIn19LCB7ImVuZCI6IDM0OTY4LCAiYmVnaW4iOiAzNDkzMiwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGlt
aXRzLmZyYW1lYnVmZmVyTm9BdHRhY2htZW50c1NhbXBsZUNvdW50cyJ9fSwgeyJlbmQiOiAzNTA3
NiwgImJlZ2luIjogMzUwNTcsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhDb2xvckF0dGFjaG1lbnRz
In19LCB7ImVuZCI6IDM1MjA0LCAiYmVnaW4iOiAzNTE3NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAi
bW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLnNh
bXBsZWRJbWFnZUNvbG9yU2FtcGxlQ291bnRzIn19LCB7ImVuZCI6IDM1MzM2LCAiYmVnaW4iOiAz
NTMwNSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pv
bS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLnNhbXBsZWRJbWFnZUludGVnZXJTYW1wbGVDb3VudHMi
fX0sIHsiZW5kIjogMzU0NjQsICJiZWdpbiI6IDM1NDM1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJt
b2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMuc2Ft
cGxlZEltYWdlRGVwdGhTYW1wbGVDb3VudHMifX0sIHsiZW5kIjogMzU1OTYsICJiZWdpbiI6IDM1
NTY1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2No
cm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9t
LlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMuc2FtcGxlZEltYWdlU3RlbmNpbFNhbXBsZUNvdW50cyJ9
fSwgeyJlbmQiOiAzNTcxNCwgImJlZ2luIjogMzU2OTAsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5zdG9y
YWdlSW1hZ2VTYW1wbGVDb3VudHMifX0sIHsiZW5kIjogMzU4MjAsICJiZWdpbiI6IDM1ODAyLCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5
c2ljYWxEZXZpY2VMaW1pdHMubWF4U2FtcGxlTWFza1dvcmRzIn19LCB7ImVuZCI6IDM1OTQwLCAi
YmVnaW4iOiAzNTkxMywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLnRpbWVzdGFtcENvbXB1dGVBbmRHcmFw
aGljcyJ9fSwgeyJlbmQiOiAzNjAzNywgImJlZ2luIjogMzYwMjIsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0
cy50aW1lc3RhbXBQZXJpb2QifX0sIHsiZW5kIjogMzYxMzksICJiZWdpbiI6IDM2MTIzLCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2lj
YWxEZXZpY2VMaW1pdHMubWF4Q2xpcERpc3RhbmNlcyJ9fSwgeyJlbmQiOiAzNjI0MSwgImJlZ2lu
IjogMzYyMjUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUu
bW9qb20uVmtQaHlzaWNhbERldmljZUxpbWl0cy5tYXhDdWxsRGlzdGFuY2VzIn19LCB7ImVuZCI6
IDM2MzczLCAiYmVnaW4iOiAzNjM0MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIs
ICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2ln
bmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlTGltaXRzLm1heENvbWJpbmVkQ2xp
cEFuZEN1bGxEaXN0YW5jZXMifX0sIHsiZW5kIjogMzY0ODksICJiZWdpbiI6IDM2NDY2LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2lj
YWxEZXZpY2VMaW1pdHMuZGlzY3JldGVRdWV1ZVByaW9yaXRpZXMifX0sIHsiZW5kIjogMzY1OTcs
ICJiZWdpbiI6IDM2NTgzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUi
OiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMucG9pbnRTaXplUmFuZ2UifX0sIHsi
ZW5kIjogMzY3MDUsICJiZWdpbiI6IDM2NjkxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMubGluZVdpZHRo
UmFuZ2UifX0sIHsiZW5kIjogMzY4MTIsICJiZWdpbiI6IDM2NzkyLCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1p
dHMucG9pbnRTaXplR3JhbnVsYXJpdHkifX0sIHsiZW5kIjogMzY5MTksICJiZWdpbiI6IDM2ODk5
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZr
UGh5c2ljYWxEZXZpY2VMaW1pdHMubGluZVdpZHRoR3JhbnVsYXJpdHkifX0sIHsiZW5kIjogMzcw
MDcsICJiZWdpbiI6IDM2OTk2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMuc3RyaWN0TGluZXMifX0sIHsi
ZW5kIjogMzcxMTksICJiZWdpbiI6IDM3MDk2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMuc3RhbmRhcmRT
YW1wbGVMb2NhdGlvbnMifX0sIHsiZW5kIjogMzcyNTMsICJiZWdpbiI6IDM3MjIxLCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxE
ZXZpY2VMaW1pdHMub3B0aW1hbEJ1ZmZlckNvcHlPZmZzZXRBbGlnbm1lbnQifX0sIHsiZW5kIjog
MzczOTEsICJiZWdpbiI6IDM3MzU3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VMaW1pdHMub3B0aW1hbEJ1ZmZlckNv
cHlSb3dQaXRjaEFsaWdubWVudCJ9fSwgeyJlbmQiOiAzNzQ5OSwgImJlZ2luIjogMzc0ODAsICJl
ZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0v
c3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlz
aWNhbERldmljZUxpbWl0cy5ub25Db2hlcmVudEF0b21TaXplIn19LCB7ImVuZCI6IDM4NjE4LCAi
YmVnaW4iOiAzODU4NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlU3BhcnNlUHJvcGVydGllcyJ9fSwgeyJlbmQiOiA0
MjkzNCwgImJlZ2luIjogNDI5MDUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZVNwYXJzZVByb3BlcnRpZXMucmVzaWRl
bmN5U3RhbmRhcmQyREJsb2NrU2hhcGUifX0sIHsiZW5kIjogNDMwOTAsICJiZWdpbiI6IDQzMDUw
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZr
UGh5c2ljYWxEZXZpY2VTcGFyc2VQcm9wZXJ0aWVzLnJlc2lkZW5jeVN0YW5kYXJkMkRNdWx0aXNh
bXBsZUJsb2NrU2hhcGUifX0sIHsiZW5kIjogNDMyMjQsICJiZWdpbiI6IDQzMTk1LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxE
ZXZpY2VTcGFyc2VQcm9wZXJ0aWVzLnJlc2lkZW5jeVN0YW5kYXJkM0RCbG9ja1NoYXBlIn19LCB7
ImVuZCI6IDQzMzQ2LCAiYmVnaW4iOiA0MzMyMywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20i
LCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlU3BhcnNlUHJvcGVydGll
cy5yZXNpZGVuY3lBbGlnbmVkTWlwU2l6ZSJ9fSwgeyJlbmQiOiA0MzQ3NCwgImJlZ2luIjogNDM0
NDgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20u
VmtQaHlzaWNhbERldmljZVNwYXJzZVByb3BlcnRpZXMucmVzaWRlbmN5Tm9uUmVzaWRlbnRTdHJp
Y3QifX0sIHsiZW5kIjogNDQ2MjEsICJiZWdpbiI6IDQ0NTk1LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VQcm9wZXJ0
aWVzIn19LCB7ImVuZCI6IDQ4ODg0LCAiYmVnaW4iOiA0ODg3NCwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2Ui
OiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlUHJvcGVy
dGllcy5hcGlWZXJzaW9uIn19LCB7ImVuZCI6IDQ4OTg0LCAiYmVnaW4iOiA0ODk3MSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZu
YW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMi
LCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2Fs
RGV2aWNlUHJvcGVydGllcy5kcml2ZXJWZXJzaW9uIn19LCB7ImVuZCI6IDQ5MDc0LCAiYmVnaW4i
OiA0OTA2NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5t
b2pvbS5Wa1BoeXNpY2FsRGV2aWNlUHJvcGVydGllcy52ZW5kb3JJRCJ9fSwgeyJlbmQiOiA0OTE2
NCwgImJlZ2luIjogNDkxNTYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZVByb3BlcnRpZXMuZGV2aWNlSUQifX0sIHsi
ZW5kIjogNDkyNzIsICJiZWdpbiI6IDQ5MjYyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VQcm9wZXJ0aWVzLmRldmlj
ZVR5cGUifX0sIHsiZW5kIjogNDkzNjksICJiZWdpbiI6IDQ5MzU5LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VQcm9w
ZXJ0aWVzLmRldmljZU5hbWUifX0sIHsiZW5kIjogNDk0ODksICJiZWdpbiI6IDQ5NDcyLCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
dm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3Ny
YyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2lj
YWxEZXZpY2VQcm9wZXJ0aWVzLnBpcGVsaW5lQ2FjaGVVVUlEIn19LCB7ImVuZCI6IDQ5NTkxLCAi
YmVnaW4iOiA0OTU4NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjog
ImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlUHJvcGVydGllcy5saW1pdHMifX0sIHsiZW5kIjog
NDk3MjMsICJiZWdpbiI6IDQ5NzA3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VQcm9wZXJ0aWVzLnNwYXJzZVByb3Bl
cnRpZXMifX0sIHsiZW5kIjogNTA4NDIsICJiZWdpbiI6IDUwODE4LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0
dXJlcyJ9fSwgeyJlbmQiOiA1NjU4OSwgImJlZ2luIjogNTY1NzEsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1
cmVzLnJvYnVzdEJ1ZmZlckFjY2VzcyJ9fSwgeyJlbmQiOiA1NjY5NSwgImJlZ2luIjogNTY2NzYs
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5l
cyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21p
dW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQ
aHlzaWNhbERldmljZUZlYXR1cmVzLmZ1bGxEcmF3SW5kZXhVaW50MzIifX0sIHsiZW5kIjogNTY3
OTEsICJiZWdpbiI6IDU2Nzc3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy5pbWFnZUN1YmVBcnJheSJ9
fSwgeyJlbmQiOiA1Njg5MSwgImJlZ2luIjogNTY4NzUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLmlu
ZGVwZW5kZW50QmxlbmQifX0sIHsiZW5kIjogNTY5ODcsICJiZWdpbiI6IDU2OTczLCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxE
ZXZpY2VGZWF0dXJlcy5nZW9tZXRyeVNoYWRlciJ9fSwgeyJlbmQiOiA1NzA5MSwgImJlZ2luIjog
NTcwNzMsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9q
b20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLnRlc3NlbGxhdGlvblNoYWRlciJ9fSwgeyJlbmQi
OiA1NzE5MywgImJlZ2luIjogNTcxNzYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLnNhbXBsZVJhdGVT
aGFkaW5nIn19LCB7ImVuZCI6IDU3Mjg1LCAiYmVnaW4iOiA1NzI3MywgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3Vh
Z2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlRmVh
dHVyZXMuZHVhbFNyY0JsZW5kIn19LCB7ImVuZCI6IDU3MzY3LCAiYmVnaW4iOiA1NzM2MCwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNp
Y2FsRGV2aWNlRmVhdHVyZXMubG9naWNPcCJ9fSwgeyJlbmQiOiA1NzQ2OSwgImJlZ2luIjogNTc0
NTIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hy
b21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20u
VmtQaHlzaWNhbERldmljZUZlYXR1cmVzLm11bHRpRHJhd0luZGlyZWN0In19LCB7ImVuZCI6IDU3
NTg3LCAiYmVnaW4iOiA1NzU2MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0
dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlRmVhdHVyZXMuZHJhd0luZGlyZWN0Rmly
c3RJbnN0YW5jZSJ9fSwgeyJlbmQiOiA1NzY3NSwgImJlZ2luIjogNTc2NjUsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmlj
ZUZlYXR1cmVzLmRlcHRoQ2xhbXAifX0sIHsiZW5kIjogNTc3NzEsICJiZWdpbiI6IDU3NzU3LCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5
c2ljYWxEZXZpY2VGZWF0dXJlcy5kZXB0aEJpYXNDbGFtcCJ9fSwgeyJlbmQiOiA1Nzg3MSwgImJl
Z2luIjogNTc4NTUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJn
cHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLmZpbGxNb2RlTm9uU29saWQifX0sIHsi
ZW5kIjogNTc5NjEsICJiZWdpbiI6IDU3OTUwLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy5kZXB0aEJv
dW5kcyJ9fSwgeyJlbmQiOiA1ODA0NywgImJlZ2luIjogNTgwMzgsICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdl
IjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1
cmVzLndpZGVMaW5lcyJ9fSwgeyJlbmQiOiA1ODEzNywgImJlZ2luIjogNTgxMjYsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERl
dmljZUZlYXR1cmVzLmxhcmdlUG9pbnRzIn19LCB7ImVuZCI6IDU4MjI1LCAiYmVnaW4iOiA1ODIx
NSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5W
a1BoeXNpY2FsRGV2aWNlRmVhdHVyZXMuYWxwaGFUb09uZSJ9fSwgeyJlbmQiOiA1ODMxOSwgImJl
Z2luIjogNTgzMDYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJn
cHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLm11bHRpVmlld3BvcnQifX0sIHsiZW5k
IjogNTg0MjEsICJiZWdpbiI6IDU4NDA0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy5zYW1wbGVyQW5p
c290cm9weSJ9fSwgeyJlbmQiOiA1ODUzMywgImJlZ2luIjogNTg1MTEsICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1
YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUZl
YXR1cmVzLnRleHR1cmVDb21wcmVzc2lvbkVUQzIifX0sIHsiZW5kIjogNTg2NTMsICJiZWdpbiI6
IDU4NjI3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1v
am9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy50ZXh0dXJlQ29tcHJlc3Npb25BU1RDX0xEUiJ9
fSwgeyJlbmQiOiA1ODc2MSwgImJlZ2luIjogNTg3NDEsICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLnRl
eHR1cmVDb21wcmVzc2lvbkJDIn19LCB7ImVuZCI6IDU4ODcxLCAiYmVnaW4iOiA1ODg1MCwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwg
InZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9z
cmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNp
Y2FsRGV2aWNlRmVhdHVyZXMub2NjbHVzaW9uUXVlcnlQcmVjaXNlIn19LCB7ImVuZCI6IDU4OTg1
LCAiYmVnaW4iOiA1ODk2MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJl
IjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlRmVhdHVyZXMucGlwZWxpbmVTdGF0aXN0aWNz
UXVlcnkifX0sIHsiZW5kIjogNTkxMTMsICJiZWdpbiI6IDU5MDgzLCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0
dXJlcy52ZXJ0ZXhQaXBlbGluZVN0b3Jlc0FuZEF0b21pY3MifX0sIHsiZW5kIjogNTkyMjksICJi
ZWdpbiI6IDU5MjA1LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAi
Z3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy5mcmFnbWVudFN0b3Jlc0FuZEF0b21p
Y3MifX0sIHsiZW5kIjogNTkzNzMsICJiZWdpbiI6IDU5MzM1LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJl
cy5zaGFkZXJUZXNzZWxsYXRpb25BbmRHZW9tZXRyeVBvaW50U2l6ZSJ9fSwgeyJlbmQiOiA1OTQ5
MSwgImJlZ2luIjogNTk0NjYsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVy
ZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLnNoYWRlckltYWdlR2F0aGVy
RXh0ZW5kZWQifX0sIHsiZW5kIjogNTk2MjUsICJiZWdpbiI6IDU5NTkyLCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5n
dWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VG
ZWF0dXJlcy5zaGFkZXJTdG9yYWdlSW1hZ2VFeHRlbmRlZEZvcm1hdHMifX0sIHsiZW5kIjogNTk3
NTEsICJiZWdpbiI6IDU5NzIyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1
cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy5zaGFkZXJTdG9yYWdlSW1h
Z2VNdWx0aXNhbXBsZSJ9fSwgeyJlbmQiOiA1OTg4OSwgImJlZ2luIjogNTk4NTQsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERl
dmljZUZlYXR1cmVzLnNoYWRlclN0b3JhZ2VJbWFnZVJlYWRXaXRob3V0Rm9ybWF0In19LCB7ImVu
ZCI6IDYwMDI5LCAiYmVnaW4iOiA1OTk5MywgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAi
c2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlRmVhdHVyZXMuc2hhZGVyU3Rv
cmFnZUltYWdlV3JpdGVXaXRob3V0Rm9ybWF0In19LCB7ImVuZCI6IDYwMTc1LCAiYmVnaW4iOiA2
MDEzNiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
aHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pv
bS5Wa1BoeXNpY2FsRGV2aWNlRmVhdHVyZXMuc2hhZGVyVW5pZm9ybUJ1ZmZlckFycmF5RHluYW1p
Y0luZGV4aW5nIn19LCB7ImVuZCI6IDYwMzE5LCAiYmVnaW4iOiA2MDI4MSwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNl
RmVhdHVyZXMuc2hhZGVyU2FtcGxlZEltYWdlQXJyYXlEeW5hbWljSW5kZXhpbmcifX0sIHsiZW5k
IjogNjA0NjUsICJiZWdpbiI6IDYwNDI2LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy5zaGFkZXJTdG9y
YWdlQnVmZmVyQXJyYXlEeW5hbWljSW5kZXhpbmcifX0sIHsiZW5kIjogNjA2MDksICJiZWdpbiI6
IDYwNTcxLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1v
am9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy5zaGFkZXJTdG9yYWdlSW1hZ2VBcnJheUR5bmFt
aWNJbmRleGluZyJ9fSwgeyJlbmQiOiA2MDcxMywgImJlZ2luIjogNjA2OTUsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmlj
ZUZlYXR1cmVzLnNoYWRlckNsaXBEaXN0YW5jZSJ9fSwgeyJlbmQiOiA2MDgxNywgImJlZ2luIjog
NjA3OTksICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9q
b20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLnNoYWRlckN1bGxEaXN0YW5jZSJ9fSwgeyJlbmQi
OiA2MDkxMSwgImJlZ2luIjogNjA4OTgsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
LCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVt
Lmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNp
Z25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLnNoYWRlckZsb2F0
NjQifX0sIHsiZW5kIjogNjEwMDEsICJiZWdpbiI6IDYwOTkwLCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6
ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJl
cy5zaGFkZXJJbnQ2NCJ9fSwgeyJlbmQiOiA2MTA5MSwgImJlZ2luIjogNjEwODAsICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFt
ZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwg
Imxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERl
dmljZUZlYXR1cmVzLnNoYWRlckludDE2In19LCB7ImVuZCI6IDYxMjA1LCAiYmVnaW4iOiA2MTE4
MiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJv
bWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5W
a1BoeXNpY2FsRGV2aWNlRmVhdHVyZXMuc2hhZGVyUmVzb3VyY2VSZXNpZGVuY3kifX0sIHsiZW5k
IjogNjEzMTMsICJiZWdpbiI6IDYxMjkzLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy5zaGFkZXJSZXNv
dXJjZU1pbkxvZCJ9fSwgeyJlbmQiOiA2MTQwNywgImJlZ2luIjogNjEzOTQsICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmlj
ZUZlYXR1cmVzLnNwYXJzZUJpbmRpbmcifX0sIHsiZW5kIjogNjE1MTcsICJiZWdpbiI6IDYxNDk2
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9t
aXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZr
UGh5c2ljYWxEZXZpY2VGZWF0dXJlcy5zcGFyc2VSZXNpZGVuY3lCdWZmZXIifX0sIHsiZW5kIjog
NjE2MjksICJiZWdpbiI6IDYxNjA3LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwg
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWdu
YXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy5zcGFyc2VSZXNpZGVu
Y3lJbWFnZTJEIn19LCB7ImVuZCI6IDYxNzQxLCAiYmVnaW4iOiA2MTcxOSwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjog
eyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFu
Z3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNl
RmVhdHVyZXMuc3BhcnNlUmVzaWRlbmN5SW1hZ2UzRCJ9fSwgeyJlbmQiOiA2MTg1NSwgImJlZ2lu
IjogNjE4MzIsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUu
bW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLnNwYXJzZVJlc2lkZW5jeTJTYW1wbGVzIn19
LCB7ImVuZCI6IDYxOTY5LCAiYmVnaW4iOiA2MTk0NiwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9q
b20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1BoeXNpY2FsRGV2aWNlRmVhdHVyZXMuc3Bh
cnNlUmVzaWRlbmN5NFNhbXBsZXMifX0sIHsiZW5kIjogNjIwODMsICJiZWdpbiI6IDYyMDYwLCAi
ZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt
L3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUGh5
c2ljYWxEZXZpY2VGZWF0dXJlcy5zcGFyc2VSZXNpZGVuY3k4U2FtcGxlcyJ9fSwgeyJlbmQiOiA2
MjE5OSwgImJlZ2luIjogNjIxNzUsICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1vam9tIiwgInNpZ25h
dHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLnNwYXJzZVJlc2lkZW5j
eTE2U2FtcGxlcyJ9fSwgeyJlbmQiOiA2MjMxMSwgImJlZ2luIjogNjIyODksICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6
IHsiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxh
bmd1YWdlIjogIm1vam9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmlj
ZUZlYXR1cmVzLnNwYXJzZVJlc2lkZW5jeUFsaWFzZWQifX0sIHsiZW5kIjogNjI0MjUsICJiZWdp
biI6IDYyNDAyLCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1
Lm1vam9tLlZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlcy52YXJpYWJsZU11bHRpc2FtcGxlUmF0ZSJ9
fSwgeyJlbmQiOiA2MjUyNSwgImJlZ2luIjogNjI1MDksICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMiLCAidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJ2bmFtZSI6IHsiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjIiwgImxhbmd1YWdlIjogIm1v
am9tIiwgInNpZ25hdHVyZSI6ICJncHUubW9qb20uVmtQaHlzaWNhbERldmljZUZlYXR1cmVzLmlu
aGVyaXRlZFF1ZXJpZXMifX0sIHsiZW5kIjogNjM2MzUsICJiZWdpbiI6IDYzNjEyLCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5h
bWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIs
ICJsYW5ndWFnZSI6ICJtb2pvbSIsICJzaWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUXVldWVGYW1p
bHlQcm9wZXJ0aWVzIn19LCB7ImVuZCI6IDY3NjI0LCAiYmVnaW4iOiA2NzYxNCwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgInZuYW1l
IjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMiLCAi
bGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1F1ZXVlRmFtaWx5
UHJvcGVydGllcy5xdWV1ZUZsYWdzIn19LCB7ImVuZCI6IDY3NzE1LCAiYmVnaW4iOiA2NzcwNSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hvcl9kZWZpbmVz
IiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1
bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5tb2pvbS5Wa1F1
ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUNvdW50In19LCB7ImVuZCI6IDY3ODIyLCAiYmVnaW4i
OiA2NzgwNCwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyIsICJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgInZuYW1lIjogeyJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jaHJvbWl1bS9zcmMiLCAibGFuZ3VhZ2UiOiAibW9qb20iLCAic2lnbmF0dXJlIjogImdwdS5t
b2pvbS5Wa1F1ZXVlRmFtaWx5UHJvcGVydGllcy50aW1lc3RhbXBWYWxpZEJpdHMifX0sIHsiZW5k
IjogNjc5NTEsICJiZWdpbiI6IDY3OTI0LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
IiwgInR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAidm5hbWUiOiB7ImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtL3NyYyIsICJsYW5ndWFnZSI6ICJtb2pvbSIsICJz
aWduYXR1cmUiOiAiZ3B1Lm1vam9tLlZrUXVldWVGYW1pbHlQcm9wZXJ0aWVzLm1pbkltYWdlVHJh
bnNmZXJHcmFudWxhcml0eSJ9fV0sICJ0eXBlIjogImt5dGhlMCJ9
*/