blob: 5e1f39393d3509361815bd2d02c83d665f445713 [file] [log] [blame]
// services/media_session/public/mojom/media_session.mojom.h is auto generated by mojom_bindings_generator.py, do not edit
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_MEDIA_SESSION_PUBLIC_MOJOM_MEDIA_SESSION_MOJOM_H_
#define SERVICES_MEDIA_SESSION_PUBLIC_MOJOM_MEDIA_SESSION_MOJOM_H_
#include <stdint.h>
#include <limits>
#include <optional>
#include <type_traits>
#include <utility>
#include "base/types/cxx23_to_underlying.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 "services/media_session/public/mojom/media_session.mojom-features.h"
#include "services/media_session/public/mojom/media_session.mojom-shared.h"
#include "services/media_session/public/mojom/media_session.mojom-forward.h"
#include "mojo/public/mojom/base/string16.mojom.h"
#include "mojo/public/mojom/base/time.mojom.h"
#include "ui/gfx/geometry/mojom/geometry.mojom.h"
#include "url/mojom/url.mojom.h"
#include <string>
#include <vector>
#include "mojo/public/cpp/bindings/lib/control_message_handler.h"
#include "mojo/public/cpp/bindings/lib/message_size_estimator.h"
#include "mojo/public/cpp/bindings/raw_ptr_impl_ref_traits.h"
#include "services/media_session/public/cpp/media_session_mojom_traits.h"
#ifdef KYTHE_IS_RUNNING
#pragma kythe_inline_metadata "Metadata comment"
#endif
namespace media_session::mojom {
class MediaSessionObserverProxy;
template <typename ImplRefTraits>
class MediaSessionObserverStub;
class MediaSessionObserverRequestValidator;
// @generated_from: media_session.mojom.MediaSessionObserver
class MediaSessionObserver
: public MediaSessionObserverInterfaceBase {
public:
using IPCStableHashFunction = uint32_t(*)();
static const char Name_[];
static IPCStableHashFunction MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr uint32_t Version_ = 0;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = MediaSessionObserverInterfaceBase;
using Proxy_ = MediaSessionObserverProxy;
template <typename ImplRefTraits>
using Stub_ = MediaSessionObserverStub<ImplRefTraits>;
using RequestValidator_ = MediaSessionObserverRequestValidator;
using ResponseValidator_ = mojo::PassThroughFilter;
enum MethodMinVersions : uint32_t {
kMediaSessionInfoChangedMinVersion = 0,
kMediaSessionMetadataChangedMinVersion = 0,
kMediaSessionActionsChangedMinVersion = 0,
kMediaSessionImagesChangedMinVersion = 0,
kMediaSessionPositionChangedMinVersion = 0,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct MediaSessionInfoChanged_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct MediaSessionMetadataChanged_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct MediaSessionActionsChanged_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct MediaSessionImagesChanged_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct MediaSessionPositionChanged_Sym {
NOINLINE static uint32_t IPCStableHash();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
virtual ~MediaSessionObserver() = default;
// @generated_from: media_session.mojom.MediaSessionObserver.MediaSessionInfoChanged
virtual void MediaSessionInfoChanged(MediaSessionInfoPtr info) = 0;
// @generated_from: media_session.mojom.MediaSessionObserver.MediaSessionMetadataChanged
virtual void MediaSessionMetadataChanged(const std::optional<::media_session::MediaMetadata>& metadata) = 0;
// @generated_from: media_session.mojom.MediaSessionObserver.MediaSessionActionsChanged
virtual void MediaSessionActionsChanged(const std::vector<MediaSessionAction>& action) = 0;
// @generated_from: media_session.mojom.MediaSessionObserver.MediaSessionImagesChanged
virtual void MediaSessionImagesChanged(const base::flat_map<MediaSessionImageType, std::vector<::media_session::MediaImage>>& images) = 0;
// @generated_from: media_session.mojom.MediaSessionObserver.MediaSessionPositionChanged
virtual void MediaSessionPositionChanged(const std::optional<::media_session::MediaPosition>& position) = 0;
};
class MediaSessionProxy;
template <typename ImplRefTraits>
class MediaSessionStub;
class MediaSessionRequestValidator;
class MediaSessionResponseValidator;
// @generated_from: media_session.mojom.MediaSession
class MediaSession
: public MediaSessionInterfaceBase {
public:
using IPCStableHashFunction = uint32_t(*)();
static const char Name_[];
static IPCStableHashFunction MessageToMethodInfo_(mojo::Message& message);
static const char* MessageToMethodName_(mojo::Message& message);
static constexpr uint32_t Version_ = 19;
static constexpr bool PassesAssociatedKinds_ = false;
static constexpr bool HasUninterruptableMethods_ = false;
using Base_ = MediaSessionInterfaceBase;
using Proxy_ = MediaSessionProxy;
template <typename ImplRefTraits>
using Stub_ = MediaSessionStub<ImplRefTraits>;
using RequestValidator_ = MediaSessionRequestValidator;
using ResponseValidator_ = MediaSessionResponseValidator;
enum MethodMinVersions : uint32_t {
kGetMediaSessionInfoMinVersion = 0,
kGetDebugInfoMinVersion = 0,
kStartDuckingMinVersion = 0,
kStopDuckingMinVersion = 0,
kSuspendMinVersion = 0,
kResumeMinVersion = 0,
kAddObserverMinVersion = 0,
kPreviousTrackMinVersion = 0,
kNextTrackMinVersion = 0,
kSeekMinVersion = 0,
kStopMinVersion = 0,
kSkipAdMinVersion = 0,
kGetMediaImageBitmapMinVersion = 0,
kSeekToMinVersion = 0,
kScrubToMinVersion = 0,
kEnterPictureInPictureMinVersion = 0,
kExitPictureInPictureMinVersion = 0,
kSetAudioSinkIdMinVersion = 0,
kToggleMicrophoneMinVersion = 11,
kToggleCameraMinVersion = 11,
kHangUpMinVersion = 11,
kRaiseMinVersion = 12,
kSetMuteMinVersion = 13,
kRequestMediaRemotingMinVersion = 16,
kPreviousSlideMinVersion = 18,
kNextSlideMinVersion = 18,
kEnterAutoPictureInPictureMinVersion = 19,
};
// crbug.com/1340245 - this causes binary size bloat on Fuchsia, and we're OK
// with not having this data in traces there.
#if !BUILDFLAG(IS_FUCHSIA)
struct GetMediaSessionInfo_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct GetDebugInfo_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct StartDucking_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct StopDucking_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct Suspend_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct Resume_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct AddObserver_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct PreviousTrack_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct NextTrack_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct Seek_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct Stop_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct SkipAd_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct GetMediaImageBitmap_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct SeekTo_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct ScrubTo_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct EnterPictureInPicture_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct ExitPictureInPicture_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct SetAudioSinkId_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct ToggleMicrophone_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct ToggleCamera_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct HangUp_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct Raise_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct SetMute_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct RequestMediaRemoting_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct PreviousSlide_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct NextSlide_Sym {
NOINLINE static uint32_t IPCStableHash();
};
struct EnterAutoPictureInPicture_Sym {
NOINLINE static uint32_t IPCStableHash();
};
#endif // !BUILDFLAG(IS_FUCHSIA)
// @generated_from: media_session.mojom.MediaSession.SuspendType
using SuspendType = MediaSession_SuspendType;
virtual ~MediaSession() = default;
using GetMediaSessionInfoCallback = base::OnceCallback<void(MediaSessionInfoPtr)>;
// @generated_from: media_session.mojom.MediaSession.GetMediaSessionInfo
virtual void GetMediaSessionInfo(GetMediaSessionInfoCallback callback) = 0;
using GetDebugInfoCallback = base::OnceCallback<void(MediaSessionDebugInfoPtr)>;
// @generated_from: media_session.mojom.MediaSession.GetDebugInfo
virtual void GetDebugInfo(GetDebugInfoCallback callback) = 0;
// @generated_from: media_session.mojom.MediaSession.StartDucking
virtual void StartDucking() = 0;
// @generated_from: media_session.mojom.MediaSession.StopDucking
virtual void StopDucking() = 0;
// @generated_from: media_session.mojom.MediaSession.Suspend
virtual void Suspend(MediaSession::SuspendType suspend_type) = 0;
// @generated_from: media_session.mojom.MediaSession.Resume
virtual void Resume(MediaSession::SuspendType suspend_type) = 0;
// @generated_from: media_session.mojom.MediaSession.AddObserver
virtual void AddObserver(::mojo::PendingRemote<MediaSessionObserver> observer) = 0;
// @generated_from: media_session.mojom.MediaSession.PreviousTrack
virtual void PreviousTrack() = 0;
// @generated_from: media_session.mojom.MediaSession.NextTrack
virtual void NextTrack() = 0;
// @generated_from: media_session.mojom.MediaSession.Seek
virtual void Seek(::base::TimeDelta seek_time) = 0;
// @generated_from: media_session.mojom.MediaSession.Stop
virtual void Stop(MediaSession::SuspendType suspend_type) = 0;
// @generated_from: media_session.mojom.MediaSession.SkipAd
virtual void SkipAd() = 0;
using GetMediaImageBitmapCallback = base::OnceCallback<void(const ::SkBitmap&)>;
// @generated_from: media_session.mojom.MediaSession.GetMediaImageBitmap
virtual void GetMediaImageBitmap(const ::media_session::MediaImage& image, int32_t minimum_size_px, int32_t desired_size_px, GetMediaImageBitmapCallback callback) = 0;
// @generated_from: media_session.mojom.MediaSession.SeekTo
virtual void SeekTo(::base::TimeDelta seek_time) = 0;
// @generated_from: media_session.mojom.MediaSession.ScrubTo
virtual void ScrubTo(::base::TimeDelta seek_time) = 0;
// @generated_from: media_session.mojom.MediaSession.EnterPictureInPicture
virtual void EnterPictureInPicture() = 0;
// @generated_from: media_session.mojom.MediaSession.ExitPictureInPicture
virtual void ExitPictureInPicture() = 0;
// @generated_from: media_session.mojom.MediaSession.SetAudioSinkId
virtual void SetAudioSinkId(const std::optional<std::string>& id) = 0;
// @generated_from: media_session.mojom.MediaSession.ToggleMicrophone
virtual void ToggleMicrophone() = 0;
// @generated_from: media_session.mojom.MediaSession.ToggleCamera
virtual void ToggleCamera() = 0;
// @generated_from: media_session.mojom.MediaSession.HangUp
virtual void HangUp() = 0;
// @generated_from: media_session.mojom.MediaSession.Raise
virtual void Raise() = 0;
// @generated_from: media_session.mojom.MediaSession.SetMute
virtual void SetMute(bool mute) = 0;
// @generated_from: media_session.mojom.MediaSession.RequestMediaRemoting
virtual void RequestMediaRemoting() = 0;
// @generated_from: media_session.mojom.MediaSession.PreviousSlide
virtual void PreviousSlide() = 0;
// @generated_from: media_session.mojom.MediaSession.NextSlide
virtual void NextSlide() = 0;
// @generated_from: media_session.mojom.MediaSession.EnterAutoPictureInPicture
virtual void EnterAutoPictureInPicture() = 0;
};
// @generated_from: media_session.mojom.MediaSessionObserver
class MediaSessionObserverProxy
: public MediaSessionObserver {
public:
using InterfaceType = MediaSessionObserver;
explicit MediaSessionObserverProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: media_session.mojom.MediaSessionObserver.MediaSessionInfoChanged
void MediaSessionInfoChanged(MediaSessionInfoPtr info) final;
// @generated_from: media_session.mojom.MediaSessionObserver.MediaSessionMetadataChanged
void MediaSessionMetadataChanged(const std::optional<::media_session::MediaMetadata>& metadata) final;
// @generated_from: media_session.mojom.MediaSessionObserver.MediaSessionActionsChanged
void MediaSessionActionsChanged(const std::vector<MediaSessionAction>& action) final;
// @generated_from: media_session.mojom.MediaSessionObserver.MediaSessionImagesChanged
void MediaSessionImagesChanged(const base::flat_map<MediaSessionImageType, std::vector<::media_session::MediaImage>>& images) final;
// @generated_from: media_session.mojom.MediaSessionObserver.MediaSessionPositionChanged
void MediaSessionPositionChanged(const std::optional<::media_session::MediaPosition>& position) final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
// @generated_from: media_session.mojom.MediaSession
class MediaSessionProxy
: public MediaSession {
public:
using InterfaceType = MediaSession;
explicit MediaSessionProxy(mojo::MessageReceiverWithResponder* receiver);
// @generated_from: media_session.mojom.MediaSession.GetMediaSessionInfo
void GetMediaSessionInfo(GetMediaSessionInfoCallback callback) final;
// @generated_from: media_session.mojom.MediaSession.GetDebugInfo
void GetDebugInfo(GetDebugInfoCallback callback) final;
// @generated_from: media_session.mojom.MediaSession.StartDucking
void StartDucking() final;
// @generated_from: media_session.mojom.MediaSession.StopDucking
void StopDucking() final;
// @generated_from: media_session.mojom.MediaSession.Suspend
void Suspend(MediaSession::SuspendType suspend_type) final;
// @generated_from: media_session.mojom.MediaSession.Resume
void Resume(MediaSession::SuspendType suspend_type) final;
// @generated_from: media_session.mojom.MediaSession.AddObserver
void AddObserver(::mojo::PendingRemote<MediaSessionObserver> observer) final;
// @generated_from: media_session.mojom.MediaSession.PreviousTrack
void PreviousTrack() final;
// @generated_from: media_session.mojom.MediaSession.NextTrack
void NextTrack() final;
// @generated_from: media_session.mojom.MediaSession.Seek
void Seek(::base::TimeDelta seek_time) final;
// @generated_from: media_session.mojom.MediaSession.Stop
void Stop(MediaSession::SuspendType suspend_type) final;
// @generated_from: media_session.mojom.MediaSession.SkipAd
void SkipAd() final;
// @generated_from: media_session.mojom.MediaSession.GetMediaImageBitmap
void GetMediaImageBitmap(const ::media_session::MediaImage& image, int32_t minimum_size_px, int32_t desired_size_px, GetMediaImageBitmapCallback callback) final;
// @generated_from: media_session.mojom.MediaSession.SeekTo
void SeekTo(::base::TimeDelta seek_time) final;
// @generated_from: media_session.mojom.MediaSession.ScrubTo
void ScrubTo(::base::TimeDelta seek_time) final;
// @generated_from: media_session.mojom.MediaSession.EnterPictureInPicture
void EnterPictureInPicture() final;
// @generated_from: media_session.mojom.MediaSession.ExitPictureInPicture
void ExitPictureInPicture() final;
// @generated_from: media_session.mojom.MediaSession.SetAudioSinkId
void SetAudioSinkId(const std::optional<std::string>& id) final;
// @generated_from: media_session.mojom.MediaSession.ToggleMicrophone
void ToggleMicrophone() final;
// @generated_from: media_session.mojom.MediaSession.ToggleCamera
void ToggleCamera() final;
// @generated_from: media_session.mojom.MediaSession.HangUp
void HangUp() final;
// @generated_from: media_session.mojom.MediaSession.Raise
void Raise() final;
// @generated_from: media_session.mojom.MediaSession.SetMute
void SetMute(bool mute) final;
// @generated_from: media_session.mojom.MediaSession.RequestMediaRemoting
void RequestMediaRemoting() final;
// @generated_from: media_session.mojom.MediaSession.PreviousSlide
void PreviousSlide() final;
// @generated_from: media_session.mojom.MediaSession.NextSlide
void NextSlide() final;
// @generated_from: media_session.mojom.MediaSession.EnterAutoPictureInPicture
void EnterAutoPictureInPicture() final;
private:
mojo::MessageReceiverWithResponder* receiver_;
};
class MediaSessionObserverStubDispatch {
public:
static bool Accept(MediaSessionObserver* impl, mojo::Message* message);
static bool AcceptWithResponder(
MediaSessionObserver* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<MediaSessionObserver>>
class MediaSessionObserverStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
MediaSessionObserverStub() = default;
~MediaSessionObserverStub() override = default;
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return MediaSessionObserverStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return MediaSessionObserverStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class MediaSessionStubDispatch {
public:
static bool Accept(MediaSession* impl, mojo::Message* message);
static bool AcceptWithResponder(
MediaSession* impl,
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder);
};
template <typename ImplRefTraits =
mojo::RawPtrImplRefTraits<MediaSession>>
class MediaSessionStub
: public mojo::MessageReceiverWithResponderStatus {
public:
using ImplPointerType = typename ImplRefTraits::PointerType;
MediaSessionStub() = default;
~MediaSessionStub() override = default;
void set_sink(ImplPointerType sink) { sink_ = std::move(sink); }
ImplPointerType& sink() { return sink_; }
bool Accept(mojo::Message* message) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return MediaSessionStubDispatch::Accept(
ImplRefTraits::GetRawPointer(&sink_), message);
}
bool AcceptWithResponder(
mojo::Message* message,
std::unique_ptr<mojo::MessageReceiverWithStatus> responder) override {
if (ImplRefTraits::IsNull(sink_))
return false;
return MediaSessionStubDispatch::AcceptWithResponder(
ImplRefTraits::GetRawPointer(&sink_), message, std::move(responder));
}
private:
ImplPointerType sink_;
};
class MediaSessionObserverRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class MediaSessionRequestValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
class MediaSessionResponseValidator : public mojo::MessageReceiver {
public:
bool Accept(mojo::Message* message) override;
};
// @generated_from: media_session.mojom.MediaSessionDebugInfo
class MediaSessionDebugInfo {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<MediaSessionDebugInfo, T>::value>;
using DataView = MediaSessionDebugInfoDataView;
using Data_ = internal::MediaSessionDebugInfo_Data;
template <typename... Args>
static MediaSessionDebugInfoPtr New(Args&&... args) {
return MediaSessionDebugInfoPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static MediaSessionDebugInfoPtr From(const U& u) {
return mojo::TypeConverter<MediaSessionDebugInfoPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, MediaSessionDebugInfo>::Convert(*this);
}
MediaSessionDebugInfo();
MediaSessionDebugInfo(
const std::string& name,
const std::string& owner,
const std::string& state);
~MediaSessionDebugInfo();
// 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 = MediaSessionDebugInfoPtr>
MediaSessionDebugInfoPtr 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, MediaSessionDebugInfo::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, MediaSessionDebugInfo::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, MediaSessionDebugInfo::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
size_t Hash(size_t seed) const;
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
MediaSessionDebugInfo::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
MediaSessionDebugInfo::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::MediaSessionDebugInfo_UnserializedMessageContext<
UserType, MediaSessionDebugInfo::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<MediaSessionDebugInfo::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return MediaSessionDebugInfo::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::MediaSessionDebugInfo_UnserializedMessageContext<
UserType, MediaSessionDebugInfo::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<MediaSessionDebugInfo::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media_session.mojom.MediaSessionDebugInfo.name
std::string name;
// @generated_from: media_session.mojom.MediaSessionDebugInfo.owner
std::string owner;
// @generated_from: media_session.mojom.MediaSessionDebugInfo.state
std::string state;
// 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, MediaSessionDebugInfo::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, MediaSessionDebugInfo::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, MediaSessionDebugInfo::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, MediaSessionDebugInfo::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media_session.mojom.MediaImage
class MediaImage {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<MediaImage, T>::value>;
using DataView = MediaImageDataView;
using Data_ = internal::MediaImage_Data;
template <typename... Args>
static MediaImagePtr New(Args&&... args) {
return MediaImagePtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static MediaImagePtr From(const U& u) {
return mojo::TypeConverter<MediaImagePtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, MediaImage>::Convert(*this);
}
MediaImage();
MediaImage(
const ::GURL& src,
const ::std::u16string& type,
std::vector<::gfx::Size> sizes);
~MediaImage();
// 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 = MediaImagePtr>
MediaImagePtr 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, MediaImage::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, MediaImage::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, MediaImage::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
MediaImage::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
MediaImage::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::MediaImage_UnserializedMessageContext<
UserType, MediaImage::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<MediaImage::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return MediaImage::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::MediaImage_UnserializedMessageContext<
UserType, MediaImage::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<MediaImage::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media_session.mojom.MediaImage.src
::GURL src;
// @generated_from: media_session.mojom.MediaImage.type
::std::u16string type;
// @generated_from: media_session.mojom.MediaImage.sizes
std::vector<::gfx::Size> sizes;
// 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, MediaImage::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, MediaImage::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, MediaImage::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, MediaImage::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media_session.mojom.ChapterInformation
class ChapterInformation {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<ChapterInformation, T>::value>;
using DataView = ChapterInformationDataView;
using Data_ = internal::ChapterInformation_Data;
template <typename... Args>
static ChapterInformationPtr New(Args&&... args) {
return ChapterInformationPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static ChapterInformationPtr From(const U& u) {
return mojo::TypeConverter<ChapterInformationPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, ChapterInformation>::Convert(*this);
}
ChapterInformation();
ChapterInformation(
const ::std::u16string& title,
::base::TimeDelta startTime,
std::vector<::media_session::MediaImage> artwork);
~ChapterInformation();
// 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 = ChapterInformationPtr>
ChapterInformationPtr 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, ChapterInformation::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, ChapterInformation::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, ChapterInformation::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
ChapterInformation::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
ChapterInformation::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::ChapterInformation_UnserializedMessageContext<
UserType, ChapterInformation::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<ChapterInformation::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return ChapterInformation::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::ChapterInformation_UnserializedMessageContext<
UserType, ChapterInformation::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<ChapterInformation::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media_session.mojom.ChapterInformation.title
::std::u16string title;
// @generated_from: media_session.mojom.ChapterInformation.startTime
::base::TimeDelta startTime;
// @generated_from: media_session.mojom.ChapterInformation.artwork
std::vector<::media_session::MediaImage> artwork;
// 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, ChapterInformation::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, ChapterInformation::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, ChapterInformation::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, ChapterInformation::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media_session.mojom.MediaMetadata
class MediaMetadata {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<MediaMetadata, T>::value>;
using DataView = MediaMetadataDataView;
using Data_ = internal::MediaMetadata_Data;
template <typename... Args>
static MediaMetadataPtr New(Args&&... args) {
return MediaMetadataPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static MediaMetadataPtr From(const U& u) {
return mojo::TypeConverter<MediaMetadataPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, MediaMetadata>::Convert(*this);
}
MediaMetadata();
MediaMetadata(
const ::std::u16string& title,
const ::std::u16string& artist,
const ::std::u16string& album,
const ::std::u16string& source_title);
MediaMetadata(
const ::std::u16string& title,
const ::std::u16string& artist,
const ::std::u16string& album,
const ::std::u16string& source_title,
std::optional<std::vector<::media_session::ChapterInformation>> chapters);
~MediaMetadata();
// 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 = MediaMetadataPtr>
MediaMetadataPtr 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, MediaMetadata::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, MediaMetadata::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, MediaMetadata::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
MediaMetadata::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
MediaMetadata::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::MediaMetadata_UnserializedMessageContext<
UserType, MediaMetadata::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<MediaMetadata::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return MediaMetadata::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::MediaMetadata_UnserializedMessageContext<
UserType, MediaMetadata::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<MediaMetadata::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media_session.mojom.MediaMetadata.title
::std::u16string title;
// @generated_from: media_session.mojom.MediaMetadata.artist
::std::u16string artist;
// @generated_from: media_session.mojom.MediaMetadata.album
::std::u16string album;
// @generated_from: media_session.mojom.MediaMetadata.source_title
::std::u16string source_title;
// @generated_from: media_session.mojom.MediaMetadata.chapters
std::optional<std::vector<::media_session::ChapterInformation>> chapters;
// 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, MediaMetadata::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, MediaMetadata::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, MediaMetadata::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, MediaMetadata::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media_session.mojom.MediaImageBitmap
class MediaImageBitmap {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<MediaImageBitmap, T>::value>;
using DataView = MediaImageBitmapDataView;
using Data_ = internal::MediaImageBitmap_Data;
template <typename... Args>
static MediaImageBitmapPtr New(Args&&... args) {
return MediaImageBitmapPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static MediaImageBitmapPtr From(const U& u) {
return mojo::TypeConverter<MediaImageBitmapPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, MediaImageBitmap>::Convert(*this);
}
MediaImageBitmap();
MediaImageBitmap(
int32_t width,
int32_t height,
std::vector<uint8_t> pixel_data);
MediaImageBitmap(
int32_t width,
int32_t height,
std::vector<uint8_t> pixel_data,
MediaImageBitmapColorType color_type);
~MediaImageBitmap();
// 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 = MediaImageBitmapPtr>
MediaImageBitmapPtr 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, MediaImageBitmap::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, MediaImageBitmap::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, MediaImageBitmap::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
MediaImageBitmap::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
MediaImageBitmap::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::MediaImageBitmap_UnserializedMessageContext<
UserType, MediaImageBitmap::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<MediaImageBitmap::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return MediaImageBitmap::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::MediaImageBitmap_UnserializedMessageContext<
UserType, MediaImageBitmap::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<MediaImageBitmap::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media_session.mojom.MediaImageBitmap.width
int32_t width;
// @generated_from: media_session.mojom.MediaImageBitmap.height
int32_t height;
// @generated_from: media_session.mojom.MediaImageBitmap.pixel_data
std::vector<uint8_t> pixel_data;
// @generated_from: media_session.mojom.MediaImageBitmap.color_type
MediaImageBitmapColorType color_type;
// 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, MediaImageBitmap::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, MediaImageBitmap::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, MediaImageBitmap::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, MediaImageBitmap::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media_session.mojom.MediaPosition
class MediaPosition {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<MediaPosition, T>::value>;
using DataView = MediaPositionDataView;
using Data_ = internal::MediaPosition_Data;
template <typename... Args>
static MediaPositionPtr New(Args&&... args) {
return MediaPositionPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static MediaPositionPtr From(const U& u) {
return mojo::TypeConverter<MediaPositionPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, MediaPosition>::Convert(*this);
}
MediaPosition();
MediaPosition(
double playback_rate,
::base::TimeDelta duration,
::base::TimeDelta position,
::base::TimeTicks last_updated_time);
MediaPosition(
double playback_rate,
::base::TimeDelta duration,
::base::TimeDelta position,
::base::TimeTicks last_updated_time,
bool end_of_media);
~MediaPosition();
// 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 = MediaPositionPtr>
MediaPositionPtr 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, MediaPosition::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, MediaPosition::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, MediaPosition::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
MediaPosition::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
MediaPosition::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::MediaPosition_UnserializedMessageContext<
UserType, MediaPosition::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<MediaPosition::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return MediaPosition::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::MediaPosition_UnserializedMessageContext<
UserType, MediaPosition::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<MediaPosition::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media_session.mojom.MediaPosition.playback_rate
double playback_rate;
// @generated_from: media_session.mojom.MediaPosition.duration
::base::TimeDelta duration;
// @generated_from: media_session.mojom.MediaPosition.position
::base::TimeDelta position;
// @generated_from: media_session.mojom.MediaPosition.last_updated_time
::base::TimeTicks last_updated_time;
// @generated_from: media_session.mojom.MediaPosition.end_of_media
bool end_of_media;
// 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, MediaPosition::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, MediaPosition::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, MediaPosition::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, MediaPosition::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media_session.mojom.RemotePlaybackMetadata
class RemotePlaybackMetadata {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<RemotePlaybackMetadata, T>::value>;
using DataView = RemotePlaybackMetadataDataView;
using Data_ = internal::RemotePlaybackMetadata_Data;
template <typename... Args>
static RemotePlaybackMetadataPtr New(Args&&... args) {
return RemotePlaybackMetadataPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static RemotePlaybackMetadataPtr From(const U& u) {
return mojo::TypeConverter<RemotePlaybackMetadataPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, RemotePlaybackMetadata>::Convert(*this);
}
RemotePlaybackMetadata();
RemotePlaybackMetadata(
const std::string& video_codec,
const std::string& audio_codec,
bool remote_playback_disabled);
RemotePlaybackMetadata(
const std::string& video_codec,
const std::string& audio_codec,
bool remote_playback_disabled,
bool remote_playback_started,
const std::optional<std::string>& unused_field);
RemotePlaybackMetadata(
const std::string& video_codec,
const std::string& audio_codec,
bool remote_playback_disabled,
bool remote_playback_started,
const std::optional<std::string>& unused_field,
bool is_encrypted_media);
~RemotePlaybackMetadata();
// 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 = RemotePlaybackMetadataPtr>
RemotePlaybackMetadataPtr 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, RemotePlaybackMetadata::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, RemotePlaybackMetadata::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, RemotePlaybackMetadata::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
RemotePlaybackMetadata::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
RemotePlaybackMetadata::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::RemotePlaybackMetadata_UnserializedMessageContext<
UserType, RemotePlaybackMetadata::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<RemotePlaybackMetadata::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return RemotePlaybackMetadata::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::RemotePlaybackMetadata_UnserializedMessageContext<
UserType, RemotePlaybackMetadata::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<RemotePlaybackMetadata::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media_session.mojom.RemotePlaybackMetadata.video_codec
std::string video_codec;
// @generated_from: media_session.mojom.RemotePlaybackMetadata.audio_codec
std::string audio_codec;
// @generated_from: media_session.mojom.RemotePlaybackMetadata.remote_playback_disabled
bool remote_playback_disabled;
// @generated_from: media_session.mojom.RemotePlaybackMetadata.remote_playback_started
bool remote_playback_started;
// @generated_from: media_session.mojom.RemotePlaybackMetadata.unused_field
std::optional<std::string> unused_field;
// @generated_from: media_session.mojom.RemotePlaybackMetadata.is_encrypted_media
bool is_encrypted_media;
// 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, RemotePlaybackMetadata::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, RemotePlaybackMetadata::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, RemotePlaybackMetadata::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, RemotePlaybackMetadata::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
// @generated_from: media_session.mojom.MediaSessionInfo
class MediaSessionInfo {
public:
template <typename T>
using EnableIfSame = std::enable_if_t<std::is_same<MediaSessionInfo, T>::value>;
using DataView = MediaSessionInfoDataView;
using Data_ = internal::MediaSessionInfo_Data;
// @generated_from: media_session.mojom.MediaSessionInfo.SessionState
using SessionState = MediaSessionInfo_SessionState;
template <typename... Args>
static MediaSessionInfoPtr New(Args&&... args) {
return MediaSessionInfoPtr(
std::in_place, std::forward<Args>(args)...);
}
template <typename U>
static MediaSessionInfoPtr From(const U& u) {
return mojo::TypeConverter<MediaSessionInfoPtr, U>::Convert(u);
}
template <typename U>
U To() const {
return mojo::TypeConverter<U, MediaSessionInfo>::Convert(*this);
}
MediaSessionInfo();
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state,
MediaAudioVideoState deprecated_audio_video_state);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state,
MediaAudioVideoState deprecated_audio_video_state,
const std::optional<std::string>& audio_sink_id);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state,
MediaAudioVideoState deprecated_audio_video_state,
const std::optional<std::string>& audio_sink_id,
std::optional<std::vector<MediaAudioVideoState>> audio_video_states);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state,
MediaAudioVideoState deprecated_audio_video_state,
const std::optional<std::string>& audio_sink_id,
std::optional<std::vector<MediaAudioVideoState>> audio_video_states,
MicrophoneState microphone_state,
CameraState camera_state);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state,
MediaAudioVideoState deprecated_audio_video_state,
const std::optional<std::string>& audio_sink_id,
std::optional<std::vector<MediaAudioVideoState>> audio_video_states,
MicrophoneState microphone_state,
CameraState camera_state,
bool muted);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state,
MediaAudioVideoState deprecated_audio_video_state,
const std::optional<std::string>& audio_sink_id,
std::optional<std::vector<MediaAudioVideoState>> audio_video_states,
MicrophoneState microphone_state,
CameraState camera_state,
bool muted,
bool has_presentation);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state,
MediaAudioVideoState deprecated_audio_video_state,
const std::optional<std::string>& audio_sink_id,
std::optional<std::vector<MediaAudioVideoState>> audio_video_states,
MicrophoneState microphone_state,
CameraState camera_state,
bool muted,
bool has_presentation,
RemotePlaybackMetadataPtr remote_playback_metadata);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state,
MediaAudioVideoState deprecated_audio_video_state,
const std::optional<std::string>& audio_sink_id,
std::optional<std::vector<MediaAudioVideoState>> audio_video_states,
MicrophoneState microphone_state,
CameraState camera_state,
bool muted,
bool has_presentation,
RemotePlaybackMetadataPtr remote_playback_metadata,
bool hide_metadata);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state,
MediaAudioVideoState deprecated_audio_video_state,
const std::optional<std::string>& audio_sink_id,
std::optional<std::vector<MediaAudioVideoState>> audio_video_states,
MicrophoneState microphone_state,
CameraState camera_state,
bool muted,
bool has_presentation,
RemotePlaybackMetadataPtr remote_playback_metadata,
bool hide_metadata,
bool ignore_for_active_session);
MediaSessionInfo(
MediaSessionInfo::SessionState state,
bool force_duck,
MediaPlaybackState playback_state,
bool is_controllable,
bool prefer_stop_for_gain_focus_loss,
bool is_sensitive,
MediaPictureInPictureState picture_in_picture_state,
MediaAudioVideoState deprecated_audio_video_state,
const std::optional<std::string>& audio_sink_id,
std::optional<std::vector<MediaAudioVideoState>> audio_video_states,
MicrophoneState microphone_state,
CameraState camera_state,
bool muted,
bool has_presentation,
RemotePlaybackMetadataPtr remote_playback_metadata,
bool hide_metadata,
bool ignore_for_active_session,
bool meets_visibility_threshold);
MediaSessionInfo(const MediaSessionInfo&) = delete;
MediaSessionInfo& operator=(const MediaSessionInfo&) = delete;
~MediaSessionInfo();
// 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 = MediaSessionInfoPtr>
MediaSessionInfoPtr 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, MediaSessionInfo::EnableIfSame<T>* = nullptr>
bool Equals(const T& other) const;
template <typename T, MediaSessionInfo::EnableIfSame<T>* = nullptr>
bool operator==(const T& rhs) const { return Equals(rhs); }
template <typename T, MediaSessionInfo::EnableIfSame<T>* = nullptr>
bool operator!=(const T& rhs) const { return !operator==(rhs); }
template <typename UserType>
static std::vector<uint8_t> Serialize(UserType* input) {
return mojo::internal::SerializeImpl<
MediaSessionInfo::DataView, std::vector<uint8_t>>(input);
}
template <typename UserType>
static mojo::Message SerializeAsMessage(UserType* input) {
return mojo::internal::SerializeAsMessageImpl<
MediaSessionInfo::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::MediaSessionInfo_UnserializedMessageContext<
UserType, MediaSessionInfo::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<MediaSessionInfo::DataView>(
message, data, data_num_bytes, output, Validate);
}
template <typename UserType>
static bool Deserialize(const std::vector<uint8_t>& input,
UserType* output) {
return MediaSessionInfo::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::MediaSessionInfo_UnserializedMessageContext<
UserType, MediaSessionInfo::DataView>>();
if (context) {
*output = std::move(context->TakeData());
return true;
}
input.SerializeIfNecessary();
return mojo::internal::DeserializeImpl<MediaSessionInfo::DataView>(
input, input.payload(), input.payload_num_bytes(), output, Validate);
}
// @generated_from: media_session.mojom.MediaSessionInfo.state
MediaSessionInfo::SessionState state;
// @generated_from: media_session.mojom.MediaSessionInfo.force_duck
bool force_duck;
// @generated_from: media_session.mojom.MediaSessionInfo.playback_state
MediaPlaybackState playback_state;
// @generated_from: media_session.mojom.MediaSessionInfo.is_controllable
bool is_controllable;
// @generated_from: media_session.mojom.MediaSessionInfo.prefer_stop_for_gain_focus_loss
bool prefer_stop_for_gain_focus_loss;
// @generated_from: media_session.mojom.MediaSessionInfo.is_sensitive
bool is_sensitive;
// @generated_from: media_session.mojom.MediaSessionInfo.picture_in_picture_state
MediaPictureInPictureState picture_in_picture_state;
// @generated_from: media_session.mojom.MediaSessionInfo.deprecated_audio_video_state
MediaAudioVideoState deprecated_audio_video_state;
// @generated_from: media_session.mojom.MediaSessionInfo.audio_sink_id
std::optional<std::string> audio_sink_id;
// @generated_from: media_session.mojom.MediaSessionInfo.audio_video_states
std::optional<std::vector<MediaAudioVideoState>> audio_video_states;
// @generated_from: media_session.mojom.MediaSessionInfo.microphone_state
MicrophoneState microphone_state;
// @generated_from: media_session.mojom.MediaSessionInfo.camera_state
CameraState camera_state;
// @generated_from: media_session.mojom.MediaSessionInfo.muted
bool muted;
// @generated_from: media_session.mojom.MediaSessionInfo.has_presentation
bool has_presentation;
// @generated_from: media_session.mojom.MediaSessionInfo.remote_playback_metadata
RemotePlaybackMetadataPtr remote_playback_metadata;
// @generated_from: media_session.mojom.MediaSessionInfo.hide_metadata
bool hide_metadata;
// @generated_from: media_session.mojom.MediaSessionInfo.ignore_for_active_session
bool ignore_for_active_session;
// @generated_from: media_session.mojom.MediaSessionInfo.meets_visibility_threshold
bool meets_visibility_threshold;
// 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, MediaSessionInfo::EnableIfSame<T>* = nullptr>
bool operator<(const T& lhs, const T& rhs);
template <typename T, MediaSessionInfo::EnableIfSame<T>* = nullptr>
bool operator<=(const T& lhs, const T& rhs) {
return !(rhs < lhs);
}
template <typename T, MediaSessionInfo::EnableIfSame<T>* = nullptr>
bool operator>(const T& lhs, const T& rhs) {
return rhs < lhs;
}
template <typename T, MediaSessionInfo::EnableIfSame<T>* = nullptr>
bool operator>=(const T& lhs, const T& rhs) {
return !(lhs < rhs);
}
template <typename StructPtrType>
MediaImagePtr MediaImage::Clone() const {
return New(
mojo::Clone(src),
mojo::Clone(type),
mojo::Clone(sizes)
);
}
template <typename T, MediaImage::EnableIfSame<T>*>
bool MediaImage::Equals(const T& other_struct) const {
if (!mojo::Equals(this->src, other_struct.src))
return false;
if (!mojo::Equals(this->type, other_struct.type))
return false;
if (!mojo::Equals(this->sizes, other_struct.sizes))
return false;
return true;
}
template <typename T, MediaImage::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.src < rhs.src)
return true;
if (rhs.src < lhs.src)
return false;
if (lhs.type < rhs.type)
return true;
if (rhs.type < lhs.type)
return false;
if (lhs.sizes < rhs.sizes)
return true;
if (rhs.sizes < lhs.sizes)
return false;
return false;
}
template <typename StructPtrType>
ChapterInformationPtr ChapterInformation::Clone() const {
return New(
mojo::Clone(title),
mojo::Clone(startTime),
mojo::Clone(artwork)
);
}
template <typename T, ChapterInformation::EnableIfSame<T>*>
bool ChapterInformation::Equals(const T& other_struct) const {
if (!mojo::Equals(this->title, other_struct.title))
return false;
if (!mojo::Equals(this->startTime, other_struct.startTime))
return false;
if (!mojo::Equals(this->artwork, other_struct.artwork))
return false;
return true;
}
template <typename T, ChapterInformation::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.title < rhs.title)
return true;
if (rhs.title < lhs.title)
return false;
if (lhs.startTime < rhs.startTime)
return true;
if (rhs.startTime < lhs.startTime)
return false;
if (lhs.artwork < rhs.artwork)
return true;
if (rhs.artwork < lhs.artwork)
return false;
return false;
}
template <typename StructPtrType>
MediaMetadataPtr MediaMetadata::Clone() const {
return New(
mojo::Clone(title),
mojo::Clone(artist),
mojo::Clone(album),
mojo::Clone(source_title),
mojo::Clone(chapters)
);
}
template <typename T, MediaMetadata::EnableIfSame<T>*>
bool MediaMetadata::Equals(const T& other_struct) const {
if (!mojo::Equals(this->title, other_struct.title))
return false;
if (!mojo::Equals(this->artist, other_struct.artist))
return false;
if (!mojo::Equals(this->album, other_struct.album))
return false;
if (!mojo::Equals(this->source_title, other_struct.source_title))
return false;
if (!mojo::Equals(this->chapters, other_struct.chapters))
return false;
return true;
}
template <typename T, MediaMetadata::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.title < rhs.title)
return true;
if (rhs.title < lhs.title)
return false;
if (lhs.artist < rhs.artist)
return true;
if (rhs.artist < lhs.artist)
return false;
if (lhs.album < rhs.album)
return true;
if (rhs.album < lhs.album)
return false;
if (lhs.source_title < rhs.source_title)
return true;
if (rhs.source_title < lhs.source_title)
return false;
if (lhs.chapters < rhs.chapters)
return true;
if (rhs.chapters < lhs.chapters)
return false;
return false;
}
template <typename StructPtrType>
MediaImageBitmapPtr MediaImageBitmap::Clone() const {
return New(
mojo::Clone(width),
mojo::Clone(height),
mojo::Clone(pixel_data),
mojo::Clone(color_type)
);
}
template <typename T, MediaImageBitmap::EnableIfSame<T>*>
bool MediaImageBitmap::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->pixel_data, other_struct.pixel_data))
return false;
if (!mojo::Equals(this->color_type, other_struct.color_type))
return false;
return true;
}
template <typename T, MediaImageBitmap::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.pixel_data < rhs.pixel_data)
return true;
if (rhs.pixel_data < lhs.pixel_data)
return false;
if (lhs.color_type < rhs.color_type)
return true;
if (rhs.color_type < lhs.color_type)
return false;
return false;
}
template <typename StructPtrType>
MediaPositionPtr MediaPosition::Clone() const {
return New(
mojo::Clone(playback_rate),
mojo::Clone(duration),
mojo::Clone(position),
mojo::Clone(last_updated_time),
mojo::Clone(end_of_media)
);
}
template <typename T, MediaPosition::EnableIfSame<T>*>
bool MediaPosition::Equals(const T& other_struct) const {
if (!mojo::Equals(this->playback_rate, other_struct.playback_rate))
return false;
if (!mojo::Equals(this->duration, other_struct.duration))
return false;
if (!mojo::Equals(this->position, other_struct.position))
return false;
if (!mojo::Equals(this->last_updated_time, other_struct.last_updated_time))
return false;
if (!mojo::Equals(this->end_of_media, other_struct.end_of_media))
return false;
return true;
}
template <typename T, MediaPosition::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.playback_rate < rhs.playback_rate)
return true;
if (rhs.playback_rate < lhs.playback_rate)
return false;
if (lhs.duration < rhs.duration)
return true;
if (rhs.duration < lhs.duration)
return false;
if (lhs.position < rhs.position)
return true;
if (rhs.position < lhs.position)
return false;
if (lhs.last_updated_time < rhs.last_updated_time)
return true;
if (rhs.last_updated_time < lhs.last_updated_time)
return false;
if (lhs.end_of_media < rhs.end_of_media)
return true;
if (rhs.end_of_media < lhs.end_of_media)
return false;
return false;
}
template <typename StructPtrType>
RemotePlaybackMetadataPtr RemotePlaybackMetadata::Clone() const {
return New(
mojo::Clone(video_codec),
mojo::Clone(audio_codec),
mojo::Clone(remote_playback_disabled),
mojo::Clone(remote_playback_started),
mojo::Clone(unused_field),
mojo::Clone(is_encrypted_media)
);
}
template <typename T, RemotePlaybackMetadata::EnableIfSame<T>*>
bool RemotePlaybackMetadata::Equals(const T& other_struct) const {
if (!mojo::Equals(this->video_codec, other_struct.video_codec))
return false;
if (!mojo::Equals(this->audio_codec, other_struct.audio_codec))
return false;
if (!mojo::Equals(this->remote_playback_disabled, other_struct.remote_playback_disabled))
return false;
if (!mojo::Equals(this->remote_playback_started, other_struct.remote_playback_started))
return false;
if (!mojo::Equals(this->unused_field, other_struct.unused_field))
return false;
if (!mojo::Equals(this->is_encrypted_media, other_struct.is_encrypted_media))
return false;
return true;
}
template <typename T, RemotePlaybackMetadata::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.video_codec < rhs.video_codec)
return true;
if (rhs.video_codec < lhs.video_codec)
return false;
if (lhs.audio_codec < rhs.audio_codec)
return true;
if (rhs.audio_codec < lhs.audio_codec)
return false;
if (lhs.remote_playback_disabled < rhs.remote_playback_disabled)
return true;
if (rhs.remote_playback_disabled < lhs.remote_playback_disabled)
return false;
if (lhs.remote_playback_started < rhs.remote_playback_started)
return true;
if (rhs.remote_playback_started < lhs.remote_playback_started)
return false;
if (lhs.unused_field < rhs.unused_field)
return true;
if (rhs.unused_field < lhs.unused_field)
return false;
if (lhs.is_encrypted_media < rhs.is_encrypted_media)
return true;
if (rhs.is_encrypted_media < lhs.is_encrypted_media)
return false;
return false;
}
template <typename StructPtrType>
MediaSessionInfoPtr MediaSessionInfo::Clone() const {
return New(
mojo::Clone(state),
mojo::Clone(force_duck),
mojo::Clone(playback_state),
mojo::Clone(is_controllable),
mojo::Clone(prefer_stop_for_gain_focus_loss),
mojo::Clone(is_sensitive),
mojo::Clone(picture_in_picture_state),
mojo::Clone(deprecated_audio_video_state),
mojo::Clone(audio_sink_id),
mojo::Clone(audio_video_states),
mojo::Clone(microphone_state),
mojo::Clone(camera_state),
mojo::Clone(muted),
mojo::Clone(has_presentation),
mojo::Clone(remote_playback_metadata),
mojo::Clone(hide_metadata),
mojo::Clone(ignore_for_active_session),
mojo::Clone(meets_visibility_threshold)
);
}
template <typename T, MediaSessionInfo::EnableIfSame<T>*>
bool MediaSessionInfo::Equals(const T& other_struct) const {
if (!mojo::Equals(this->state, other_struct.state))
return false;
if (!mojo::Equals(this->force_duck, other_struct.force_duck))
return false;
if (!mojo::Equals(this->playback_state, other_struct.playback_state))
return false;
if (!mojo::Equals(this->is_controllable, other_struct.is_controllable))
return false;
if (!mojo::Equals(this->prefer_stop_for_gain_focus_loss, other_struct.prefer_stop_for_gain_focus_loss))
return false;
if (!mojo::Equals(this->is_sensitive, other_struct.is_sensitive))
return false;
if (!mojo::Equals(this->picture_in_picture_state, other_struct.picture_in_picture_state))
return false;
if (!mojo::Equals(this->deprecated_audio_video_state, other_struct.deprecated_audio_video_state))
return false;
if (!mojo::Equals(this->audio_sink_id, other_struct.audio_sink_id))
return false;
if (!mojo::Equals(this->audio_video_states, other_struct.audio_video_states))
return false;
if (!mojo::Equals(this->microphone_state, other_struct.microphone_state))
return false;
if (!mojo::Equals(this->camera_state, other_struct.camera_state))
return false;
if (!mojo::Equals(this->muted, other_struct.muted))
return false;
if (!mojo::Equals(this->has_presentation, other_struct.has_presentation))
return false;
if (!mojo::Equals(this->remote_playback_metadata, other_struct.remote_playback_metadata))
return false;
if (!mojo::Equals(this->hide_metadata, other_struct.hide_metadata))
return false;
if (!mojo::Equals(this->ignore_for_active_session, other_struct.ignore_for_active_session))
return false;
if (!mojo::Equals(this->meets_visibility_threshold, other_struct.meets_visibility_threshold))
return false;
return true;
}
template <typename T, MediaSessionInfo::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.state < rhs.state)
return true;
if (rhs.state < lhs.state)
return false;
if (lhs.force_duck < rhs.force_duck)
return true;
if (rhs.force_duck < lhs.force_duck)
return false;
if (lhs.playback_state < rhs.playback_state)
return true;
if (rhs.playback_state < lhs.playback_state)
return false;
if (lhs.is_controllable < rhs.is_controllable)
return true;
if (rhs.is_controllable < lhs.is_controllable)
return false;
if (lhs.prefer_stop_for_gain_focus_loss < rhs.prefer_stop_for_gain_focus_loss)
return true;
if (rhs.prefer_stop_for_gain_focus_loss < lhs.prefer_stop_for_gain_focus_loss)
return false;
if (lhs.is_sensitive < rhs.is_sensitive)
return true;
if (rhs.is_sensitive < lhs.is_sensitive)
return false;
if (lhs.picture_in_picture_state < rhs.picture_in_picture_state)
return true;
if (rhs.picture_in_picture_state < lhs.picture_in_picture_state)
return false;
if (lhs.deprecated_audio_video_state < rhs.deprecated_audio_video_state)
return true;
if (rhs.deprecated_audio_video_state < lhs.deprecated_audio_video_state)
return false;
if (lhs.audio_sink_id < rhs.audio_sink_id)
return true;
if (rhs.audio_sink_id < lhs.audio_sink_id)
return false;
if (lhs.audio_video_states < rhs.audio_video_states)
return true;
if (rhs.audio_video_states < lhs.audio_video_states)
return false;
if (lhs.microphone_state < rhs.microphone_state)
return true;
if (rhs.microphone_state < lhs.microphone_state)
return false;
if (lhs.camera_state < rhs.camera_state)
return true;
if (rhs.camera_state < lhs.camera_state)
return false;
if (lhs.muted < rhs.muted)
return true;
if (rhs.muted < lhs.muted)
return false;
if (lhs.has_presentation < rhs.has_presentation)
return true;
if (rhs.has_presentation < lhs.has_presentation)
return false;
if (lhs.remote_playback_metadata < rhs.remote_playback_metadata)
return true;
if (rhs.remote_playback_metadata < lhs.remote_playback_metadata)
return false;
if (lhs.hide_metadata < rhs.hide_metadata)
return true;
if (rhs.hide_metadata < lhs.hide_metadata)
return false;
if (lhs.ignore_for_active_session < rhs.ignore_for_active_session)
return true;
if (rhs.ignore_for_active_session < lhs.ignore_for_active_session)
return false;
if (lhs.meets_visibility_threshold < rhs.meets_visibility_threshold)
return true;
if (rhs.meets_visibility_threshold < lhs.meets_visibility_threshold)
return false;
return false;
}
template <typename StructPtrType>
MediaSessionDebugInfoPtr MediaSessionDebugInfo::Clone() const {
return New(
mojo::Clone(name),
mojo::Clone(owner),
mojo::Clone(state)
);
}
template <typename T, MediaSessionDebugInfo::EnableIfSame<T>*>
bool MediaSessionDebugInfo::Equals(const T& other_struct) const {
if (!mojo::Equals(this->name, other_struct.name))
return false;
if (!mojo::Equals(this->owner, other_struct.owner))
return false;
if (!mojo::Equals(this->state, other_struct.state))
return false;
return true;
}
template <typename T, MediaSessionDebugInfo::EnableIfSame<T>*>
bool operator<(const T& lhs, const T& rhs) {
if (lhs.name < rhs.name)
return true;
if (rhs.name < lhs.name)
return false;
if (lhs.owner < rhs.owner)
return true;
if (rhs.owner < lhs.owner)
return false;
if (lhs.state < rhs.state)
return true;
if (rhs.state < lhs.state)
return false;
return false;
}
} // media_session::mojom
namespace mojo {
template <>
struct StructTraits<::media_session::mojom::MediaImage::DataView,
::media_session::mojom::MediaImagePtr> {
static bool IsNull(const ::media_session::mojom::MediaImagePtr& input) { return !input; }
static void SetToNull(::media_session::mojom::MediaImagePtr* output) { output->reset(); }
static const decltype(::media_session::mojom::MediaImage::src)& src(
const ::media_session::mojom::MediaImagePtr& input) {
return input->src;
}
static const decltype(::media_session::mojom::MediaImage::type)& type(
const ::media_session::mojom::MediaImagePtr& input) {
return input->type;
}
static const decltype(::media_session::mojom::MediaImage::sizes)& sizes(
const ::media_session::mojom::MediaImagePtr& input) {
return input->sizes;
}
static bool Read(::media_session::mojom::MediaImage::DataView input, ::media_session::mojom::MediaImagePtr* output);
};
template <>
struct StructTraits<::media_session::mojom::ChapterInformation::DataView,
::media_session::mojom::ChapterInformationPtr> {
static bool IsNull(const ::media_session::mojom::ChapterInformationPtr& input) { return !input; }
static void SetToNull(::media_session::mojom::ChapterInformationPtr* output) { output->reset(); }
static const decltype(::media_session::mojom::ChapterInformation::title)& title(
const ::media_session::mojom::ChapterInformationPtr& input) {
return input->title;
}
static const decltype(::media_session::mojom::ChapterInformation::startTime)& startTime(
const ::media_session::mojom::ChapterInformationPtr& input) {
return input->startTime;
}
static const decltype(::media_session::mojom::ChapterInformation::artwork)& artwork(
const ::media_session::mojom::ChapterInformationPtr& input) {
return input->artwork;
}
static bool Read(::media_session::mojom::ChapterInformation::DataView input, ::media_session::mojom::ChapterInformationPtr* output);
};
template <>
struct StructTraits<::media_session::mojom::MediaMetadata::DataView,
::media_session::mojom::MediaMetadataPtr> {
static bool IsNull(const ::media_session::mojom::MediaMetadataPtr& input) { return !input; }
static void SetToNull(::media_session::mojom::MediaMetadataPtr* output) { output->reset(); }
static const decltype(::media_session::mojom::MediaMetadata::title)& title(
const ::media_session::mojom::MediaMetadataPtr& input) {
return input->title;
}
static const decltype(::media_session::mojom::MediaMetadata::artist)& artist(
const ::media_session::mojom::MediaMetadataPtr& input) {
return input->artist;
}
static const decltype(::media_session::mojom::MediaMetadata::album)& album(
const ::media_session::mojom::MediaMetadataPtr& input) {
return input->album;
}
static const decltype(::media_session::mojom::MediaMetadata::source_title)& source_title(
const ::media_session::mojom::MediaMetadataPtr& input) {
return input->source_title;
}
static const decltype(::media_session::mojom::MediaMetadata::chapters)& chapters(
const ::media_session::mojom::MediaMetadataPtr& input) {
return input->chapters;
}
static bool Read(::media_session::mojom::MediaMetadata::DataView input, ::media_session::mojom::MediaMetadataPtr* output);
};
template <>
struct StructTraits<::media_session::mojom::MediaImageBitmap::DataView,
::media_session::mojom::MediaImageBitmapPtr> {
static bool IsNull(const ::media_session::mojom::MediaImageBitmapPtr& input) { return !input; }
static void SetToNull(::media_session::mojom::MediaImageBitmapPtr* output) { output->reset(); }
static decltype(::media_session::mojom::MediaImageBitmap::width) width(
const ::media_session::mojom::MediaImageBitmapPtr& input) {
return input->width;
}
static decltype(::media_session::mojom::MediaImageBitmap::height) height(
const ::media_session::mojom::MediaImageBitmapPtr& input) {
return input->height;
}
static const decltype(::media_session::mojom::MediaImageBitmap::pixel_data)& pixel_data(
const ::media_session::mojom::MediaImageBitmapPtr& input) {
return input->pixel_data;
}
static decltype(::media_session::mojom::MediaImageBitmap::color_type) color_type(
const ::media_session::mojom::MediaImageBitmapPtr& input) {
return input->color_type;
}
static bool Read(::media_session::mojom::MediaImageBitmap::DataView input, ::media_session::mojom::MediaImageBitmapPtr* output);
};
template <>
struct StructTraits<::media_session::mojom::MediaPosition::DataView,
::media_session::mojom::MediaPositionPtr> {
static bool IsNull(const ::media_session::mojom::MediaPositionPtr& input) { return !input; }
static void SetToNull(::media_session::mojom::MediaPositionPtr* output) { output->reset(); }
static decltype(::media_session::mojom::MediaPosition::playback_rate) playback_rate(
const ::media_session::mojom::MediaPositionPtr& input) {
return input->playback_rate;
}
static const decltype(::media_session::mojom::MediaPosition::duration)& duration(
const ::media_session::mojom::MediaPositionPtr& input) {
return input->duration;
}
static const decltype(::media_session::mojom::MediaPosition::position)& position(
const ::media_session::mojom::MediaPositionPtr& input) {
return input->position;
}
static const decltype(::media_session::mojom::MediaPosition::last_updated_time)& last_updated_time(
const ::media_session::mojom::MediaPositionPtr& input) {
return input->last_updated_time;
}
static decltype(::media_session::mojom::MediaPosition::end_of_media) end_of_media(
const ::media_session::mojom::MediaPositionPtr& input) {
return input->end_of_media;
}
static bool Read(::media_session::mojom::MediaPosition::DataView input, ::media_session::mojom::MediaPositionPtr* output);
};
template <>
struct StructTraits<::media_session::mojom::RemotePlaybackMetadata::DataView,
::media_session::mojom::RemotePlaybackMetadataPtr> {
static bool IsNull(const ::media_session::mojom::RemotePlaybackMetadataPtr& input) { return !input; }
static void SetToNull(::media_session::mojom::RemotePlaybackMetadataPtr* output) { output->reset(); }
static const decltype(::media_session::mojom::RemotePlaybackMetadata::video_codec)& video_codec(
const ::media_session::mojom::RemotePlaybackMetadataPtr& input) {
return input->video_codec;
}
static const decltype(::media_session::mojom::RemotePlaybackMetadata::audio_codec)& audio_codec(
const ::media_session::mojom::RemotePlaybackMetadataPtr& input) {
return input->audio_codec;
}
static decltype(::media_session::mojom::RemotePlaybackMetadata::remote_playback_disabled) remote_playback_disabled(
const ::media_session::mojom::RemotePlaybackMetadataPtr& input) {
return input->remote_playback_disabled;
}
static decltype(::media_session::mojom::RemotePlaybackMetadata::remote_playback_started) remote_playback_started(
const ::media_session::mojom::RemotePlaybackMetadataPtr& input) {
return input->remote_playback_started;
}
static const decltype(::media_session::mojom::RemotePlaybackMetadata::unused_field)& unused_field(
const ::media_session::mojom::RemotePlaybackMetadataPtr& input) {
return input->unused_field;
}
static decltype(::media_session::mojom::RemotePlaybackMetadata::is_encrypted_media) is_encrypted_media(
const ::media_session::mojom::RemotePlaybackMetadataPtr& input) {
return input->is_encrypted_media;
}
static bool Read(::media_session::mojom::RemotePlaybackMetadata::DataView input, ::media_session::mojom::RemotePlaybackMetadataPtr* output);
};
template <>
struct StructTraits<::media_session::mojom::MediaSessionInfo::DataView,
::media_session::mojom::MediaSessionInfoPtr> {
static bool IsNull(const ::media_session::mojom::MediaSessionInfoPtr& input) { return !input; }
static void SetToNull(::media_session::mojom::MediaSessionInfoPtr* output) { output->reset(); }
static decltype(::media_session::mojom::MediaSessionInfo::state) state(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->state;
}
static decltype(::media_session::mojom::MediaSessionInfo::force_duck) force_duck(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->force_duck;
}
static decltype(::media_session::mojom::MediaSessionInfo::playback_state) playback_state(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->playback_state;
}
static decltype(::media_session::mojom::MediaSessionInfo::is_controllable) is_controllable(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->is_controllable;
}
static decltype(::media_session::mojom::MediaSessionInfo::prefer_stop_for_gain_focus_loss) prefer_stop_for_gain_focus_loss(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->prefer_stop_for_gain_focus_loss;
}
static decltype(::media_session::mojom::MediaSessionInfo::is_sensitive) is_sensitive(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->is_sensitive;
}
static decltype(::media_session::mojom::MediaSessionInfo::picture_in_picture_state) picture_in_picture_state(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->picture_in_picture_state;
}
static decltype(::media_session::mojom::MediaSessionInfo::deprecated_audio_video_state) deprecated_audio_video_state(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->deprecated_audio_video_state;
}
static const decltype(::media_session::mojom::MediaSessionInfo::audio_sink_id)& audio_sink_id(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->audio_sink_id;
}
static const decltype(::media_session::mojom::MediaSessionInfo::audio_video_states)& audio_video_states(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->audio_video_states;
}
static decltype(::media_session::mojom::MediaSessionInfo::microphone_state) microphone_state(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->microphone_state;
}
static decltype(::media_session::mojom::MediaSessionInfo::camera_state) camera_state(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->camera_state;
}
static decltype(::media_session::mojom::MediaSessionInfo::muted) muted(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->muted;
}
static decltype(::media_session::mojom::MediaSessionInfo::has_presentation) has_presentation(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->has_presentation;
}
static const decltype(::media_session::mojom::MediaSessionInfo::remote_playback_metadata)& remote_playback_metadata(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->remote_playback_metadata;
}
static decltype(::media_session::mojom::MediaSessionInfo::hide_metadata) hide_metadata(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->hide_metadata;
}
static decltype(::media_session::mojom::MediaSessionInfo::ignore_for_active_session) ignore_for_active_session(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->ignore_for_active_session;
}
static decltype(::media_session::mojom::MediaSessionInfo::meets_visibility_threshold) meets_visibility_threshold(
const ::media_session::mojom::MediaSessionInfoPtr& input) {
return input->meets_visibility_threshold;
}
static bool Read(::media_session::mojom::MediaSessionInfo::DataView input, ::media_session::mojom::MediaSessionInfoPtr* output);
};
template <>
struct StructTraits<::media_session::mojom::MediaSessionDebugInfo::DataView,
::media_session::mojom::MediaSessionDebugInfoPtr> {
static bool IsNull(const ::media_session::mojom::MediaSessionDebugInfoPtr& input) { return !input; }
static void SetToNull(::media_session::mojom::MediaSessionDebugInfoPtr* output) { output->reset(); }
static const decltype(::media_session::mojom::MediaSessionDebugInfo::name)& name(
const ::media_session::mojom::MediaSessionDebugInfoPtr& input) {
return input->name;
}
static const decltype(::media_session::mojom::MediaSessionDebugInfo::owner)& owner(
const ::media_session::mojom::MediaSessionDebugInfoPtr& input) {
return input->owner;
}
static const decltype(::media_session::mojom::MediaSessionDebugInfo::state)& state(
const ::media_session::mojom::MediaSessionDebugInfoPtr& input) {
return input->state;
}
static bool Read(::media_session::mojom::MediaSessionDebugInfo::DataView input, ::media_session::mojom::MediaSessionDebugInfoPtr* output);
};
} // namespace mojo
#endif // SERVICES_MEDIA_SESSION_PUBLIC_MOJOM_MEDIA_SESSION_MOJOM_H_
/* Metadata comment
eyJ0eXBlIjogImt5dGhlMCIsICJtZXRhIjogW3sidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDE5OTEsICJlbmQiOiAyMDExLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwg
ImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0v
c3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lv
bk9ic2VydmVyIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMzgzMywgImVuZCI6IDM4NTYsICJ2bmFtZSI6IHsi
bGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Np
b24ubW9qb20uTWVkaWFTZXNzaW9uT2JzZXJ2ZXIuTWVkaWFTZXNzaW9uSW5mb0NoYW5nZWQifSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAiYmVnaW4iOiAzOTk2LCAiZW5kIjogNDAyMywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJt
b2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2No
cm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRp
YVNlc3Npb25PYnNlcnZlci5NZWRpYVNlc3Npb25NZXRhZGF0YUNoYW5nZWQifSwgImVkZ2UiOiAi
JS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVn
aW4iOiA0MTk5LCAiZW5kIjogNDIyNSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJj
b3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3Ny
Yy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb25P
YnNlcnZlci5NZWRpYVNlc3Npb25BY3Rpb25zQ2hhbmdlZCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDQzODQs
ICJlbmQiOiA0NDA5LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwg
InNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbk9ic2VydmVyLk1l
ZGlhU2Vzc2lvbkltYWdlc0NoYW5nZWQifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRl
cyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA0NjE4LCAiZW5kIjogNDY0
NSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUi
OiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb25PYnNlcnZlci5NZWRpYVNlc3Npb25Q
b3NpdGlvbkNoYW5nZWQifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA0OTM3LCAiZW5kIjogNDk0OSwgInZuYW1l
IjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFf
c2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb24ifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA4OTgyLCAiZW5kIjog
ODk5MywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1
cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb24uU3VzcGVuZFR5cGUifSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAiYmVnaW4iOiA5MjM3LCAiZW5kIjogOTI1NiwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pv
bSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9t
aXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNl
c3Npb24uR2V0TWVkaWFTZXNzaW9uSW5mbyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJh
dGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDk0NjksICJlbmQiOiA5
NDgxLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5n
b29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVy
ZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5HZXREZWJ1Z0luZm8ifSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAiYmVnaW4iOiA5NjAzLCAiZW5kIjogOTYxNSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pv
bSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9t
aXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNl
c3Npb24uU3RhcnREdWNraW5nIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwg
eyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogOTcwNywgImVuZCI6IDk3MTgsICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1l
ZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uLlN0b3BEdWNraW5nIn0sICJlZGdlIjogIiUv
a3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2lu
IjogOTgwNiwgImVuZCI6IDk4MTMsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMv
L21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uLlN1
c3BlbmQifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAiYmVnaW4iOiA5OTM4LCAiZW5kIjogOTk0NCwgInZuYW1lIjogeyJsYW5n
dWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rl
c2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5t
b2pvbS5NZWRpYVNlc3Npb24uUmVzdW1lIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTAwNzQsICJlbmQiOiAx
MDA4NSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1
cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb24uQWRkT2JzZXJ2ZXIifSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAiYmVnaW4iOiAxMDIzMSwgImVuZCI6IDEwMjQ0LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1v
am9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hy
b21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlh
U2Vzc2lvbi5QcmV2aW91c1RyYWNrIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMi
fSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTAzMzQsICJlbmQiOiAxMDM0
MywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29v
Z2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUi
OiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb24uTmV4dFRyYWNrIn0sICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJl
Z2luIjogMTA0MjgsICJlbmQiOiAxMDQzMiwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVt
L3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Np
b24uU2VlayJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJh
bmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDEwNTQ0LCAiZW5kIjogMTA1NDgsICJ2bmFtZSI6IHsi
bGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20v
Y29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Np
b24ubW9qb20uTWVkaWFTZXNzaW9uLlN0b3AifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxMDY3MywgImVuZCI6
IDEwNjc5LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25h
dHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5Ta2lwQWQifSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
YmVnaW4iOiAxMDg2MywgImVuZCI6IDEwODgyLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9t
IiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21p
dW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vz
c2lvbi5HZXRNZWRpYUltYWdlQml0bWFwIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTEwOTcsICJlbmQiOiAx
MTEwMywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1
cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb24uU2Vla1RvIn0sICJlZGdlIjog
IiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJl
Z2luIjogMTEyMTgsICJlbmQiOiAxMTIyNSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIs
ICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVt
L3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Np
b24uU2NydWJUbyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDExMzU0LCAiZW5kIjogMTEzNzUsICJ2bmFtZSI6
IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nl
c3Npb24ubW9qb20uTWVkaWFTZXNzaW9uLkVudGVyUGljdHVyZUluUGljdHVyZSJ9LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDExNDc2LCAiZW5kIjogMTE0OTYsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20i
LCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1
bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNz
aW9uLkV4aXRQaWN0dXJlSW5QaWN0dXJlIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTE1OTEsICJlbmQiOiAx
MTYwNSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1
cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb24uU2V0QXVkaW9TaW5rSWQifSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAiYmVnaW4iOiAxMTczOCwgImVuZCI6IDExNzU0LCAidm5hbWUiOiB7Imxhbmd1YWdlIjog
Im1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gv
Y2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1l
ZGlhU2Vzc2lvbi5Ub2dnbGVNaWNyb3Bob25lIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTE4NDcsICJlbmQi
OiAxMTg1OSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWdu
YXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb24uVG9nZ2xlQ2FtZXJhIn0s
ICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZp
bmVzIiwgImJlZ2luIjogMTE5NDYsICJlbmQiOiAxMTk1MiwgInZuYW1lIjogeyJsYW5ndWFnZSI6
ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNo
L2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5N
ZWRpYVNlc3Npb24uSGFuZ1VwIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwg
eyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTIwMzgsICJlbmQiOiAxMjA0Mywg
InZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xl
c291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAi
bWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb24uUmFpc2UifSwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAx
MjEzMSwgImVuZCI6IDEyMTM4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9t
YWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5TZXRN
dXRlIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgImJlZ2luIjogMTIyNDgsICJlbmQiOiAxMjI2OCwgInZuYW1lIjogeyJsYW5n
dWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rl
c2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5t
b2pvbS5NZWRpYVNlc3Npb24uUmVxdWVzdE1lZGlhUmVtb3RpbmcifSwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAx
MjM2MiwgImVuZCI6IDEyMzc1LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9t
YWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5QcmV2
aW91c1NsaWRlIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTI0NjUsICJlbmQiOiAxMjQ3NCwgInZuYW1lIjog
eyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vz
c2lvbi5tb2pvbS5NZWRpYVNlc3Npb24uTmV4dFNsaWRlIn0sICJlZGdlIjogIiUva3l0aGUvZWRn
ZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMTI1ODAs
ICJlbmQiOiAxMjYwNSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAi
Y2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIs
ICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb24uRW50ZXJBdXRv
UGljdHVyZUluUGljdHVyZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDEyOTg0LCAiZW5kIjogMTMwMDcsICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1l
ZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uT2JzZXJ2ZXIuTWVkaWFTZXNzaW9uSW5mb0No
YW5nZWQifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxMzE0MCwgImVuZCI6IDEzMTY3LCAidm5hbWUiOiB7Imxh
bmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nv
ZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9u
Lm1vam9tLk1lZGlhU2Vzc2lvbk9ic2VydmVyLk1lZGlhU2Vzc2lvbk1ldGFkYXRhQ2hhbmdlZCJ9
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJiZWdpbiI6IDEzMzM2LCAiZW5kIjogMTMzNjIsICJ2bmFtZSI6IHsibGFuZ3VhZ2Ui
OiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJj
aC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20u
TWVkaWFTZXNzaW9uT2JzZXJ2ZXIuTWVkaWFTZXNzaW9uQWN0aW9uc0NoYW5nZWQifSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
YmVnaW4iOiAxMzUxNCwgImVuZCI6IDEzNTM5LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9t
IiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21p
dW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vz
c2lvbk9ic2VydmVyLk1lZGlhU2Vzc2lvbkltYWdlc0NoYW5nZWQifSwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAx
Mzc0MSwgImVuZCI6IDEzNzY4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9t
YWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbk9ic2Vy
dmVyLk1lZGlhU2Vzc2lvblBvc2l0aW9uQ2hhbmdlZCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDE0MjE4LCAi
ZW5kIjogMTQyMzcsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAi
c2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uLkdldE1lZGlhU2Vz
c2lvbkluZm8ifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNDM1OSwgImVuZCI6IDE0MzcxLCAidm5hbWUiOiB7
Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNz
aW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5HZXREZWJ1Z0luZm8ifSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNDQ4
NiwgImVuZCI6IDE0NDk4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWlu
IiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5TdGFydER1
Y2tpbmcifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNDU4MywgImVuZCI6IDE0NTk0LCAidm5hbWUiOiB7Imxh
bmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nv
ZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9u
Lm1vam9tLk1lZGlhU2Vzc2lvbi5TdG9wRHVja2luZyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDE0Njc1LCAi
ZW5kIjogMTQ2ODIsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAi
c2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uLlN1c3BlbmQifSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAiYmVnaW4iOiAxNDgwMCwgImVuZCI6IDE0ODA2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjog
Im1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gv
Y2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1l
ZGlhU2Vzc2lvbi5SZXN1bWUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNDkyOSwgImVuZCI6IDE0OTQwLCAi
dm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJt
ZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5BZGRPYnNlcnZlciJ9LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdp
biI6IDE1MDc5LCAiZW5kIjogMTUwOTIsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9z
cmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9u
LlByZXZpb3VzVHJhY2sifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNTE3NSwgImVuZCI6IDE1MTg0LCAidm5h
bWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRp
YV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5OZXh0VHJhY2sifSwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAx
NTI2MiwgImVuZCI6IDE1MjY2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9t
YWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5TZWVr
In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgImJlZ2luIjogMTUzNzEsICJlbmQiOiAxNTM3NSwgInZuYW1lIjogeyJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2Vh
cmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pv
bS5NZWRpYVNlc3Npb24uU3RvcCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0s
IHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDE1NDkzLCAiZW5kIjogMTU0OTks
ICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjog
Im1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uLlNraXBBZCJ9LCAiZWRnZSI6ICIlL2t5
dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6
IDE1NTkyLCAiZW5kIjogMTU2MTEsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29y
cHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMv
L21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uLkdl
dE1lZGlhSW1hZ2VCaXRtYXAifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNTgxOSwgImVuZCI6IDE1ODI1LCAi
dm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJt
ZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5TZWVrVG8ifSwgImVkZ2UiOiAiJS9reXRo
ZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAx
NTkzMywgImVuZCI6IDE1OTQwLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1
cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9t
YWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5TY3J1
YlRvIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgImJlZ2luIjogMTYwNjIsICJlbmQiOiAxNjA4MywgInZuYW1lIjogeyJsYW5n
dWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rl
c2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5t
b2pvbS5NZWRpYVNlc3Npb24uRW50ZXJQaWN0dXJlSW5QaWN0dXJlIn0sICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjog
MTYxNzcsICJlbmQiOiAxNjE5NywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8v
bWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb24uRXhp
dFBpY3R1cmVJblBpY3R1cmUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNjI4NSwgImVuZCI6IDE2Mjk5LCAi
dm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJt
ZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5TZXRBdWRpb1NpbmtJZCJ9LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDE2NDI1LCAiZW5kIjogMTY0NDEsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20i
LCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1
bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNz
aW9uLlRvZ2dsZU1pY3JvcGhvbmUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9
LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNjUyNywgImVuZCI6IDE2NTM5
LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6
ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5Ub2dnbGVDYW1lcmEifSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
YmVnaW4iOiAxNjYxOSwgImVuZCI6IDE2NjI1LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9t
IiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21p
dW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vz
c2lvbi5IYW5nVXAifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUi
OiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNjcwNCwgImVuZCI6IDE2NzA5LCAidm5hbWUi
OiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2Uu
Y29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9z
ZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5SYWlzZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDE2NzkwLCAi
ZW5kIjogMTY3OTcsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAi
c2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uLlNldE11dGUifSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAiYmVnaW4iOiAxNjkwMCwgImVuZCI6IDE2OTIwLCAidm5hbWUiOiB7Imxhbmd1YWdlIjog
Im1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gv
Y2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1l
ZGlhU2Vzc2lvbi5SZXF1ZXN0TWVkaWFSZW1vdGluZyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2Uv
Z2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDE3MDA3LCAi
ZW5kIjogMTcwMjAsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNo
cm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAi
c2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uLlByZXZpb3VzU2xp
ZGUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAiYmVnaW4iOiAxNzEwMywgImVuZCI6IDE3MTEyLCAidm5hbWUiOiB7Imxhbmd1
YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVz
ZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1v
am9tLk1lZGlhU2Vzc2lvbi5OZXh0U2xpZGUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVy
YXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAxNzIxMSwgImVuZCI6
IDE3MjM2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1
bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25h
dHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbi5FbnRlckF1dG9QaWN0dXJl
SW5QaWN0dXJlIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjog
ImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMjA0MjgsICJlbmQiOiAyMDQ0OSwgInZuYW1lIjog
eyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNv
bS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vz
c2lvbi5tb2pvbS5NZWRpYVNlc3Npb25EZWJ1Z0luZm8ifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAyNDUxMiwg
ImVuZCI6IDI0NTE2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwg
InNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbkRlYnVnSW5mby5u
YW1lIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hv
cl9kZWZpbmVzIiwgImJlZ2luIjogMjQ2MDMsICJlbmQiOiAyNDYwOCwgInZuYW1lIjogeyJsYW5n
dWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rl
c2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5t
b2pvbS5NZWRpYVNlc3Npb25EZWJ1Z0luZm8ub3duZXIifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAyNDY5NSwg
ImVuZCI6IDI0NzAwLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwg
InNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbkRlYnVnSW5mby5z
dGF0ZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNo
b3JfZGVmaW5lcyIsICJiZWdpbiI6IDI1NzYzLCAiZW5kIjogMjU3NzMsICJ2bmFtZSI6IHsibGFu
Z3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29k
ZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24u
bW9qb20uTWVkaWFJbWFnZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDI5NTE0LCAiZW5kIjogMjk1MTcsICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1l
ZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFJbWFnZS5zcmMifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAyOTU5Nywg
ImVuZCI6IDI5NjAxLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwg
InNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhSW1hZ2UudHlwZSJ9LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJiZWdpbiI6IDI5NjkwLCAiZW5kIjogMjk2OTUsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9q
b20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJv
bWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFJ
bWFnZS5zaXplcyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDMwNzIwLCAiZW5kIjogMzA3MzgsICJ2bmFtZSI6
IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nl
c3Npb24ubW9qb20uQ2hhcHRlckluZm9ybWF0aW9uIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9n
ZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogMzQ3MjgsICJl
bmQiOiAzNDczMywgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hy
b21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJz
aWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5DaGFwdGVySW5mb3JtYXRpb24udGl0bGUi
fSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAiYmVnaW4iOiAzNDgyNywgImVuZCI6IDM0ODM2LCAidm5hbWUiOiB7Imxhbmd1YWdl
IjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFy
Y2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9t
LkNoYXB0ZXJJbmZvcm1hdGlvbi5zdGFydFRpbWUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dl
bmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiAzNDk1MSwgImVu
ZCI6IDM0OTU4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJv
bWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNp
Z25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLkNoYXB0ZXJJbmZvcm1hdGlvbi5hcnR3b3Jr
In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9k
ZWZpbmVzIiwgImJlZ2luIjogMzYwMTAsICJlbmQiOiAzNjAyMywgInZuYW1lIjogeyJsYW5ndWFn
ZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2Vh
cmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pv
bS5NZWRpYU1ldGFkYXRhIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNDAxNjYsICJlbmQiOiA0MDE3MSwgInZu
YW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVk
aWFfc2Vzc2lvbi5tb2pvbS5NZWRpYU1ldGFkYXRhLnRpdGxlIn0sICJlZGdlIjogIiUva3l0aGUv
ZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNDAy
NTYsICJlbmQiOiA0MDI2MiwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMi
OiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFp
biIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYU1ldGFkYXRhLmFydGlz
dCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3Jf
ZGVmaW5lcyIsICJiZWdpbiI6IDQwMzQ2LCAiZW5kIjogNDAzNTEsICJ2bmFtZSI6IHsibGFuZ3Vh
Z2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNl
YXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9q
b20uTWVkaWFNZXRhZGF0YS5hbGJ1bSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVz
In0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDQwNDQyLCAiZW5kIjogNDA0
NTQsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdv
b2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJl
IjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFNZXRhZGF0YS5zb3VyY2VfdGl0bGUifSwgImVk
Z2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMi
LCAiYmVnaW4iOiA0MDU4OCwgImVuZCI6IDQwNTk2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1v
am9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hy
b21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlh
TWV0YWRhdGEuY2hhcHRlcnMifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA0MTYzMSwgImVuZCI6IDQxNjQ3LCAi
dm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJt
ZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhSW1hZ2VCaXRtYXAifSwgImVkZ2UiOiAiJS9reXRoZS9l
ZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA0NTY3
OCwgImVuZCI6IDQ1NjgzLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6
ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWlu
IiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhSW1hZ2VCaXRtYXAud2lk
dGgifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9y
X2RlZmluZXMiLCAiYmVnaW4iOiA0NTc2MiwgImVuZCI6IDQ1NzY4LCAidm5hbWUiOiB7Imxhbmd1
YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVz
ZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1v
am9tLk1lZGlhSW1hZ2VCaXRtYXAuaGVpZ2h0In0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5l
cmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNDU4NjQsICJlbmQi
OiA0NTg3NCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21p
dW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWdu
YXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYUltYWdlQml0bWFwLnBpeGVsX2RhdGEi
fSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2Rl
ZmluZXMiLCAiYmVnaW4iOiA0NTk3NSwgImVuZCI6IDQ1OTg1LCAidm5hbWUiOiB7Imxhbmd1YWdl
IjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFy
Y2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9t
Lk1lZGlhSW1hZ2VCaXRtYXAuY29sb3JfdHlwZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDQ3MDI5LCAiZW5k
IjogNDcwNDIsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2ln
bmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFQb3NpdGlvbiJ9LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdp
biI6IDUxMDk0LCAiZW5kIjogNTExMDcsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9z
cmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFQb3NpdGlv
bi5wbGF5YmFja19yYXRlIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0
eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNTExOTUsICJlbmQiOiA1MTIwMywgInZu
YW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVk
aWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVBvc2l0aW9uLmR1cmF0aW9uIn0sICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjog
NTEyOTEsICJlbmQiOiA1MTI5OSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8v
bWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVBvc2l0aW9uLnBv
c2l0aW9uIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNTEzOTYsICJlbmQiOiA1MTQxMywgInZuYW1lIjogeyJs
YW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
b2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lv
bi5tb2pvbS5NZWRpYVBvc2l0aW9uLmxhc3RfdXBkYXRlZF90aW1lIn0sICJlZGdlIjogIiUva3l0
aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjog
NTE0OTIsICJlbmQiOiA1MTUwNCwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3Jw
dXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8v
bWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVBvc2l0aW9uLmVu
ZF9vZl9tZWRpYSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6
ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDUyNTQ1LCAiZW5kIjogNTI1NjcsICJ2bmFtZSI6
IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5j
b20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nl
c3Npb24ubW9qb20uUmVtb3RlUGxheWJhY2tNZXRhZGF0YSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2Vk
Z2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDU3MTQw
LCAiZW5kIjogNTcxNTEsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjog
ImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4i
LCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uUmVtb3RlUGxheWJhY2tNZXRhZGF0
YS52aWRlb19jb2RlYyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlw
ZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDU3MjQ1LCAiZW5kIjogNTcyNTYsICJ2bmFt
ZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJj
ZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlh
X3Nlc3Npb24ubW9qb20uUmVtb3RlUGxheWJhY2tNZXRhZGF0YS5hdWRpb19jb2RlYyJ9LCAiZWRn
ZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIs
ICJiZWdpbiI6IDU3MzU2LCAiZW5kIjogNTczODAsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9q
b20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJv
bWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uUmVtb3Rl
UGxheWJhY2tNZXRhZGF0YS5yZW1vdGVfcGxheWJhY2tfZGlzYWJsZWQifSwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4i
OiA1NzQ3OSwgImVuZCI6IDU3NTAyLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3Jj
Ly9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLlJlbW90ZVBsYXliYWNr
TWV0YWRhdGEucmVtb3RlX3BsYXliYWNrX3N0YXJ0ZWQifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdl
L2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA1NzYxMiwg
ImVuZCI6IDU3NjI0LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJj
aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwg
InNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLlJlbW90ZVBsYXliYWNrTWV0YWRhdGEu
dW51c2VkX2ZpZWxkIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBl
IjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNTc3MTgsICJlbmQiOiA1NzczNiwgInZuYW1l
IjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNl
LmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFf
c2Vzc2lvbi5tb2pvbS5SZW1vdGVQbGF5YmFja01ldGFkYXRhLmlzX2VuY3J5cHRlZF9tZWRpYSJ9
LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVm
aW5lcyIsICJiZWdpbiI6IDU4ODA3LCAiZW5kIjogNTg4MjMsICJ2bmFtZSI6IHsibGFuZ3VhZ2Ui
OiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJj
aC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20u
TWVkaWFTZXNzaW9uSW5mbyJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsi
dHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDU5MTE0LCAiZW5kIjogNTkxMjYsICJ2
bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNv
dXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1l
ZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uSW5mby5TZXNzaW9uU3RhdGUifSwgImVkZ2Ui
OiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAi
YmVnaW4iOiA2OTY2MywgImVuZCI6IDY5NjY4LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9t
IiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21p
dW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vz
c2lvbkluZm8uc3RhdGUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5
cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA2OTc0OCwgImVuZCI6IDY5NzU4LCAidm5h
bWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3Vy
Y2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRp
YV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbkluZm8uZm9yY2VfZHVjayJ9LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdp
biI6IDY5ODU2LCAiZW5kIjogNjk4NzAsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9z
cmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9u
SW5mby5wbGF5YmFja19zdGF0ZSJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0s
IHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDY5OTU1LCAiZW5kIjogNjk5NzAs
ICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjog
Im1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uSW5mby5pc19jb250cm9sbGFibGUifSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAiYmVnaW4iOiA3MDA3MSwgImVuZCI6IDcwMTAyLCAidm5hbWUiOiB7Imxhbmd1YWdlIjog
Im1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gv
Y2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1l
ZGlhU2Vzc2lvbkluZm8ucHJlZmVyX3N0b3BfZm9yX2dhaW5fZm9jdXNfbG9zcyJ9LCAiZWRnZSI6
ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJi
ZWdpbiI6IDcwMTg0LCAiZW5kIjogNzAxOTYsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20i
LCAiY29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1
bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNz
aW9uSW5mby5pc19zZW5zaXRpdmUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9
LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA3MDMxMiwgImVuZCI6IDcwMzM2
LCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29n
bGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6
ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbkluZm8ucGljdHVyZV9pbl9waWN0dXJl
X3N0YXRlIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifSwgeyJ0eXBlIjogImFu
Y2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNzA0NTAsICJlbmQiOiA3MDQ3OCwgInZuYW1lIjogeyJs
YW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j
b2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1cmUiOiAibWVkaWFfc2Vzc2lv
bi5tb2pvbS5NZWRpYVNlc3Npb25JbmZvLmRlcHJlY2F0ZWRfYXVkaW9fdmlkZW9fc3RhdGUifSwg
ImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmlu
ZXMiLCAiYmVnaW4iOiA3MDU4MywgImVuZCI6IDcwNTk2LCAidm5hbWUiOiB7Imxhbmd1YWdlIjog
Im1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gv
Y2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1l
ZGlhU2Vzc2lvbkluZm8uYXVkaW9fc2lua19pZCJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2Vu
ZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDcwNzI4LCAiZW5k
IjogNzA3NDYsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9t
aXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2ln
bmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uSW5mby5hdWRpb192aWRl
b19zdGF0ZXMifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAi
YW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA3MDg0MywgImVuZCI6IDcwODU5LCAidm5hbWUiOiB7
Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29t
L2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNz
aW9uLm1vam9tLk1lZGlhU2Vzc2lvbkluZm8ubWljcm9waG9uZV9zdGF0ZSJ9LCAiZWRnZSI6ICIl
L2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdp
biI6IDcwOTQ4LCAiZW5kIjogNzA5NjAsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAi
Y29ycHVzIjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9z
cmMvL21haW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9u
SW5mby5jYW1lcmFfc3RhdGUifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7
InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4iOiA3MTAzNSwgImVuZCI6IDcxMDQwLCAi
dm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVz
b3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJt
ZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbkluZm8ubXV0ZWQifSwgImVkZ2UiOiAiJS9r
eXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5jaG9yX2RlZmluZXMiLCAiYmVnaW4i
OiA3MTEyNiwgImVuZCI6IDcxMTQyLCAidm5hbWUiOiB7Imxhbmd1YWdlIjogIm1vam9tIiwgImNv
cnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2NvZGVzZWFyY2gvY2hyb21pdW0vc3Jj
Ly9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9uLm1vam9tLk1lZGlhU2Vzc2lvbklu
Zm8uaGFzX3ByZXNlbnRhdGlvbiJ9LCAiZWRnZSI6ICIlL2t5dGhlL2VkZ2UvZ2VuZXJhdGVzIn0s
IHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDcxMjU3LCAiZW5kIjogNzEyODEs
ICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVzIjogImNocm9taXVtLmdvb2ds
ZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21haW4iLCAic2lnbmF0dXJlIjog
Im1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uSW5mby5yZW1vdGVfcGxheWJhY2tfbWV0
YWRhdGEifSwgImVkZ2UiOiAiJS9reXRoZS9lZGdlL2dlbmVyYXRlcyJ9LCB7InR5cGUiOiAiYW5j
aG9yX2RlZmluZXMiLCAiYmVnaW4iOiA3MTM2NCwgImVuZCI6IDcxMzc3LCAidm5hbWUiOiB7Imxh
bmd1YWdlIjogIm1vam9tIiwgImNvcnB1cyI6ICJjaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nv
ZGVzZWFyY2gvY2hyb21pdW0vc3JjLy9tYWluIiwgInNpZ25hdHVyZSI6ICJtZWRpYV9zZXNzaW9u
Lm1vam9tLk1lZGlhU2Vzc2lvbkluZm8uaGlkZV9tZXRhZGF0YSJ9LCAiZWRnZSI6ICIlL2t5dGhl
L2VkZ2UvZ2VuZXJhdGVzIn0sIHsidHlwZSI6ICJhbmNob3JfZGVmaW5lcyIsICJiZWdpbiI6IDcx
NDcyLCAiZW5kIjogNzE0OTcsICJ2bmFtZSI6IHsibGFuZ3VhZ2UiOiAibW9qb20iLCAiY29ycHVz
IjogImNocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY29kZXNlYXJjaC9jaHJvbWl1bS9zcmMvL21h
aW4iLCAic2lnbmF0dXJlIjogIm1lZGlhX3Nlc3Npb24ubW9qb20uTWVkaWFTZXNzaW9uSW5mby5p
Z25vcmVfZm9yX2FjdGl2ZV9zZXNzaW9uIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0
ZXMifSwgeyJ0eXBlIjogImFuY2hvcl9kZWZpbmVzIiwgImJlZ2luIjogNzE1OTMsICJlbmQiOiA3
MTYxOSwgInZuYW1lIjogeyJsYW5ndWFnZSI6ICJtb2pvbSIsICJjb3JwdXMiOiAiY2hyb21pdW0u
Z29vZ2xlc291cmNlLmNvbS9jb2Rlc2VhcmNoL2Nocm9taXVtL3NyYy8vbWFpbiIsICJzaWduYXR1
cmUiOiAibWVkaWFfc2Vzc2lvbi5tb2pvbS5NZWRpYVNlc3Npb25JbmZvLm1lZXRzX3Zpc2liaWxp
dHlfdGhyZXNob2xkIn0sICJlZGdlIjogIiUva3l0aGUvZWRnZS9nZW5lcmF0ZXMifV19
*/