From f7e818940ce9ff19d59728782285d9ea184f65a3 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Fri, 13 Jun 2025 12:47:12 -0400 Subject: [PATCH 01/20] feat: COS TF modules --- .gitignore | 29 + terraform/modules/aws-infra/README.md | 131 ++++ terraform/modules/aws-infra/justfile | 39 ++ terraform/modules/aws-infra/main.tf | 621 ++++++++++++++++++ terraform/modules/aws-infra/outputs.tf | 29 + terraform/modules/aws-infra/variables.tf | 23 + terraform/modules/aws-infra/versions.tf | 13 + terraform/modules/cos-lite/README.md | 46 ++ terraform/modules/cos-lite/main.tf | 384 +++++++++++ terraform/modules/cos-lite/outputs.tf | 27 + terraform/modules/cos-lite/variables.tf | 16 + terraform/modules/cos-lite/versions.tf | 9 + terraform/modules/cos/README.md | 510 ++++++++++++++ terraform/modules/cos/main.tf | 607 +++++++++++++++++ terraform/modules/cos/outputs.tf | 26 + terraform/modules/cos/variables.tf | 266 ++++++++ terraform/modules/cos/versions.tf | 9 + terraform/modules/loki/README.md | 59 ++ terraform/modules/loki/main.tf | 151 +++++ terraform/modules/loki/outputs.tf | 30 + terraform/modules/loki/variables.tf | 128 ++++ terraform/modules/loki/versions.tf | 9 + terraform/modules/mimir/README.md | 60 ++ terraform/modules/mimir/main.tf | 152 +++++ terraform/modules/mimir/outputs.tf | 31 + terraform/modules/mimir/variables.tf | 129 ++++ terraform/modules/mimir/versions.tf | 9 + terraform/modules/minio/main.tf | 43 ++ terraform/modules/minio/outputs.tf | 4 + .../modules/minio/scripts/s3management.sh | 112 ++++ terraform/modules/minio/variables.tf | 47 ++ terraform/modules/minio/version.tf | 9 + terraform/modules/tempo/README.md | 63 ++ terraform/modules/tempo/main.tf | 247 +++++++ terraform/modules/tempo/outputs.tf | 33 + terraform/modules/tempo/variables.tf | 176 +++++ terraform/modules/tempo/versions.tf | 9 + .../hcl-generator/generate_integrations.py | 116 ++++ 38 files changed, 4402 insertions(+) create mode 100644 terraform/modules/aws-infra/README.md create mode 100644 terraform/modules/aws-infra/justfile create mode 100644 terraform/modules/aws-infra/main.tf create mode 100644 terraform/modules/aws-infra/outputs.tf create mode 100644 terraform/modules/aws-infra/variables.tf create mode 100644 terraform/modules/aws-infra/versions.tf create mode 100644 terraform/modules/cos-lite/README.md create mode 100644 terraform/modules/cos-lite/main.tf create mode 100644 terraform/modules/cos-lite/outputs.tf create mode 100644 terraform/modules/cos-lite/variables.tf create mode 100644 terraform/modules/cos-lite/versions.tf create mode 100644 terraform/modules/cos/README.md create mode 100644 terraform/modules/cos/main.tf create mode 100644 terraform/modules/cos/outputs.tf create mode 100644 terraform/modules/cos/variables.tf create mode 100644 terraform/modules/cos/versions.tf create mode 100644 terraform/modules/loki/README.md create mode 100644 terraform/modules/loki/main.tf create mode 100644 terraform/modules/loki/outputs.tf create mode 100644 terraform/modules/loki/variables.tf create mode 100644 terraform/modules/loki/versions.tf create mode 100644 terraform/modules/mimir/README.md create mode 100644 terraform/modules/mimir/main.tf create mode 100644 terraform/modules/mimir/outputs.tf create mode 100644 terraform/modules/mimir/variables.tf create mode 100644 terraform/modules/mimir/versions.tf create mode 100644 terraform/modules/minio/main.tf create mode 100644 terraform/modules/minio/outputs.tf create mode 100755 terraform/modules/minio/scripts/s3management.sh create mode 100644 terraform/modules/minio/variables.tf create mode 100644 terraform/modules/minio/version.tf create mode 100644 terraform/modules/tempo/README.md create mode 100644 terraform/modules/tempo/main.tf create mode 100644 terraform/modules/tempo/outputs.tf create mode 100644 terraform/modules/tempo/variables.tf create mode 100644 terraform/modules/tempo/versions.tf create mode 100644 terraform/scripts/hcl-generator/generate_integrations.py diff --git a/.gitignore b/.gitignore index f641208b..21f514e7 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,32 @@ docs/.DS_Store docs/__pycache__ docs/.idea/ docs/.vscode/ + +# Terraform +**/.terraform/* +*.tfstate +*.tfstate.* +*.tfplan +*.backup +*.bak +crash.log +crash.*.log + +# Exclude all .tfvars files, which are likely to contain sensitive data, such as +# password, private keys, and other secrets. These should not be part of version +# control as they are data points which are potentially sensitive and subject +# to change depending on the environment. +*.tfvars +*.tfvars.json + +# Ignore override files as they are usually used to override resources locally and so +# are not checked in +override.tf +override.tf.json +*_override.tf +*_override.tf.json + +# Ignore CLI configuration files +.terraformrc +terraform.rc +.terraform.lock.hcl diff --git a/terraform/modules/aws-infra/README.md b/terraform/modules/aws-infra/README.md new file mode 100644 index 00000000..c36c58af --- /dev/null +++ b/terraform/modules/aws-infra/README.md @@ -0,0 +1,131 @@ +# From Zero to COS: AWS Provisioning & Deployment + +This directory contains Terraform modules for automating the process of bootstrapping a fresh AWS account to a fully running instance of COS deployed on a 3-node EKS cluster. + + +## Prerequisites + +Make sure you have the following installed: + +- [Terraform](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) >= v1.10.4 +- [AWS CLI](https://github.com/aws/aws-cli) >= 2.26.7 +- [Juju](https://snapcraft.io/juju) >= 3.0.3 +- [Just](https://github.com/casey/just) >= 1.40.0 + +### AWS Credentials Setup + +Before running any commands, ensure your AWS credentials are configured on the host: + +You can do this using one of the following methods: + +- [Environment variables](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-envvars.html) +- [Credentials file](https://docs.aws.amazon.com/cli/v1/userguide/cli-configure-files.html) + +--- + + +## Usage + +### Bootstrap AWS infrastructure + Juju controller: +In order to provision the AWS infrastructure required for COS, create a `main.tf` file with the following content. + +```hcl +module "aws_infra" { + source = "git::https://github.com/canonical/observability//terraform/modules/aws-infra" + region = var.region + cos_cloud_name = var.cos_cloud_name + cos_controller_name = var.cos_controller_name + cos_model_name = var.cos_model_name +} + +variable "region" { + description = "The AWS region where the resources will be provisioned." + type = string +} + +variable "cos_cloud_name" { + description = "The name to assign to the Kubernetes cloud when running 'juju add-k8s'." + type = string + default = "cos-cloud" +} + +variable "cos_controller_name" { + description = "The name to assign to the Juju controller that will manage COS." + type = string + default = "cos-controller" +} + +variable "cos_model_name" { + description = "The name of the Juju model where COS will be deployed." + type = string + default = "cos" +} + +``` +Then, create a `terraform.tfvars` file with the following content: + +```hcl +region = "" +cos_cloud_name = "" +cos_controller_name = "" +cos_model_name = "" +``` +Then, use terraform to deploy the module: +```bash +terraform init +terraform apply -var-file=terraform.tfvars +``` +### Full bootstrap: go from zero to COS: + +You can fully bootstrap AWS infra and COS in one of two ways: +#### Option 1: Manual 2-Step Process +1. [Bootstrap AWS infra](#bootstrap-aws-infrastructure--juju-controller) + +Set up the necessary infrastructure and Juju controller on AWS using the `aws-infra` module. + +2. [Deploy COS on the freshly created infra](../cos/README.md#deploy-cos-on-aws-eks) + +Use the output from step 1 to deploy COS on top of your provisioned infrastructure using the `cos` module. + +#### Option 2: Automated via `just` + +Clone this repository and run the appropriate `just` command to fully automate the bootstrap process. +This command handles: + +1. Bootstrapping the AWS infrastructure +2. Piping all required input to deploy COS on top + + +Create a `terraform.tfvars` file with the following content: +```hcl +region = "" +# Add other optional variables below +cos_cloud_name = "" +cos_controller_name = "" +cos_model_name = "" +``` +Then, run `just apply` + +--- + + +## Inputs + +| Variable Name | Description | +|----------|-------------------------| +| region | AWS region to provision resources in | +| cos_cloud_name | The name to assign to the Kubernetes cloud when running 'juju add-k8s' | +| cos_controller_name | The name to assign to the Juju controller that will manage COS | +| cos_model_name | The name of the Juju model where COS will be deployed | + +--- + +## Available Commands (via `just`) + +- `just init` – Initialize Terraform for AWS infra and COS +- `just apply` – Provision AWS infrastructure, then pipe the necessary outputs to provision COS on top +- `just destroy` – Tear down everything (COS + infra) + +--- + + diff --git a/terraform/modules/aws-infra/justfile b/terraform/modules/aws-infra/justfile new file mode 100644 index 00000000..a7fe6021 --- /dev/null +++ b/terraform/modules/aws-infra/justfile @@ -0,0 +1,39 @@ +set quiet # Recipes are silent by default + +init: + terraform init + terraform -chdir=../cos init + +apply: init apply_infra apply_cos + +destroy: destroy_cos destroy_infra + +apply_infra: + terraform apply + +apply_cos: + terraform -chdir=../cos apply \ + -var="loki_bucket=$(terraform output -raw loki_bucket)" \ + -var="tempo_bucket=$(terraform output -raw tempo_bucket)" \ + -var="mimir_bucket=$(terraform output -raw mimir_bucket)" \ + -var="s3_endpoint=$(terraform output -raw s3_endpoint)" \ + -var="s3_user=$(terraform output -raw s3_user)" \ + -var="s3_password=$(terraform output -raw s3_password)" \ + -var="model_name=$(terraform output -raw cos_model)" \ + -var="ssc_channel=1/edge" \ + -var="cloud=aws" \ + +destroy_infra: + terraform destroy + +destroy_cos: + terraform -chdir=../cos destroy \ + -var="loki_bucket=$(terraform output -raw loki_bucket)" \ + -var="tempo_bucket=$(terraform output -raw tempo_bucket)" \ + -var="mimir_bucket=$(terraform output -raw mimir_bucket)" \ + -var="s3_endpoint=$(terraform output -raw s3_endpoint)" \ + -var="s3_user=$(terraform output -raw s3_user)" \ + -var="s3_password=$(terraform output -raw s3_password)" \ + -var="model_name=$(terraform output -raw cos_model)" \ + -var="ssc_channel=1/edge" \ + -var="cloud=aws" \ diff --git a/terraform/modules/aws-infra/main.tf b/terraform/modules/aws-infra/main.tf new file mode 100644 index 00000000..85350df0 --- /dev/null +++ b/terraform/modules/aws-infra/main.tf @@ -0,0 +1,621 @@ +provider "aws" { + region = var.region +} + +data "aws_availability_zones" "available" { + state = "available" +} +locals { + cos-cluster-name = "cos-cluster" +} + +## ==================================================== +## Network infra +## ==================================================== +resource "aws_vpc" "main" { + cidr_block = "10.0.0.0/16" + enable_dns_hostnames = true + enable_dns_support = true +} + +# To allow workloads running on ec2 nodes to access the public internet (e.g: to pull OCI images) +resource "aws_internet_gateway" "internet_gateway" { + vpc_id = aws_vpc.main.id +} + +# To deploy a 3-node eks cluster, it's recommended to spread them across at least 2 subnets in different AZs. +resource "aws_subnet" "public_subnet_1" { + vpc_id = aws_vpc.main.id + cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, 1) + availability_zone = element(data.aws_availability_zones.available.names, 0) + map_public_ip_on_launch = true + tags = { + "kubernetes.io/role/elb" = "1" + } +} + +resource "aws_subnet" "public_subnet_2" { + vpc_id = aws_vpc.main.id + cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, 2) + availability_zone = element(data.aws_availability_zones.available.names, 1) + map_public_ip_on_launch = true + tags = { + "kubernetes.io/role/elb" = "1" + } +} + +resource "aws_route_table" "public_rt" { + vpc_id = aws_vpc.main.id + route { + cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.internet_gateway.id + } +} + + +resource "aws_route_table_association" "public_rta_1" { + subnet_id = aws_subnet.public_subnet_1.id + route_table_id = aws_route_table.public_rt.id +} + +resource "aws_route_table_association" "public_rta_2" { + subnet_id = aws_subnet.public_subnet_2.id + route_table_id = aws_route_table.public_rt.id +} + +## ==================================================== +## Kubernetes infra +## ==================================================== + +# a role that eks cluster can assume +resource "aws_iam_role" "cos_cluster_role" { + name = "cos-cluster-role" + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Effect = "Allow" + Principal = { + Service = ["eks.amazonaws.com"] + } + Action = [ + "sts:AssumeRole", + "sts:TagSession" + ] + } + ] + }) +} + +# eks role needs the below permissions +resource "aws_iam_role_policy_attachment" "cos_cluster_policy" { + role = aws_iam_role.cos_cluster_role.name + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy" +} +resource "aws_iam_role_policy_attachment" "cos_cluster_network_policy" { + role = aws_iam_role.cos_cluster_role.name + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSNetworkingPolicy" +} +resource "aws_iam_role_policy_attachment" "cos_cluster_lb_policy" { + role = aws_iam_role.cos_cluster_role.name + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSLoadBalancingPolicy" +} +resource "aws_iam_role_policy_attachment" "cos_cluster_storage_policy" { + role = aws_iam_role.cos_cluster_role.name + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSBlockStoragePolicy" +} +resource "aws_iam_role_policy_attachment" "cos_cluster_compute_policy" { + role = aws_iam_role.cos_cluster_role.name + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSComputePolicy" +} + +resource "aws_eks_cluster" "cos_cluster" { + name = local.cos-cluster-name + bootstrap_self_managed_addons = false + access_config { + authentication_mode = "API" + } + role_arn = aws_iam_role.cos_cluster_role.arn + compute_config { + enabled = true + } + + kubernetes_network_config { + elastic_load_balancing { + enabled = true + } + } + + storage_config { + block_storage { + enabled = true + } + } + + vpc_config { + subnet_ids = [ + aws_subnet.public_subnet_1.id, + aws_subnet.public_subnet_2.id, + ] + } + + depends_on = [ + aws_iam_role_policy_attachment.cos_cluster_policy, + aws_iam_role_policy_attachment.cos_cluster_network_policy, + aws_iam_role_policy_attachment.cos_cluster_lb_policy, + aws_iam_role_policy_attachment.cos_cluster_storage_policy, + aws_iam_role_policy_attachment.cos_cluster_compute_policy, + aws_route_table.public_rt, + aws_internet_gateway.internet_gateway, + ] +} + +# enable network communication +resource "aws_eks_addon" "eks_kube_proxy_addon" { + cluster_name = aws_eks_cluster.cos_cluster.name + addon_name = "kube-proxy" +} + +# enable name resolution for all pods +resource "aws_eks_addon" "eks_core_dns_addon" { + cluster_name = aws_eks_cluster.cos_cluster.name + addon_name = "coredns" + depends_on = [aws_eks_node_group.cos_workers] +} + +# enables assigning a private IPv4 from your VPC to each pod. +resource "aws_eks_addon" "eks_vpc_cni_addon" { + cluster_name = aws_eks_cluster.cos_cluster.name + addon_name = "vpc-cni" +} + +# provides the ability to manage credentials for your application +# needed for EBS CSI driver +resource "aws_eks_addon" "eks_pod_identity_addon" { + cluster_name = aws_eks_cluster.cos_cluster.name + addon_name = "eks-pod-identity-agent" +} + +resource "aws_iam_role" "eks_ebs_role" { + name = "eks-ebs-csi-driver-role" + + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Effect = "Allow" + Principal = { + Service = "pods.eks.amazonaws.com" + } + Action = ["sts:AssumeRole", "sts:TagSession"] + } + ] + }) +} +resource "aws_iam_role_policy_attachment" "eks_ebs_policy" { + role = aws_iam_role.eks_ebs_role.name + policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy" +} + + +# enable Amazon EBS CSI driver. +# Give access to "ebs-csi-controller-sa" SA to provision and manage Amazon EBS volumes. +resource "aws_eks_addon" "eks_ebs_addon" { + cluster_name = aws_eks_cluster.cos_cluster.name + addon_name = "aws-ebs-csi-driver" + pod_identity_association { + role_arn = aws_iam_role.eks_ebs_role.arn + service_account = "ebs-csi-controller-sa" + } + depends_on = [aws_eks_node_group.cos_workers] +} + +# Worker nodes need the below permissions +resource "aws_iam_role" "workers_role" { + name = "workers-role" + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Effect = "Allow" + Principal = { + Service = "ec2.amazonaws.com" + } + Action = "sts:AssumeRole" + } + ] + }) +} + +resource "aws_iam_role_policy_attachment" "workers_nodes_policy" { + role = aws_iam_role.workers_role.name + policy_arn = "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy" +} + +resource "aws_iam_role_policy_attachment" "workers_cni_policy" { + role = aws_iam_role.workers_role.name + policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy" +} + +resource "aws_iam_role_policy_attachment" "workers_registry_policy" { + role = aws_iam_role.workers_role.name + policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly" +} + +# create 3 AWS-managed worker nodes +resource "aws_eks_node_group" "cos_workers" { + cluster_name = aws_eks_cluster.cos_cluster.name + node_group_name = "cos-workers" + node_role_arn = aws_iam_role.workers_role.arn + subnet_ids = [ + aws_subnet.public_subnet_1.id, + aws_subnet.public_subnet_2.id, + ] + scaling_config { + min_size = 3 + max_size = 3 + desired_size = 3 + } + disk_size = 50 + instance_types = [ + "t3.xlarge" + ] + ami_type = "AL2_x86_64" + + depends_on = [ + aws_iam_role_policy_attachment.workers_nodes_policy, + aws_iam_role_policy_attachment.workers_registry_policy, + aws_iam_role_policy_attachment.workers_cni_policy, + aws_eks_cluster.cos_cluster, + ] +} + +## ==================================================== +## Bootstrap Juju +## ==================================================== + +# Authorise the current user to access the K8s cluster resources (i.e K8s RBAC) +# needed for a later step (i.e juju add-k8s) +data "aws_caller_identity" "admin" {} + +data "aws_iam_session_context" "admin_iam" { + arn = data.aws_caller_identity.admin.arn +} + +resource "aws_eks_access_policy_association" "admin_eks_admin_policy" { + cluster_name = aws_eks_cluster.cos_cluster.name + policy_arn = "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy" + principal_arn = data.aws_iam_session_context.admin_iam.issuer_arn + access_scope { + type = "cluster" + } +} + +resource "aws_eks_access_policy_association" "admin_eks_cluster_admin_policy" { + cluster_name = aws_eks_cluster.cos_cluster.name + policy_arn = "arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy" + principal_arn = data.aws_iam_session_context.admin_iam.issuer_arn + access_scope { + type = "cluster" + } +} + +resource "aws_eks_access_entry" "admin_access_entry" { + cluster_name = aws_eks_cluster.cos_cluster.name + principal_arn = data.aws_iam_session_context.admin_iam.issuer_arn +} + +# create a role for the juju controller (i.e an ec2 instance) +# with the necessary permissions to manage juju resources that interact with AWS resources. +resource "aws_iam_role" "juju_controller_role" { + name = "juju-controller-role" + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Effect = "Allow" + Principal = { + Service = ["ec2.amazonaws.com"] + } + Action = [ + "sts:AssumeRole", + ] + } + ] + }) + +} + +# permissions needed: https://discourse.charmhub.io/t/juju-aws-permissions/5307 +resource "aws_iam_policy" "juju_controller_policy" { + name = "juju-controller-policy" + + policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + "Sid" : "JujuEC2Actions", + Action = [ + "ec2:AssociateIamInstanceProfile", + "ec2:AttachVolume", + "ec2:AuthoriseSecurityGroupIngress", + "ec2:CreateSecurityGroup", + "ec2:CreateTags", + "ec2:CreateVolume", + "ec2:DeleteSecurityGroup", + "ec2:DeleteVolume", + "ec2:DescribeAccountAttributes", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeIamInstanceProfileAssociations", + "ec2:DescribeInstances", + "ec2:DescribeInstanceTypeOfferings", + "ec2:DescribeInstanceTypes", + "ec2:DescribeInternetGateways", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeRouteTables", + "ec2:DescribeSecurityGroups", + "ec2:DescribeSpotPriceHistory", + "ec2:DescribeSubnets", + "ec2:DescribeVolumes", + "ec2:DescribeVpcs", + "ec2:DetachVolume", + "ec2:RevokeSecurityGroupIngress", + "ec2:RunInstances", + "ec2:TerminateInstances" + ] + Effect = "Allow" + Resource = "*" + }, + { + "Sid" : "JujuIAMActions", + "Effect" : "Allow", + "Action" : [ + "iam:AddRoleToInstanceProfile", + "iam:CreateInstanceProfile", + "iam:CreateRole", + "iam:DeleteInstanceProfile", + "iam:DeleteRole", + "iam:DeleteRolePolicy", + "iam:GetInstanceProfile", + "iam:GetRole", + "iam:ListInstanceProfiles", + "iam:ListRolePolicies", + "iam:ListRoles", + "iam:PassRole", + "iam:PutRolePolicy", + "iam:RemoveRoleFromInstanceProfile" + ], + "Resource" : "*" + }, + { + "Sid" : "JujuSSMActions", + "Effect" : "Allow", + "Action" : [ + "ssm:ListInstanceAssociations", + "ssm:UpdateInstanceInformation" + ], + "Resource" : "*" + } + + ] + }) +} + +resource "aws_iam_role_policy_attachment" "juju_controller_policy_attach" { + role = aws_iam_role.juju_controller_role.name + policy_arn = aws_iam_policy.juju_controller_policy.arn +} + +resource "aws_iam_instance_profile" "juju_ctrl_instance_profile" { + name = "juju-ctrl-instance-profile" + role = aws_iam_role.juju_controller_role.name +} + +# Authorise the juju controller to access the K8s cluster resources (i.e K8s RBAC) +resource "aws_eks_access_policy_association" "ctrl_access_eks_admin" { + cluster_name = aws_eks_cluster.cos_cluster.name + policy_arn = "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy" + principal_arn = aws_iam_role.juju_controller_role.arn + + access_scope { + type = "cluster" + } +} + +resource "aws_eks_access_policy_association" "ctrl_access_eks_cluster_admin" { + cluster_name = aws_eks_cluster.cos_cluster.name + policy_arn = "arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy" + principal_arn = aws_iam_role.juju_controller_role.arn + + access_scope { + type = "cluster" + } +} + +resource "aws_eks_access_entry" "juju_controller_access_entry" { + cluster_name = aws_eks_cluster.cos_cluster.name + principal_arn = aws_iam_role.juju_controller_role.arn +} + + +# create an IAM user with permissions that can bootstrap a juju controller on aws. +# The managed role used to run this terraform doesn't work for some reason. +resource "aws_iam_user" "juju_bootstrap_user" { + name = "juju-bootstrap" +} + +resource "aws_iam_user_policy" "juju_bootstrap_policy" { + name = "juju-bootstrap-policy" + user = aws_iam_user.juju_bootstrap_user.name + policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Action = [ + "ec2:*", + ] + Effect = "Allow" + Resource = "*" + }, + { + "Effect" : "Allow", + "Action" : [ + "iam:AddRoleToInstanceProfile", + "iam:CreateInstanceProfile", + "iam:CreateRole", + "iam:DeleteInstanceProfile", + "iam:DeleteRole", + "iam:DeleteRolePolicy", + "iam:GetInstanceProfile", + "iam:GetRole", + "iam:ListInstanceProfiles", + "iam:ListRolePolicies", + "iam:ListRoles", + "iam:PassRole", + "iam:PutRolePolicy", + "iam:RemoveRoleFromInstanceProfile" + ], + "Resource" : "*" + }, + ] + }) + +} + +resource "aws_iam_access_key" "juju_bootstrap_access_key" { + user = aws_iam_user.juju_bootstrap_user.name +} + +# to bootstrap a controller on aws, we need to provide the aws credentials +# through a credentials.yaml file +resource "local_sensitive_file" "aws_credentials" { + depends_on = [aws_iam_access_key.juju_bootstrap_access_key] + + content = yamlencode({ + credentials : { + aws : { + bootstrap-juju : { + auth-type : "access-key", + access-key : aws_iam_access_key.juju_bootstrap_access_key.id, + secret-key : aws_iam_access_key.juju_bootstrap_access_key.secret, + } } + } + }) + filename = "${path.root}/.terraform/tmp/credentials.yaml" +} + + +# run local juju commands to bootstrap a juju controller using aws_iam_user.juju_bootstrap_user credentials +# then, when the controller is running, it will use the aws_iam_instance_profile.juju_ctrl_instance_profile +# to give the controller access to manage AWS resources +resource "null_resource" "bootstrap_juju" { + + triggers = { + # uncomment if you need to force destroy then create + # once = timestamp() + cos-controller = var.cos_controller_name + } + + depends_on = [local_sensitive_file.aws_credentials, + aws_eks_node_group.cos_workers, + aws_eks_addon.eks_ebs_addon, + aws_eks_access_entry.juju_controller_access_entry, + aws_eks_access_entry.admin_access_entry, + aws_eks_addon.eks_vpc_cni_addon, + aws_eks_addon.eks_kube_proxy_addon, + aws_eks_addon.eks_core_dns_addon, + aws_eks_addon.eks_pod_identity_addon, + aws_iam_policy.juju_controller_policy, + aws_route_table_association.public_rta_1, + aws_route_table_association.public_rta_2, + aws_eks_access_policy_association.ctrl_access_eks_cluster_admin, + aws_eks_access_policy_association.admin_eks_admin_policy, + aws_iam_role.juju_controller_role, + aws_iam_instance_profile.juju_ctrl_instance_profile, + aws_iam_role_policy_attachment.juju_controller_policy_attach, + aws_iam_role_policy_attachment.eks_ebs_policy, + aws_eks_access_policy_association.ctrl_access_eks_admin, + aws_iam_user_policy.juju_bootstrap_policy, + aws_eks_access_policy_association.admin_eks_cluster_admin_policy, + ] + + provisioner "local-exec" { + when = create + command = <<-EOT + juju remove-credential aws bootstrap-juju --client + juju add-credential aws --client -f ${local_sensitive_file.aws_credentials.filename} + + if ! juju controllers | grep -q '^${var.cos_controller_name}'; then + juju bootstrap --bootstrap-constraints="instance-role=${aws_iam_instance_profile.juju_ctrl_instance_profile.name}" aws/${var.region} ${var.cos_controller_name} --config vpc-id=${aws_vpc.main.id} --config vpc-id-force=true --credential bootstrap-juju + else + echo "controller already exists, skipping bootstrap." + fi + aws eks --region ${var.region} update-kubeconfig --name ${local.cos-cluster-name} + /snap/juju/current/bin/juju add-k8s ${var.cos_cloud_name} --controller ${var.cos_controller_name} + juju add-model ${var.cos_model_name} ${var.cos_cloud_name}/${var.region} + EOT + } + + provisioner "local-exec" { + when = destroy + command = <<-EOT + + if juju controllers | grep -q '^${self.triggers.cos-controller}'; then + juju kill-controller ${self.triggers.cos-controller} --timeout 0 --no-prompt + else + echo "Skipping controller deletion." + fi + EOT + } +} + + +## ==================================================== +## Create S3 buckets +## ==================================================== + +resource "aws_s3_bucket" "tempo_s3" { + bucket = "cos-tempo-bucket" + force_destroy = true +} + +resource "aws_s3_bucket" "loki_s3" { + bucket = "cos-loki-bucket" + force_destroy = true +} + +resource "aws_s3_bucket" "mimir_s3" { + bucket = "cos-mimir-bucket" + force_destroy = true +} + +# currently, our charms require the existence of an S3 access key and secret key +# and we can only obtain them through an IAM user. +# create an IAM user to access the buckets. +# TODO: create 3 IAM users, one for each bucket access +resource "aws_iam_user" "s3_access" { + name = "s3-access" +} + +resource "aws_iam_user_policy" "s3_access_policy" { + name = "s3-access-policy" + user = aws_iam_user.s3_access.name + + policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Action = [ + "s3:*", + ] + Effect = "Allow" + Resource = "*" + }, + ] + }) +} + +resource "aws_iam_access_key" "s3_access_key" { + user = aws_iam_user.s3_access.name +} + diff --git a/terraform/modules/aws-infra/outputs.tf b/terraform/modules/aws-infra/outputs.tf new file mode 100644 index 00000000..c70d423d --- /dev/null +++ b/terraform/modules/aws-infra/outputs.tf @@ -0,0 +1,29 @@ + + +output "loki_bucket" { + value = aws_s3_bucket.loki_s3.bucket +} + +output "mimir_bucket" { + value = aws_s3_bucket.mimir_s3.bucket +} +output "tempo_bucket" { + value = aws_s3_bucket.tempo_s3.bucket +} + +output "s3_endpoint" { + value = "https://s3.${var.region}.amazonaws.com" +} + +output "s3_user" { + value = aws_iam_access_key.s3_access_key.id +} + +output "s3_password" { + value = aws_iam_access_key.s3_access_key.secret + sensitive = true +} + +output "cos_model" { + value = var.cos_model_name +} diff --git a/terraform/modules/aws-infra/variables.tf b/terraform/modules/aws-infra/variables.tf new file mode 100644 index 00000000..0ac2558a --- /dev/null +++ b/terraform/modules/aws-infra/variables.tf @@ -0,0 +1,23 @@ + +variable "region" { + description = "The AWS region where the resources will be provisioned." + type = string +} + +variable "cos_cloud_name" { + description = "The name to assign to the Kubernetes cloud when running 'juju add-k8s'." + type = string + default = "cos-cloud" +} + +variable "cos_controller_name" { + description = "The name to assign to the Juju controller that will manage COS." + type = string + default = "cos-controller" +} + +variable "cos_model_name" { + description = "The name of the Juju model where COS will be deployed." + type = string + default = "cos" +} diff --git a/terraform/modules/aws-infra/versions.tf b/terraform/modules/aws-infra/versions.tf new file mode 100644 index 00000000..ccb1e344 --- /dev/null +++ b/terraform/modules/aws-infra/versions.tf @@ -0,0 +1,13 @@ +terraform { + required_version = ">= 1.5" + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 5.0" + } + null = { + source = "hashicorp/null" + version = "~> 3.0" + } + } +} diff --git a/terraform/modules/cos-lite/README.md b/terraform/modules/cos-lite/README.md new file mode 100644 index 00000000..c99645ae --- /dev/null +++ b/terraform/modules/cos-lite/README.md @@ -0,0 +1,46 @@ +Terraform module for COS solution + +This is a Terraform module facilitating the deployment of COS solution, using the [Terraform juju provider](https://github.com/juju/terraform-provider-juju/). For more information, refer to the provider [documentation](https://registry.terraform.io/providers/juju/juju/latest/docs). + +The COS Lite solution consists of the following Terraform modules: +- [grafana-k8s](https://github.com/canonical/grafana-k8s-operator): Visualization, monitoring, and dashboards. +- [alertmanager-k8s](https://github.com/canonical/alertmanager-k8s-operator): Handles alerts sent by clients applications. +- [prometheus-k8s](https://github.com/canonical/prometheus-k8s-operator/tree/main/terraform/): Backend for metrics +- [loki-k8s](https://github.com/canonical/loki-k8s-operator/tree/main/terraform): Backend for logs +- [self-signed-certificates](https://github.com/canonical/self-signed-certificates-operator): certificates operator to secure traffic with TLS. + +## Requirements + +This module requires a `juju` model to be available. Refer to the [usage section](#usage) below for more details. + +## API + +### Inputs + +The module offers the following configurable inputs: + +| Name | Type | Description | Required | +|--------------|--------|------------------------------------------------------------------------|-------------| +| `channel` | string | Channel that the charms are deployed from | latest/edge | +| `model_name` | string | Name of the model that the charm is deployed on | | +| `use_tls` | bool | Specify whether to use TLS or not for coordinator-worker communication | | + +### Outputs + +Upon application, the module exports the following outputs: + +| Name | Description | +|------------|-----------------------------| +| `app_name` | Application name | +| `provides` | Map of `provides` endpoints | +| `requires` | Map of `requires` endpoints | + +## Usage + + +### Basic usage + +Users should ensure that Terraform is aware of the `juju_model` dependency of the charm module. + +To deploy this module with its needed dependency, you can run `terraform apply -var="model_name=" -auto-approve`. This would deploy all COS HA solution modules in the same model. + diff --git a/terraform/modules/cos-lite/main.tf b/terraform/modules/cos-lite/main.tf new file mode 100644 index 00000000..71331838 --- /dev/null +++ b/terraform/modules/cos-lite/main.tf @@ -0,0 +1,384 @@ +# -------------- # Applications -------------- + +module "ssc" { + count = var.use_tls ? 1 : 0 + source = "git::https://github.com/canonical/self-signed-certificates-operator//terraform" + model = var.model_name + channel = var.channel +} + +module "alertmanager" { + source = "git::https://github.com/canonical/alertmanager-k8s-operator//terraform" + app_name = "alertmanager" + model_name = var.model_name + channel = var.channel +} + +module "catalogue" { + source = "git::https://github.com/canonical/catalogue-k8s-operator//terraform" + app_name = "catalogue" + model_name = var.model_name + channel = var.channel +} + +module "prometheus" { + source = "git::https://github.com/canonical/prometheus-k8s-operator//terraform" + app_name = "prometheus" + model_name = var.model_name + channel = var.channel +} + +module "loki" { + source = "git::https://github.com/canonical/loki-k8s-operator//terraform" + app_name = "loki" + model_name = var.model_name + channel = var.channel +} + +module "grafana" { + source = "git::https://github.com/canonical/grafana-k8s-operator//terraform" + app_name = "grafana" + model_name = var.model_name + channel = var.channel +} + +module "traefik" { + source = "git::https://github.com/canonical/traefik-k8s-operator//terraform" + app_name = "traefik" + model_name = var.model_name + channel = var.channel +} + + +# -------------- # Integrations -------------- + + +# Provided by Alertmanager + +resource "juju_integration" "alertmanager_grafana_dashboards" { + model = var.model_name + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.grafana_dashboard + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_dashboard + } +} + +resource "juju_integration" "alertmanager_prometheus" { + model = var.model_name + + application { + name = module.prometheus.app_name + endpoint = module.prometheus.endpoints.alertmanager + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.alerting + } +} + +resource "juju_integration" "alertmanager_self_monitoring_prometheus" { + model = var.model_name + + application { + name = module.prometheus.app_name + endpoint = module.prometheus.endpoints.metrics_endpoint + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.self_metrics_endpoint + } +} + +resource "juju_integration" "alertmanager_loki" { + model = var.model_name + + application { + name = module.loki.app_name + endpoint = module.loki.endpoints.alertmanager + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.alerting + } +} + + +resource "juju_integration" "grafana_source_alertmanager" { + model = var.model_name + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.grafana_source + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_source + } +} + +# Provided by Grafana + +resource "juju_integration" "grafana_self_monitoring_prometheus" { + model = var.model_name + + application { + name = module.prometheus.app_name + endpoint = module.prometheus.endpoints.metrics_endpoint + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.metrics_endpoint + } +} + + +# Provided by Prometheus + +resource "juju_integration" "prometheus_grafana_dashboards_provider" { + model = var.model_name + + application { + name = module.prometheus.app_name + endpoint = module.prometheus.endpoints.grafana_dashboard + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_dashboard + } +} + +resource "juju_integration" "prometheus_grafana_source" { + model = var.model_name + + application { + name = module.prometheus.app_name + endpoint = module.prometheus.endpoints.grafana_source + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_source + } +} + + + + +# Provided by Loki + +resource "juju_integration" "loki_grafana_dashboards_provider" { + model = var.model_name + + application { + name = module.loki.app_name + endpoint = module.loki.endpoints.grafana_dashboard + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_dashboard + } +} + +resource "juju_integration" "loki_grafana_source" { + model = var.model_name + + application { + name = module.loki.app_name + endpoint = module.loki.endpoints.grafana_source + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_source + } +} + +resource "juju_integration" "loki_self_monitoring_prometheus" { + model = var.model_name + + application { + name = module.prometheus.app_name + endpoint = module.prometheus.endpoints.metrics_endpoint + } + + application { + name = module.loki.app_name + endpoint = module.loki.endpoints.metrics_endpoint + } +} + + +# Provided by Catalogue + +resource "juju_integration" "catalogue_alertmanager" { + model = var.model_name + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.catalogue + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.catalogue + } +} + +resource "juju_integration" "catalogue_grafana" { + model = var.model_name + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.catalogue + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.catalogue + } +} + +resource "juju_integration" "catalogue_prometheus" { + model = var.model_name + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.catalogue + } + + application { + name = module.prometheus.app_name + endpoint = module.prometheus.endpoints.catalogue + } +} + + +# Provided by Traefik + +resource "juju_integration" "alertmanager_ingress" { + model = var.model_name + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.ingress + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.ingress + } +} + + +resource "juju_integration" "catalogue_ingress" { + model = var.model_name + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.ingress + } + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.ingress + } +} + +resource "juju_integration" "grafana_ingress" { + model = var.model_name + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.traefik_route + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.ingress + } +} + +resource "juju_integration" "prometheus_ingress" { + model = var.model_name + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.ingress_per_unit + } + + application { + name = module.prometheus.app_name + endpoint = module.prometheus.endpoints.ingress + } +} + +resource "juju_integration" "loki_ingress" { + model = var.model_name + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.ingress_per_unit + } + + application { + name = module.loki.app_name + endpoint = module.loki.endpoints.ingress + } +} + +resource "juju_integration" "traefik_self_monitoring_prometheus" { + model = var.model_name + + application { + name = module.prometheus.app_name + endpoint = module.prometheus.endpoints.metrics_endpoint + } + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.metrics_endpoint + } +} + +# -------------- # Offers -------------- + +resource "juju_offer" "alertmanager-karma-dashboard" { + name = "alertmanager-karma-dashboard" + model = var.model_name + application_name = module.alertmanager.app_name + endpoint = "karma-dashboard" +} + +resource "juju_offer" "grafana-dashboards" { + name = "grafana-dashboards" + model = var.model_name + application_name = module.grafana.app_name + endpoint = "grafana-dashboard" +} + +resource "juju_offer" "loki-logging" { + name = "loki-logging" + model = var.model_name + application_name = module.loki.app_name + endpoint = "logging" +} + +resource "juju_offer" "prometheus-receive-remote-write" { + name = "prometheus-receive-remote-write" + model = var.model_name + application_name = module.prometheus.app_name + endpoint = "receive-remote-write" +} diff --git a/terraform/modules/cos-lite/outputs.tf b/terraform/modules/cos-lite/outputs.tf new file mode 100644 index 00000000..06e50fc7 --- /dev/null +++ b/terraform/modules/cos-lite/outputs.tf @@ -0,0 +1,27 @@ +output "app_names" { + value = merge( + { + alertmanager = module.alertmanager.app_name, + catalogue = module.catalogue.app_name, + grafana = module.grafana.app_name, + loki = module.loki.app_name, + prometheus = module.prometheus.app_name, + traefik = module.traefik.app_name, + } + ) +} + +output "grafana" { + description = "Outputs from the Grafana module" + value = module.grafana +} + +output "prometheus" { + description = "Outputs from the prometheus module" + value = module.prometheus +} + +output "loki" { + description = "Outputs from the Loki module" + value = module.loki +} diff --git a/terraform/modules/cos-lite/variables.tf b/terraform/modules/cos-lite/variables.tf new file mode 100644 index 00000000..c8f3a356 --- /dev/null +++ b/terraform/modules/cos-lite/variables.tf @@ -0,0 +1,16 @@ +variable "channel" { + description = "Charms channel" + type = string + default = "latest/edge" +} + +variable "model_name" { + description = "Model name" + type = string +} + +variable "use_tls" { + description = "Specify whether to use TLS or not for coordinator-worker communication. By default, TLS is enabled through self-signed-certificates" + type = bool + default = true +} diff --git a/terraform/modules/cos-lite/versions.tf b/terraform/modules/cos-lite/versions.tf new file mode 100644 index 00000000..77b64403 --- /dev/null +++ b/terraform/modules/cos-lite/versions.tf @@ -0,0 +1,9 @@ +terraform { + required_version = ">= 1.5" + required_providers { + juju = { + source = "juju/juju" + version = "~> 0.14" + } + } +} \ No newline at end of file diff --git a/terraform/modules/cos/README.md b/terraform/modules/cos/README.md new file mode 100644 index 00000000..e0387019 --- /dev/null +++ b/terraform/modules/cos/README.md @@ -0,0 +1,510 @@ +# Terraform module for COS solution + +This is a Terraform module facilitating the deployment of COS solution, using the [Terraform juju provider](https://github.com/juju/terraform-provider-juju/). For more information, refer to the provider [documentation](https://registry.terraform.io/providers/juju/juju/latest/docs). + +The HA solution consists of the following Terraform modules: +- [alertmanager-k8s](https://github.com/canonical/alertmanager-k8s-operator/tree/main/terraform): Handles alerts sent by clients applications. +- [grafana-k8s](https://github.com/canonical/grafana-k8s-operator/tree/main/terraform): Visualization, monitoring, and dashboards. +- [grafana-agent-k8s](https://github.com/canonical/grafana-agent-k8s-operator/tree/main/terraform): Aggregate and send telemetry data. +- [loki](https://github.com/canonical/observability/tree/main/terraform/modules/loki): Backend for logs. +- [mimir](https://github.com/canonical/observability/tree/main/terraform/modules/mimir): Backend for metrics. +- [tempo](https://github.com/canonical/observability/tree/main/terraform/modules/tempo): Backend for traces. +- [s3-integrator](https://github.com/canonical/s3-integrator): facade for S3 storage configurations. +- [self-signed-certificates](https://github.com/canonical/self-signed-certificates-operator/tree/main/terraform): certificates operator to secure traffic with TLS. +- [traefik](https://github.com/canonical/traefik-k8s-operator/tree/main/terraform): ingress. + +This Terraform module deploys COS with Mimir, Tempo and Loki in their microservices modes, and other charms in monolithic mode. + +> [!NOTE] +> `s3-integrator` itself doesn't act as an S3 object storage system. For the HA solution to be functional, `s3-integrator` needs to point to an S3-like storage. See [this guide](https://discourse.charmhub.io/t/cos-lite-docs-set-up-minio/15211) to learn how to connect to an S3-like storage for traces. + +## Requirements +This module requires a `juju` model to be available. Refer to the [usage section](#usage) below for more details. + +## API + +### Inputs +The module offers the following configurable inputs: + +| Name | Type | Description | Default | +| - | - |----------------------------------------------------------------| - | +| `channel` | string | Channel that all the charms (unless overwritten) are deployed from | +| `ssc_channel` | string | Channel that the self-signed certificates charm is deployed from | latest/edge | +| `traefik_channel` | string | Channel that the traefik charm is deployed from | latest/edge | +| `model` | string | Reference to an existing model resource or data source for the model to deploy to | +| `use_tls` | bool | Specify whether to use TLS or not for in-cluster communication | +| `cloud` | string | Kubernetes cloud or environment where this COS module will be deployed | self-managed | +| `loki_coordinator_units` | number | Number of Loki coordinator units | +| `loki_backend_units` | number | Number of Loki worker units with `backend` role | +| `loki_read_units` | number | Number of Loki worker units with `read` role | +| `loki_write_units` | number | Number of Loki worker units with `write` role | +| `mimir_coordinator_units` | number | Number of Mimir coordinator units | +| `mimir_backend_units` | number | Number of Mimir worker units with `backend` role | +| `mimir_read_units` | number | Number of Mimir worker units with `read` role | +| `mimir_write_units` | number | Number of Mimir worker units with `write` role | +| `tempo_coordinator_units` | number | Number of Tempo coordinator units | +| `tempo_compactor_units` | number | Number of Tempo worker units with `compactor` role | +| `tempo_distributor_units` | number | Number of Tempo worker units with `distributor` role | +| `tempo_ingester_units` | number | Number of Tempo worker units with `ingester` role | +| `tempo_metrics_generator_units` | number | Number of Tempo worker units with `metrics_generator` role | +| `tempo_querier_units` | number | Number of Tempo worker units with `querier` role | +| `tempo_query_frontend_units` | number | Number of Tempo worker units with `query_frontend` role | +| `s3_access_key` | string | Access key credential to connect to the S3 provider | 1 | +| `s3_secret_key` | string | Secret key credential to connect to the S3 provider | 1 | +| `s3_endpoint` | string | S3 provider endpoint | 1 | +| `loki_bucket` | string | Name of the bucket in which Loki should store its logs | 1 | +| `mimir_bucket` | string | Name of the bucket in which Mimir should store its metrics | 1 | +| `tempo_bucket` | string | Name of the bucket in which Tempo should store its traces | 1 | +| `alertmanager_revision` | number | Revision number of the charm | null | +| `catalogue_revision` | number | Revision number of the charm | null | +| `grafana_revision` | number | Revision number of the charm | null | +| `grafana_agent_revision` | number | Revision number of the charm | null | +| `loki_coordinator_revision` | number | Revision number of the charm | null | +| `loki_worker_revision` | number | Revision number of the charm | null | +| `mimir_coordinator_revision` | number | Revision number of the charm | null | +| `mimir_worker_revision` | number | Revision number of the charm | null | +| `ssc_revision` | number | Revision number of the charm | null | +| `s3_integrator_revision` | number | Revision number of the charm | null | +| `tempo_coordinator_revision` | number | Revision number of the charm | null | +| `tempo_worker_revision` | number | Revision number of the charm | null | +| `traefik_revision` | number | Revision number of the charm | null | + +### Outputs +Upon application, the module exports the following outputs: + +| Name | Type | Description | +| - | - | - | +| `alertmanager`| module | Alertmanager module | +| `catalogue`| module | Catalogue module | +| `grafana`| module | Grafana module | +| `grafana_agent`| module | Grafana agent module | +| `loki`| module | Loki module | +| `mimir`| module | Mimir module | +| `ssc`| module | Self-signed certificates module | +| `tempo`| module | Tempo module | +| `traefik`| module | Traefik module | + + +## Usage + + +### Basic usage + +Users should ensure that Terraform is aware of the `juju_model` dependency of the charm module. + +To deploy this module with its needed dependency, you can run `terraform apply -var="model=" -auto-approve`. This would deploy all COS HA solution modules in the same model. + +### High Availability + +By default, this Terraform module will deploy each worker with `3` unit. If you want to scale each Loki, Mimir or Tempo worker unit please check the variables available for that purpose in `variables.tf`. + +### Minimal sample deployment. + +In order to deploy COS with just one unit per worker charm create a `main.tf` file with the following content: + +```hcl +terraform { + required_version = ">= 1.5" + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 5.0" + } + null = { + source = "hashicorp/null" + version = "~> 3.0" + } + } +} + +# COS module that deploy the whole Canonical Observability Stack +module "cos" { + source = "git::https://github.com/canonical/observability//terraform/modules/cos" + model = "cos" + channel = "2/edge" + s3_integrator_channel = "2/edge" + ssc_channel = "1/edge" + traefik_channel = "latest/edge" + cloud = "self-managed" + use_tls = true + s3_endpoint = "http://S3_HOST_IP:8080" + s3_secret_key = "secret-key" + s3_access_key = "access-key" + loki_bucket = "loki" + mimir_bucket = "mimir" + tempo_bucket = "tempo" + loki_coordinator_units = 3 + loki_backend_units = 3 + loki_read_units = 3 + loki_write_units = 3 + mimir_coordinator_units = 3 + mimir_backend_units = 3 + mimir_read_units = 3 + mimir_write_units = 3 + tempo_coordinator_units = 3 + tempo_compactor_units = 3 + tempo_distributor_units = 3 + tempo_ingester_units = 3 + tempo_metrics_generator_units = 3 + tempo_querier_units = 3 + tempo_query_frontend_units = 3 + alertmanager_revision = null + catalogue_revision = null + grafana_revision = null + grafana_agent_revision = null + loki_coordinator_revision = null + loki_worker_revision = null + mimir_coordinator_revision = null + mimir_worker_revision = null + ssc_revision = null + s3_integrator_revision = 157 # FIXME: This is a temporary fix until the spec for the s3-integrator is stable. + tempo_coordinator_revision = null + tempo_worker_revision = null + traefik_revision = null +} +``` + +Then, use terraform to deploy the module: + +```shell +terraform init +terraform apply +``` + +Some minutes after running these two commands, we have a distributed COS deployment! + +```shell +$ juju status --relations +Model Controller Cloud/Region Version SLA Timestamp +cos microk8s microk8s/localhost 3.6.2 unsupported 20:16:42-03:00 + +App Version Status Scale Charm Channel Rev Address Exposed Message +alertmanager 0.27.0 active 1 alertmanager-k8s latest/edge 156 10.152.183.57 no +catalogue active 1 catalogue-k8s latest/edge 81 10.152.183.88 no +grafana 9.5.3 active 1 grafana-k8s latest/edge 141 10.152.183.138 no +grafana-agent 0.40.4 active 1 grafana-agent-k8s latest/edge 112 10.152.183.37 no grafana-dashboards-provider: off +loki active 3 loki-coordinator-k8s latest/edge 20 10.152.183.201 no +loki-backend 3.0.0 active 3 loki-worker-k8s latest/edge 34 10.152.183.112 no backend ready. +loki-read 3.0.0 active 3 loki-worker-k8s latest/edge 34 10.152.183.87 no read ready. +loki-s3-integrator active 1 s3-integrator latest/edge 139 10.152.183.20 no +loki-write 3.0.0 active 3 loki-worker-k8s latest/edge 34 10.152.183.167 no write ready. +mimir active 3 mimir-coordinator-k8s latest/edge 38 10.152.183.207 no +mimir-backend 2.13.0 active 3 mimir-worker-k8s latest/edge 45 10.152.183.45 no backend ready. +mimir-read 2.13.0 active 3 mimir-worker-k8s latest/edge 45 10.152.183.160 no read ready. +mimir-s3-integrator active 1 s3-integrator latest/edge 139 10.152.183.85 no +mimir-write 2.13.0 active 3 mimir-worker-k8s latest/edge 45 10.152.183.125 no write ready. +self-signed-certificates active 1 self-signed-certificates 1/edge 268 10.152.183.34 no +tempo active 3 tempo-coordinator-k8s latest/edge 70 10.152.183.72 no +tempo-compactor 2.7.1 active 3 tempo-worker-k8s latest/edge 52 10.152.183.99 no compactor ready. +tempo-distributor 2.7.1 active 3 tempo-worker-k8s latest/edge 52 10.152.183.162 no distributor ready. +tempo-ingester 2.7.1 active 3 tempo-worker-k8s latest/edge 52 10.152.183.195 no ingester ready. +tempo-metrics-generator 2.7.1 active 3 tempo-worker-k8s latest/edge 52 10.152.183.122 no metrics-generator ready. +tempo-querier 2.7.1 active 3 tempo-worker-k8s latest/edge 52 10.152.183.136 no querier ready. +tempo-query-frontend 2.7.1 active 3 tempo-worker-k8s latest/edge 52 10.152.183.105 no query-frontend ready. +tempo-s3-integrator active 1 s3-integrator latest/edge 139 10.152.183.121 no +traefik 2.11.0 active 1 traefik-k8s latest/edge 234 10.152.183.110 no Serving at 192.168.1.244 + +Unit Workload Agent Address Ports Message +alertmanager/0* active idle 10.1.167.134 +catalogue/0* active idle 10.1.167.150 +grafana-agent/0* active idle 10.1.167.149 grafana-dashboards-provider: off +grafana/0* active idle 10.1.167.173 +loki-backend/0* active idle 10.1.167.148 backend ready. +loki-backend/1 active idle 10.1.167.171 backend ready. +loki-backend/2 active idle 10.1.167.188 backend ready. +loki-read/0 active idle 10.1.167.153 read ready. +loki-read/1 active idle 10.1.167.180 read ready. +loki-read/2* active idle 10.1.167.183 read ready. +loki-s3-integrator/0* active idle 10.1.167.169 +loki-write/0* active idle 10.1.167.144 write ready. +loki-write/1 active idle 10.1.167.142 write ready. +loki-write/2 active idle 10.1.167.187 write ready. +loki/0* active idle 10.1.167.174 +mimir-backend/0* active idle 10.1.167.139 backend ready. +mimir-backend/1 active idle 10.1.167.128 backend ready. +mimir-backend/2 active idle 10.1.167.177 backend ready. +mimir-read/0* active idle 10.1.167.151 read ready. +mimir-read/1 active idle 10.1.167.163 read ready. +mimir-read/2 active idle 10.1.167.132 read ready. +mimir-s3-integrator/0* active idle 10.1.167.137 +mimir-write/0* active idle 10.1.167.152 write ready. +mimir-write/1 active idle 10.1.167.167 write ready. +mimir-write/2 active idle 10.1.167.143 write ready. +mimir/0* active idle 10.1.167.135 +self-signed-certificates/0* active idle 10.1.167.166 +tempo-compactor/0 active idle 10.1.167.181 compactor ready. +tempo-compactor/1* active idle 10.1.167.168 compactor ready. +tempo-compactor/2 active idle 10.1.167.129 compactor ready. +tempo-distributor/0* active idle 10.1.167.157 distributor ready. +tempo-distributor/1 active idle 10.1.167.131 distributor ready. +tempo-distributor/2 active idle 10.1.167.186 distributor ready. +tempo-ingester/0* active idle 10.1.167.191 ingester ready. +tempo-ingester/1 active idle 10.1.167.133 ingester ready. +tempo-ingester/2 active idle 10.1.167.179 ingester ready. +tempo-metrics-generator/0* active idle 10.1.167.147 metrics-generator ready. +tempo-metrics-generator/1 active idle 10.1.167.159 metrics-generator ready. +tempo-metrics-generator/2 active idle 10.1.167.146 metrics-generator ready. +tempo-querier/0 active idle 10.1.167.170 querier ready. +tempo-querier/1 active idle 10.1.167.140 querier ready. +tempo-querier/2* active idle 10.1.167.165 querier ready. +tempo-query-frontend/0* active idle 10.1.167.162 query-frontend ready. +tempo-query-frontend/1 active idle 10.1.167.190 query-frontend ready. +tempo-query-frontend/2 active idle 10.1.167.184 query-frontend ready. +tempo-s3-integrator/0* active idle 10.1.167.172 +tempo/0* active idle 10.1.167.189 +traefik/0* active idle 10.1.167.182 Serving at 192.168.1.244 + +Integration provider Requirer Interface Type Message +alertmanager:alerting loki:alertmanager alertmanager_dispatch regular +alertmanager:alerting mimir:alertmanager alertmanager_dispatch regular +alertmanager:grafana-dashboard grafana:grafana-dashboard grafana_dashboard regular +alertmanager:grafana-source grafana:grafana-source grafana_datasource regular +alertmanager:replicas alertmanager:replicas alertmanager_replica peer +alertmanager:self-metrics-endpoint grafana-agent:metrics-endpoint prometheus_scrape regular +catalogue:catalogue alertmanager:catalogue catalogue regular +catalogue:catalogue grafana:catalogue catalogue regular +catalogue:catalogue mimir:catalogue catalogue regular +catalogue:catalogue tempo:catalogue catalogue regular +catalogue:replicas catalogue:replicas catalogue_replica peer +grafana-agent:logging-provider loki:logging-consumer loki_push_api regular +grafana-agent:logging-provider tempo:logging loki_push_api regular +grafana-agent:peers grafana-agent:peers grafana_agent_replica peer +grafana-agent:tracing-provider grafana:charm-tracing tracing regular +grafana-agent:tracing-provider loki:charm-tracing tracing regular +grafana-agent:tracing-provider mimir:charm-tracing tracing regular +grafana:grafana grafana:grafana grafana_peers peer +grafana:replicas grafana:replicas grafana_replicas peer +loki-s3-integrator:s3-credentials loki:s3 s3 regular +loki-s3-integrator:s3-integrator-peers loki-s3-integrator:s3-integrator-peers s3-integrator-peers peer +loki:grafana-dashboards-provider grafana:grafana-dashboard grafana_dashboard regular +loki:grafana-source grafana:grafana-source grafana_datasource regular +loki:logging grafana-agent:logging-consumer loki_push_api regular +loki:loki-cluster loki-backend:loki-cluster loki_cluster regular +loki:loki-cluster loki-read:loki-cluster loki_cluster regular +loki:loki-cluster loki-write:loki-cluster loki_cluster regular +loki:self-metrics-endpoint grafana-agent:metrics-endpoint prometheus_scrape regular +mimir-s3-integrator:s3-credentials mimir:s3 s3 regular +mimir-s3-integrator:s3-integrator-peers mimir-s3-integrator:s3-integrator-peers s3-integrator-peers peer +mimir:grafana-dashboards-provider grafana:grafana-dashboard grafana_dashboard regular +mimir:grafana-source grafana:grafana-source grafana_datasource regular +mimir:mimir-cluster mimir-backend:mimir-cluster mimir_cluster regular +mimir:mimir-cluster mimir-read:mimir-cluster mimir_cluster regular +mimir:mimir-cluster mimir-write:mimir-cluster mimir_cluster regular +mimir:receive-remote-write grafana-agent:send-remote-write prometheus_remote_write regular +mimir:receive-remote-write tempo:send-remote-write prometheus_remote_write regular +mimir:self-metrics-endpoint grafana-agent:metrics-endpoint prometheus_scrape regular +tempo-s3-integrator:s3-credentials tempo:s3 s3 regular +tempo-s3-integrator:s3-integrator-peers tempo-s3-integrator:s3-integrator-peers s3-integrator-peers peer +tempo:grafana-source grafana:grafana-source grafana_datasource regular +tempo:metrics-endpoint grafana-agent:metrics-endpoint prometheus_scrape regular +tempo:peers tempo:peers tempo_peers peer +tempo:tempo-cluster tempo-compactor:tempo-cluster tempo_cluster regular +tempo:tempo-cluster tempo-distributor:tempo-cluster tempo_cluster regular +tempo:tempo-cluster tempo-ingester:tempo-cluster tempo_cluster regular +tempo:tempo-cluster tempo-metrics-generator:tempo-cluster tempo_cluster regular +tempo:tempo-cluster tempo-querier:tempo-cluster tempo_cluster regular +tempo:tempo-cluster tempo-query-frontend:tempo-cluster tempo_cluster regular +tempo:tracing grafana-agent:tracing tracing regular +traefik:ingress alertmanager:ingress ingress regular +traefik:ingress catalogue:ingress ingress regular +traefik:ingress loki:ingress ingress regular +traefik:ingress mimir:ingress ingress regular +traefik:peers traefik:peers traefik_peers peer +traefik:traefik-route grafana:ingress traefik_route regular +traefik:traefik-route tempo:ingress traefik_route regular +``` + +### Deploy COS on AWS EKS + +> **Note:** This deployment assumes that the required AWS infrastructure is already provisioned and that a Juju controller has been bootstrapped. +> Additionally, a Juju model must be ready in advance. +> +> See [provision AWS infrastructure](../aws-infra/README.md) + +In order to deploy COS on AWS, create a `main.tf` file with the following content. + +```hcl +# COS module that deploy the whole Canonical Observability Stack +module "cos" { + source = "git::https://github.com/canonical/observability//terraform/modules/cos" + model_name = var.model_name + channel = var.channel + s3_endpoint = var.s3_endpoint + s3_access_key = var.s3_access_key + s3_secret_key = var.s3_secret_key + loki_bucket = var.loki_bucket + mimir_bucket = var.mimir_bucket + tempo_bucket = var.tempo_bucket + loki_backend_units = var.loki_backend_units + loki_read_units = var.loki_read_units + loki_write_units = var.loki_write_units + mimir_backend_units = var.mimir_backend_units + mimir_read_units = var.mimir_read_units + mimir_write_units = var.mimir_write_units + tempo_compactor_units = var.tempo_compactor_units + tempo_distributor_units = var.tempo_distributor_units + tempo_ingester_units = var.tempo_ingester_units + tempo_metrics_generator_units = var.tempo_metrics_generator_units + tempo_querier_units = var.tempo_querier_units + tempo_query_frontend_units = var.tempo_query_frontend_units + cloud = var.cloud + ssc_channel = var.ssc_channel +} + +variable "channel" { + description = "Charms channel" + type = string + default = "latest/edge" +} + +variable "model_name" { + description = "Model name" + type = string +} + +variable "use_tls" { + description = "Specify whether to use TLS or not for coordinator-worker communication. By default, TLS is enabled through self-signed-certificates" + type = bool + default = true +} + +variable "s3_endpoint" { + description = "S3 endpoint" + type = string +} + +variable "s3_access_key" { + description = "S3 access key" + type = string + sensitive = true +} + +variable "s3_secret_key" { + description = "S3 secret key" + type = string + sensitive = true +} + +variable "loki_bucket" { + description = "Loki bucket name" + type = string + sensitive = true +} + +variable "mimir_bucket" { + description = "Mimir bucket name" + type = string + sensitive = true +} + +variable "tempo_bucket" { + description = "Tempo bucket name" + type = string + sensitive = true +} + +variable "loki_backend_units" { + description = "Number of Loki worker units with backend role" + type = number + default = 3 +} + +variable "loki_read_units" { + description = "Number of Loki worker units with read role" + type = number + default = 3 +} + +variable "loki_write_units" { + description = "Number of Loki worker units with write roles" + type = number + default = 3 +} + +variable "mimir_backend_units" { + description = "Number of Mimir worker units with backend role" + type = number + default = 3 +} + +variable "mimir_read_units" { + description = "Number of Mimir worker units with read role" + type = number + default = 3 +} + +variable "mimir_write_units" { + description = "Number of Mimir worker units with write role" + type = number + default = 3 +} + +variable "tempo_compactor_units" { + description = "Number of Tempo worker units with compactor role" + type = number + default = 3 +} + +variable "tempo_distributor_units" { + description = "Number of Tempo worker units with distributor role" + type = number + default = 3 +} + +variable "tempo_ingester_units" { + description = "Number of Tempo worker units with ingester role" + type = number + default = 3 +} + +variable "tempo_metrics_generator_units" { + description = "Number of Tempo worker units with metrics-generator role" + type = number + default = 3 +} + +variable "tempo_querier_units" { + description = "Number of Tempo worker units with querier role" + type = number + default = 3 +} +variable "tempo_query_frontend_units" { + description = "Number of Tempo worker units with query-frontend role" + type = number + default = 3 +} + +variable "cloud" { + description = "Kubernetes cloud or environment where this COS module will be deployed (e.g self-managed, aws)" + type = string + default = "self-managed" +} + +# ssc doesn't have a "latest" track for ubuntu@24.04 base. +variable "ssc_channel" { + description = "self-signed certificates charm channel." + type = string + default = "latest/edge" +} + +``` +Then, create a `aws.tfvars` file with the following content: + +```hcl +cloud = "aws" +# If you're deploying on an ubuntu@24.04 base +ssc_channel = "1/edge" +model = "" +s3_endpoint = "" +s3_access_key = "" +s3_secret_key = "" +loki_bucket = "" +mimir_bucket = "" +tempo_bucket = "" +``` + +Then, use terraform to deploy the module: +```bash +terraform init +terraform apply -var-file=aws.tfvars +``` diff --git a/terraform/modules/cos/main.tf b/terraform/modules/cos/main.tf new file mode 100644 index 00000000..07309b5e --- /dev/null +++ b/terraform/modules/cos/main.tf @@ -0,0 +1,607 @@ +# -------------- # Applications -------------- + +module "alertmanager" { + source = "git::https://github.com/canonical/alertmanager-k8s-operator//terraform" + app_name = "alertmanager" + model = var.model + channel = var.channel + revision = var.alertmanager_revision +} + +module "catalogue" { + source = "git::https://github.com/canonical/catalogue-k8s-operator//terraform" + app_name = "catalogue" + model = var.model + channel = var.channel + revision = var.catalogue_revision +} + +module "grafana" { + source = "git::https://github.com/canonical/grafana-k8s-operator//terraform" + app_name = "grafana" + model = var.model + channel = var.channel + revision = var.grafana_revision +} + +module "grafana_agent" { + source = "git::https://github.com/canonical/grafana-agent-k8s-operator//terraform" + app_name = "grafana-agent" + model = var.model + channel = var.channel + revision = var.grafana_agent_revision +} + +module "loki" { + source = "git::https://github.com/canonical/observability-stack//terraform/modules/loki?ref=feat/tf-migration" + model = var.model + channel = var.channel + s3_integrator_channel = var.s3_integrator_channel + s3_integrator_revision = var.s3_integrator_revision + coordinator_revision = var.loki_coordinator_revision + worker_revision = var.loki_worker_revision + coordinator_units = var.loki_coordinator_units + backend_units = var.loki_backend_units + read_units = var.loki_read_units + write_units = var.loki_write_units + s3_bucket = var.loki_bucket + s3_endpoint = var.s3_endpoint + s3_secret_key = var.s3_secret_key + s3_access_key = var.s3_access_key + anti_affinity = var.anti_affinity +} + +module "mimir" { + source = "git::https://github.com/canonical/observability-stack//terraform/modules/mimir?ref=feat/tf-migration" + model = var.model + channel = var.channel + s3_integrator_channel = var.s3_integrator_channel + s3_integrator_revision = var.s3_integrator_revision + coordinator_revision = var.mimir_coordinator_revision + worker_revision = var.mimir_worker_revision + coordinator_units = var.mimir_coordinator_units + backend_units = var.mimir_backend_units + read_units = var.mimir_read_units + write_units = var.mimir_write_units + s3_bucket = var.mimir_bucket + s3_endpoint = var.s3_endpoint + s3_secret_key = var.s3_secret_key + s3_access_key = var.s3_access_key + anti_affinity = var.anti_affinity +} + +module "ssc" { + count = var.use_tls ? 1 : 0 + source = "git::https://github.com/canonical/self-signed-certificates-operator//terraform" + model = var.model + channel = var.ssc_channel + revision = var.ssc_revision +} + +module "tempo" { + source = "git::https://github.com/canonical/observability-stack//terraform/modules/tempo?ref=feat/tf-migration" + model = var.model + channel = var.channel + s3_integrator_channel = var.s3_integrator_channel + s3_integrator_revision = var.s3_integrator_revision + coordinator_revision = var.tempo_coordinator_revision + worker_revision = var.tempo_worker_revision + coordinator_units = var.tempo_coordinator_units + compactor_units = var.tempo_compactor_units + distributor_units = var.tempo_distributor_units + ingester_units = var.tempo_ingester_units + metrics_generator_units = var.tempo_metrics_generator_units + querier_units = var.tempo_querier_units + query_frontend_units = var.tempo_query_frontend_units + s3_bucket = var.tempo_bucket + s3_endpoint = var.s3_endpoint + s3_access_key = var.s3_access_key + s3_secret_key = var.s3_secret_key + anti_affinity = var.anti_affinity +} + +module "traefik" { + source = "git::https://github.com/canonical/traefik-k8s-operator//terraform" + app_name = "traefik" + model = var.model + channel = var.traefik_channel + config = var.cloud == "aws" ? { "loadbalancer_annotations" = "service.beta.kubernetes.io/aws-load-balancer-scheme=internet-facing" } : {} + revision = var.traefik_revision +} + +# -------------- # Integrations -------------- + +# Provided by Alertmanager + +resource "juju_integration" "alertmanager_grafana_dashboards" { + model = var.model + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.grafana_dashboard + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_dashboard + } +} + +resource "juju_integration" "mimir_alertmanager" { + model = var.model + + application { + name = module.mimir.app_names.mimir_coordinator + endpoint = module.mimir.endpoints.alertmanager + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.alerting + } +} + +resource "juju_integration" "loki_alertmanager" { + model = var.model + + application { + name = module.loki.app_names.loki_coordinator + endpoint = module.loki.endpoints.alertmanager + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.alerting + } +} + +resource "juju_integration" "agent_alertmanager_metrics" { + model = var.model + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.self_metrics_endpoint + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.metrics_endpoint + } +} + +resource "juju_integration" "grafana_source_alertmanager" { + model = var.model + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.grafana_source + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_source + } +} + +# Provided by Mimir + +resource "juju_integration" "mimir_grafana_dashboards_provider" { + model = var.model + + application { + name = module.mimir.app_names.mimir_coordinator + endpoint = module.mimir.endpoints.grafana_dashboards_provider + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_dashboard + } +} + +resource "juju_integration" "mimir_grafana_source" { + model = var.model + + application { + name = module.mimir.app_names.mimir_coordinator + endpoint = module.mimir.endpoints.grafana_source + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_source + } +} + +resource "juju_integration" "mimir_tracing_grafana_agent_traicing_provider" { + model = var.model + + application { + name = module.mimir.app_names.mimir_coordinator + endpoint = module.mimir.endpoints.charm_tracing + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.tracing_provider + } +} + + +resource "juju_integration" "mimir_self_metrics_endpoint_grafana_agent_metrics_endpoint" { + model = var.model + + application { + name = module.mimir.app_names.mimir_coordinator + endpoint = module.mimir.endpoints.self_metrics_endpoint + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.metrics_endpoint + } +} + + +# Provided by Loki + +resource "juju_integration" "loki_grafana_dashboards_provider" { + model = var.model + + application { + name = module.loki.app_names.loki_coordinator + endpoint = module.loki.endpoints.grafana_dashboards_provider + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_dashboard + } +} + +resource "juju_integration" "loki_grafana_source" { + model = var.model + + application { + name = module.loki.app_names.loki_coordinator + endpoint = module.loki.endpoints.grafana_source + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_source + } +} + +resource "juju_integration" "loki_logging_consumer_grafana_agent_logging_provider" { + model = var.model + + application { + name = module.loki.app_names.loki_coordinator + endpoint = module.loki.endpoints.logging_consumer + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.logging_provider + } +} + +resource "juju_integration" "loki_logging_grafana_agent_logging_consumer" { + model = var.model + + application { + name = module.loki.app_names.loki_coordinator + endpoint = module.loki.endpoints.logging + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.logging_consumer + } +} + +resource "juju_integration" "loki_tracing_grafana_agent_traicing_provider" { + model = var.model + + application { + name = module.loki.app_names.loki_coordinator + endpoint = module.loki.endpoints.charm_tracing + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.tracing_provider + } +} + +# Provided by Tempo +resource "juju_integration" "tempo_grafana_source" { + model = var.model + + application { + name = module.tempo.app_names.tempo_coordinator + endpoint = module.tempo.endpoints.grafana_source + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.grafana_source + } +} + +resource "juju_integration" "tempo_tracing_grafana_agent_tracing" { + model = var.model + + application { + name = module.tempo.app_names.tempo_coordinator + endpoint = module.tempo.endpoints.tracing + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.tracing + } +} + +resource "juju_integration" "tempo_metrics_endpoint_grafana_agent_metrics_endpoint" { + model = var.model + + application { + name = module.tempo.app_names.tempo_coordinator + endpoint = module.tempo.endpoints.metrics_endpoint + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.metrics_endpoint + } +} + +resource "juju_integration" "tempo_logging_grafana_agent_logging_provider" { + model = var.model + + application { + name = module.tempo.app_names.tempo_coordinator + endpoint = module.tempo.endpoints.logging + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.logging_provider + } +} + +resource "juju_integration" "tempo_send_remote_write_mimir_receive_remote_write" { + model = var.model + + application { + name = module.tempo.app_names.tempo_coordinator + endpoint = module.tempo.endpoints.send-remote-write + } + + application { + name = module.mimir.app_names.mimir_coordinator + endpoint = module.mimir.endpoints.receive_remote_write + } +} + +# Provided by Catalogue + +resource "juju_integration" "alertmanager_catalogue" { + model = var.model + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.catalogue + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.catalogue + } +} + +resource "juju_integration" "grafana_catalogue" { + model = var.model + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.catalogue + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.catalogue + } +} + +resource "juju_integration" "tempo_catalogue" { + model = var.model + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.catalogue + } + + application { + name = module.tempo.app_names.tempo_coordinator + endpoint = module.tempo.endpoints.catalogue + } +} + +resource "juju_integration" "mimir_catalogue" { + model = var.model + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.catalogue + } + + application { + name = module.mimir.app_names.mimir_coordinator + endpoint = module.mimir.endpoints.catalogue + } +} + +# Provided by Traefik + +resource "juju_integration" "alertmanager_ingress" { + model = var.model + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.ingress + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.ingress + } +} + +resource "juju_integration" "catalogue_ingress" { + model = var.model + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.ingress + } + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.ingress + } +} + +resource "juju_integration" "grafana_ingress" { + model = var.model + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.traefik_route + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.ingress + } +} + +resource "juju_integration" "mimir_ingress" { + model = var.model + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.ingress + } + + application { + name = module.mimir.app_names.mimir_coordinator + endpoint = module.mimir.endpoints.ingress + } +} + +resource "juju_integration" "loki_ingress" { + model = var.model + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.ingress + } + + application { + name = module.loki.app_names.loki_coordinator + endpoint = module.loki.endpoints.ingress + } +} + +resource "juju_integration" "tempo_ingress" { + model = var.model + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.traefik_route + } + + application { + name = module.tempo.app_names.tempo_coordinator + endpoint = module.tempo.endpoints.ingress + } +} + +# Grafana agent + +resource "juju_integration" "agent_loki_metrics" { + model = var.model + + application { + name = module.loki.app_names.loki_coordinator + endpoint = module.loki.endpoints.self_metrics_endpoint + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.metrics_endpoint + } +} + +resource "juju_integration" "agent_mimir_metrics" { + model = var.model + + application { + name = module.mimir.app_names.mimir_coordinator + endpoint = module.mimir.endpoints.receive_remote_write + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.send_remote_write + } +} + +# Provided by Grafana + +resource "juju_integration" "grafana_tracing_grafana_agent_traicing_provider" { + model = var.model + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.charm_tracing + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.tracing_provider + } +} + +# -------------- # Offers -------------- + +resource "juju_offer" "alertmanager-karma-dashboard" { + name = "alertmanager-karma-dashboard" + model = var.model + application_name = module.alertmanager.app_name + endpoint = "karma-dashboard" +} + +resource "juju_offer" "grafana-dashboards" { + name = "grafana-dashboards" + model = var.model + application_name = module.grafana.app_name + endpoint = "grafana-dashboard" +} + +resource "juju_offer" "loki-logging" { + name = "loki-logging" + model = var.model + application_name = module.loki.app_names.loki_coordinator + endpoint = "logging" +} + +resource "juju_offer" "mimir-receive-remote-write" { + name = "mimir-receive-remote-write" + model = var.model + application_name = module.mimir.app_names.mimir_coordinator + endpoint = "receive-remote-write" +} diff --git a/terraform/modules/cos/outputs.tf b/terraform/modules/cos/outputs.tf new file mode 100644 index 00000000..0de44f9b --- /dev/null +++ b/terraform/modules/cos/outputs.tf @@ -0,0 +1,26 @@ +# -------------- # Integration offers -------------- # + +output "offers" { + value = { + alertmanager_karma_dashboard = juju_offer.alertmanager-karma-dashboard + grafana_dashboards = juju_offer.grafana-dashboards + loki_logging = juju_offer.loki-logging + mimir_receive_remote_write = juju_offer.mimir-receive-remote-write + } +} + +# -------------- # Sub-modules -------------- # + +output "components" { + value = { + alertmanager = module.alertmanager + catalogue = module.catalogue + grafana = module.grafana + grafana_agent = module.grafana_agent + loki = module.loki + mimir = module.mimir + ssc = module.ssc + tempo = module.tempo + traefik = module.traefik + } +} diff --git a/terraform/modules/cos/variables.tf b/terraform/modules/cos/variables.tf new file mode 100644 index 00000000..a100b5d7 --- /dev/null +++ b/terraform/modules/cos/variables.tf @@ -0,0 +1,266 @@ + +# the list of kubernetes clouds where this COS module can be deployed. +locals { + clouds = ["aws", "self-managed"] +} + +variable "channel" { + description = "Channel that the charms are (unless overwritten by external_channels) deployed from" + type = string +} + +variable "model" { + description = "Reference to an existing model resource or data source for the model to deploy to" + type = string +} + +variable "use_tls" { + description = "Specify whether to use TLS or not for coordinator-worker communication. By default, TLS is enabled through self-signed-certificates" + type = bool + default = true +} + +variable "cloud" { + description = "Kubernetes cloud or environment where this COS module will be deployed (e.g self-managed, aws)" + type = string + default = "self-managed" + validation { + condition = contains(local.clouds, var.cloud) + error_message = "Allowed values are: ${join(", ", local.clouds)}." + } +} + +variable "anti_affinity" { + description = "Enable anti-affinity constraints across all HA modules (Mimir, Loki, Tempo)" + type = bool + default = true +} + +# -------------- # External channels -------------- +# O11y does not own these charms, so we allow users to specify their channels directly. + +variable "ssc_channel" { + description = "Channel that the self-signed certificates charm is deployed from" + type = string + default = "1/stable" +} + +variable "s3_integrator_channel" { + description = "Channel that the s3-integrator charm is deployed from" + type = string + default = "2/edge" +} + +variable "traefik_channel" { + description = "Channel that the Traefik charm is deployed from" + type = string + default = "latest/stable" +} + +# -------------- # S3 storage configuration -------------- + +variable "s3_endpoint" { + description = "S3 endpoint" + type = string +} + +variable "s3_access_key" { + description = "S3 access-key credential" + type = string +} + +variable "s3_secret_key" { + description = "S3 secret-key credential" + type = string + sensitive = true +} + +variable "loki_bucket" { + description = "Loki bucket name" + type = string + sensitive = true +} + +variable "mimir_bucket" { + description = "Mimir bucket name" + type = string + sensitive = true +} + +variable "tempo_bucket" { + description = "Tempo bucket name" + type = string + sensitive = true +} + +# -------------- # Charm revisions -------------- + +variable "alertmanager_revision" { + description = "Revision number of the Alertmanager charm" + type = number + default = null +} + +variable "catalogue_revision" { + description = "Revision number of the Catalogue charm" + type = number + default = null +} + +variable "grafana_revision" { + description = "Revision number of the Grafana charm" + type = number + default = null +} + +variable "grafana_agent_revision" { + description = "Revision number of the Grafana agent charm" + type = number + default = null +} + +variable "loki_coordinator_revision" { + description = "Revision number of the Loki coordinator charm" + type = number + default = null +} + +variable "loki_worker_revision" { + description = "Revision number of the Loki worker charm" + type = number + default = null +} + +variable "mimir_coordinator_revision" { + description = "Revision number of the Mimir coordinator charm" + type = number + default = null +} + +variable "mimir_worker_revision" { + description = "Revision number of the Mimir worker charm" + type = number + default = null +} + +variable "ssc_revision" { + description = "Revision number of the self-signed certificates charm" + type = number + default = null +} + +variable "s3_integrator_revision" { + description = "Revision number of the s3-integrator charm" + type = number + default = 157 # FIXME: https://github.com/canonical/observability/issues/342 +} + +variable "tempo_coordinator_revision" { + description = "Revision number of the Tempo coordinator charm" + type = number + default = null +} + +variable "tempo_worker_revision" { + description = "Revision number of the Tempo worker charm" + type = number + default = null +} + +variable "traefik_revision" { + description = "Revision number of the Traefik charm" + type = number + default = null +} + +# -------------- # Charm unit counts -------------- + +variable "loki_backend_units" { + description = "Number of Loki worker units with backend role" + type = number + default = 3 +} + +variable "loki_read_units" { + description = "Number of Loki worker units with read role" + type = number + default = 3 +} + +variable "loki_write_units" { + description = "Number of Loki worker units with write roles" + type = number + default = 3 +} + +variable "loki_coordinator_units" { + description = "Number of Loki coordinator units" + type = number + default = 3 +} + +variable "mimir_backend_units" { + description = "Number of Mimir worker units with backend role" + type = number + default = 3 +} + +variable "mimir_read_units" { + description = "Number of Mimir worker units with read role" + type = number + default = 3 +} + +variable "mimir_write_units" { + description = "Number of Mimir worker units with write role" + type = number + default = 3 +} + +variable "mimir_coordinator_units" { + description = "Number of Mimir coordinator units" + type = number + default = 3 +} + +variable "tempo_compactor_units" { + description = "Number of Tempo worker units with compactor role" + type = number + default = 3 +} + +variable "tempo_distributor_units" { + description = "Number of Tempo worker units with distributor role" + type = number + default = 3 +} + +variable "tempo_ingester_units" { + description = "Number of Tempo worker units with ingester role" + type = number + default = 3 +} + +variable "tempo_metrics_generator_units" { + description = "Number of Tempo worker units with metrics-generator role" + type = number + default = 3 +} + +variable "tempo_querier_units" { + description = "Number of Tempo worker units with querier role" + type = number + default = 3 +} + +variable "tempo_query_frontend_units" { + description = "Number of Tempo worker units with query-frontend role" + type = number + default = 3 +} + +variable "tempo_coordinator_units" { + description = "Number of Tempo coordinator units" + type = number + default = 3 +} diff --git a/terraform/modules/cos/versions.tf b/terraform/modules/cos/versions.tf new file mode 100644 index 00000000..cde98c1a --- /dev/null +++ b/terraform/modules/cos/versions.tf @@ -0,0 +1,9 @@ +terraform { + required_version = ">= 1.5" + required_providers { + juju = { + source = "juju/juju" + version = ">= 0.14.0" + } + } +} \ No newline at end of file diff --git a/terraform/modules/loki/README.md b/terraform/modules/loki/README.md new file mode 100644 index 00000000..d13e1b0b --- /dev/null +++ b/terraform/modules/loki/README.md @@ -0,0 +1,59 @@ +# Terraform module for Loki solution + +This is a Terraform module facilitating the deployment of Loki solution, using the [Terraform juju provider](https://github.com/juju/terraform-provider-juju/). For more information, refer to the provider [documentation](https://registry.terraform.io/providers/juju/juju/latest/docs). + +The solution consists of the following Terraform modules: +- [loki-coordinator-k8s](https://github.com/canonical/loki-coordinator-k8s-operator): ingress, cluster coordination, single integration facade. +- [loki-worker-k8s](https://github.com/canonical/loki-worker-k8s-operator): run one or more Loki application components. +- [s3-integrator](https://github.com/canonical/s3-integrator): facade for S3 storage configurations. +- [self-signed-certificates](https://github.com/canonical/self-signed-certificates-operator): certificates operator to secure traffic with TLS. + +This Terraform module deploys Loki in its [microservices mode](https://grafana.com/docs/enterprise-logs/latest/get-started/deployment-modes/#microservices-mode), which runs each one of the required roles in distinct processes. + + +> [!NOTE] +> `s3-integrator` itself doesn't act as an S3 object storage system. For the HA solution to be functional, `s3-integrator` needs to point to an S3-like storage. See [this guide](https://discourse.charmhub.io/t/cos-lite-docs-set-up-minio/15211) to learn how to connect to an S3-like storage for traces. + +## Requirements +This module requires a `juju` model to be available. Refer to the [usage section](#usage) below for more details. + +## API + +### Inputs +The module offers the following configurable inputs: + +| Name | Type | Description | Default | +| - | - | - | - | +| `backend_units`| number | Number of Loki worker units with the backend role | 1 | +| `channel`| string | Channel that the charms are deployed from | | +| `model`| string | Name of the model that the charm is deployed on | | +| `read_units`| number | Number of Loki worker units with the read role | 1 | +| `write_units`| number | Number of Loki worker units with the write role | 1 | +| `coordinator_units`| number | Number of Loki coordinator units | 1 | +| `s3_integrator_name` | string | Name of the s3-integrator app | 1 | +| `s3_bucket` | string | Name of the bucke in which Loki stores logs | 1 | +| `s3_access_key` | string | Access key credential to connect to the S3 provider | 1 | +| `s3_secret_key` | string | Secret key credential to connect to the S3 provider | 1 | +| `s3_endpoint` | string | Endpoint of the S3 provider | 1 | + +### Outputs +Upon application, the module exports the following outputs: + +| Name | Type | Description | +| - | - | - | +| `app_names`| map(string) | Names of the deployed applications | +| `endpoints`| map(string) | Map of all `provides` and `requires` endpoints | + +## Usage + + +### Basic usage + +Users should ensure that Terraform is aware of the `juju_model` dependency of the charm module. + +To deploy this module with its needed dependency, you can run `terraform apply -var="model_name=" -auto-approve`. This would deploy all Loki HA solution modules in the same model. + +### Microservice deployment + +By default, this Terraform module will deploy each Loki worker with `1` unit. To configure the module to run `x` units of any worker role, you can run `terraform apply -var="model_name=" -var="_units=" -auto-approve`. +See [Loki worker roles](https://discourse.charmhub.io/t/loki-worker-roles/15484) for the recommended scale for each role. diff --git a/terraform/modules/loki/main.tf b/terraform/modules/loki/main.tf new file mode 100644 index 00000000..9977eafe --- /dev/null +++ b/terraform/modules/loki/main.tf @@ -0,0 +1,151 @@ +resource "juju_secret" "loki_s3_credentials_secret" { + model = var.model + name = "loki_s3_credentials" + value = { + access-key = var.s3_access_key + secret-key = var.s3_secret_key + } + info = "Credentials for the S3 endpoint" +} + +resource "juju_access_secret" "loki_s3_secret_access" { + model = var.model + applications = [ + juju_application.s3_integrator.name + ] + secret_id = juju_secret.loki_s3_credentials_secret.secret_id +} + +# TODO: Replace s3_integrator resource to use its remote terraform module once available +resource "juju_application" "s3_integrator" { + name = var.s3_integrator_name + model = var.model + trust = true + + charm { + name = "s3-integrator" + channel = var.s3_integrator_channel + revision = var.s3_integrator_revision + } + config = { + endpoint = var.s3_endpoint + bucket = var.s3_bucket + credentials = "secret:${juju_secret.loki_s3_credentials_secret.secret_id}" + } + units = 1 +} + +module "loki_coordinator" { + source = "git::https://github.com/canonical/loki-coordinator-k8s-operator//terraform" + app_name = "loki" + model = var.model + channel = var.channel + revision = var.coordinator_revision + units = var.coordinator_units + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=loki,anti-pod.topology-key=kubernetes.io/hostname" : null +} + +module "loki_backend" { + source = "git::https://github.com/canonical/loki-worker-k8s-operator//terraform" + app_name = var.backend_name + model = var.model + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.backend_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-backend = true + } + revision = var.worker_revision + units = var.backend_units + depends_on = [ + module.loki_coordinator + ] +} + +module "loki_read" { + source = "git::https://github.com/canonical/loki-worker-k8s-operator//terraform" + app_name = var.read_name + model = var.model + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.read_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-read = true + } + revision = var.worker_revision + units = var.read_units + depends_on = [ + module.loki_coordinator + ] +} + +module "loki_write" { + source = "git::https://github.com/canonical/loki-worker-k8s-operator//terraform" + app_name = var.write_name + model = var.model + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.write_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-write = true + } + revision = var.worker_revision + units = var.write_units + depends_on = [ + module.loki_coordinator + ] +} + +# -------------- # Integrations -------------- + +resource "juju_integration" "coordinator_to_s3_integrator" { + model = var.model + application { + name = juju_application.s3_integrator.name + endpoint = "s3-credentials" + } + + application { + name = module.loki_coordinator.app_name + endpoint = "s3" + } +} + +resource "juju_integration" "coordinator_to_backend" { + model = var.model + + application { + name = module.loki_coordinator.app_name + endpoint = "loki-cluster" + } + + application { + name = module.loki_backend.app_name + endpoint = "loki-cluster" + } +} + +resource "juju_integration" "coordinator_to_read" { + model = var.model + + application { + name = module.loki_coordinator.app_name + endpoint = "loki-cluster" + } + + application { + name = module.loki_read.app_name + endpoint = "loki-cluster" + } +} + +resource "juju_integration" "coordinator_to_write" { + model = var.model + + application { + name = module.loki_coordinator.app_name + endpoint = "loki-cluster" + } + + application { + name = module.loki_write.app_name + endpoint = "loki-cluster" + } +} diff --git a/terraform/modules/loki/outputs.tf b/terraform/modules/loki/outputs.tf new file mode 100644 index 00000000..27921bed --- /dev/null +++ b/terraform/modules/loki/outputs.tf @@ -0,0 +1,30 @@ +output "app_names" { + value = merge( + { + loki_s3_integrator = juju_application.s3_integrator.name, + loki_coordinator = module.loki_coordinator.app_name, + loki_backend = module.loki_backend.app_name, + loki_read = module.loki_read.app_name, + loki_write = module.loki_write.app_name, + } + ) +} + +output "endpoints" { + value = { + # Requires + alertmanager = "alertmanager", + certificates = "certificates", + ingress = "ingress", + logging_consumer = "logging-consumer", + s3 = "s3", + charm_tracing = "charm-tracing", + # Provides + grafana_dashboards_provider = "grafana-dashboards-provider", + grafana_source = "grafana-source", + logging = "logging", + loki_cluster = "loki-cluster", + receive_remote_write = "receive-remote-write", + self_metrics_endpoint = "self-metrics-endpoint", + } +} diff --git a/terraform/modules/loki/variables.tf b/terraform/modules/loki/variables.tf new file mode 100644 index 00000000..5a55e11f --- /dev/null +++ b/terraform/modules/loki/variables.tf @@ -0,0 +1,128 @@ +variable "model" { + description = "Reference to an existing model resource or data source for the model to deploy to" + type = string +} + +variable "channel" { + description = "Channel that the charms are deployed from" + type = string +} + +variable "s3_integrator_channel" { + description = "Channel that the s3-integrator charm is deployed from" + type = string + default = "2/edge" +} + +variable "coordinator_revision" { + description = "Revision number of the coordinator charm" + type = number + default = null +} + +variable "worker_revision" { + description = "Revision number of the worker charm" + type = number + default = null +} + +variable "s3_integrator_revision" { + description = "Revision number of the s3-integrator charm" + type = number + default = 157 # FIXME: https://github.com/canonical/observability/issues/342 +} + +variable "s3_bucket" { + description = "Bucket name" + type = string + default = "loki" +} + +variable "s3_access_key" { + description = "S3 access-key credential" + type = string +} + +variable "s3_secret_key" { + description = "S3 secret-key credential" + type = string + sensitive = true +} + +variable "s3_endpoint" { + description = "S3 endpoint" + type = string +} + +variable "anti_affinity" { + description = "Enable anti-affinity constraints." + type = bool + default = true +} + +# -------------- # App Names -------------- + +variable "backend_name" { + description = "Name of the Loki app with the backend role" + type = string + default = "loki-backend" +} + +variable "read_name" { + description = "Name of the Loki app with the read role" + type = string + default = "loki-read" +} + +variable "write_name" { + description = "Name of the Loki app with the write role" + type = string + default = "loki-write" +} + +variable "s3_integrator_name" { + description = "Name of the s3-integrator app" + type = string + default = "loki-s3-integrator" +} +# -------------- # Units Per App -------------- + +variable "backend_units" { + description = "Number of Loki worker units with the backend role" + type = number + default = 1 + validation { + condition = var.backend_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "read_units" { + description = "Number of Loki worker units with the read role" + type = number + default = 1 + validation { + condition = var.read_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "write_units" { + description = "Number of Loki worker units with the write role" + type = number + default = 1 + validation { + condition = var.write_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "coordinator_units" { + description = "Number of Loki coordinator units" + type = number + default = 1 + validation { + condition = var.coordinator_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} diff --git a/terraform/modules/loki/versions.tf b/terraform/modules/loki/versions.tf new file mode 100644 index 00000000..cde98c1a --- /dev/null +++ b/terraform/modules/loki/versions.tf @@ -0,0 +1,9 @@ +terraform { + required_version = ">= 1.5" + required_providers { + juju = { + source = "juju/juju" + version = ">= 0.14.0" + } + } +} \ No newline at end of file diff --git a/terraform/modules/mimir/README.md b/terraform/modules/mimir/README.md new file mode 100644 index 00000000..99390bcf --- /dev/null +++ b/terraform/modules/mimir/README.md @@ -0,0 +1,60 @@ +# Terraform module for Mimir solution + +This is a Terraform module facilitating the deployment of Mimir solution, using the [Terraform juju provider](https://github.com/juju/terraform-provider-juju/). For more information, refer to the provider [documentation](https://registry.terraform.io/providers/juju/juju/latest/docs). + +The solution consists of the following Terraform modules: +- [mimir-coordinator-k8s](https://github.com/canonical/mimir-coordinator-k8s-operator): ingress, cluster coordination, single integration facade. +- [mimir-worker-k8s](https://github.com/canonical/mimir-worker-k8s-operator): run one or more mimir application components. +- [s3-integrator](https://github.com/canonical/s3-integrator): facade for S3 storage configurations. +- [self-signed-certificates](https://github.com/canonical/self-signed-certificates-operator): certificates operator to secure traffic with TLS. + +This Terraform module deploys Mimir in its [microservices mode](https://grafana.com/docs/mimir/latest/references/architecture/deployment-modes/#microservices-mode), which runs each one of the required roles in distinct processes. + + +> [!NOTE] +> `s3-integrator` itself doesn't act as an S3 object storage system. For the HA solution to be functional, `s3-integrator` needs to point to an S3-like storage. See [this guide](https://discourse.charmhub.io/t/cos-lite-docs-set-up-minio/15211) to learn how to connect to an S3-like storage for traces. + +## Requirements +This module requires a `juju` model to be available. Refer to the [usage section](#usage) below for more details. + +## API + +### Inputs +The module offers the following configurable inputs: + +| Name | Type | Description | Default | +| - | - | - | - | +| `channel`| string | Channel that the charms are deployed from | | +| `model`| string | Name of the model that the charm is deployed on | | +| `coordinator_units`| number | Number of Mimir coordinator units | 1 | +| `read_units`| number | Number of Mimir worker units with the read role | 1 | +| `write_units`| number | Number of Mimir worker units with the write role | 1 | +| `backend_units`| number | Number of Mimir worker units with the backend role | 1 | +| `s3_integrator_name` | string | Name of the s3-integrator app | 1 | +| `s3_bucket` | string | Name of the bucke in which Mimir stores metrics | 1 | +| `s3_access_key` | string | Access key credential to connect to the S3 provider | 1 | +| `s3_secret_key` | string | Secret key credential to connect to the S3 provider | 1 | +| `s3_endpoint` | string | Endpoint of the S3 provider | 1 | + + +### Outputs +Upon application, the module exports the following outputs: + +| Name | Type | Description | +| - | - | - | +| `app_names`| map(string) | Names of the deployed applications | +| `endpoints`| map(string) | Map of all `provides` and `requires` endpoints | + +## Usage + + +### Basic usage + +Users should ensure that Terraform is aware of the `juju_model` dependency of the charm module. + +To deploy this module with its needed dependency, you can run `terraform apply -var="model_name=" -auto-approve`. This would deploy all Mimir HA solution modules in the same model. + +### Microservice deployment + +By default, this Terraform module will deploy each Mimir worker with `1` unit. To configure the module to run `x` units of any worker role, you can run `terraform apply -var="model_name=" -var="_units=" -auto-approve`. +See [Mimir worker roles](https://discourse.charmhub.io/t/mimir-worker-roles/15484) for the recommended scale for each role. diff --git a/terraform/modules/mimir/main.tf b/terraform/modules/mimir/main.tf new file mode 100644 index 00000000..f1284846 --- /dev/null +++ b/terraform/modules/mimir/main.tf @@ -0,0 +1,152 @@ +resource "juju_secret" "mimir_s3_credentials_secret" { + model = var.model + name = "mimir_s3_credentials" + value = { + access-key = var.s3_access_key + secret-key = var.s3_secret_key + } + info = "Credentials for the S3 endpoint" +} + +resource "juju_access_secret" "mimir_s3_secret_access" { + model = var.model + applications = [ + juju_application.s3_integrator.name + ] + secret_id = juju_secret.mimir_s3_credentials_secret.secret_id +} + +# TODO: Replace s3_integrator resource to use its remote terraform module once available +resource "juju_application" "s3_integrator" { + name = var.s3_integrator_name + model = var.model + trust = true + + charm { + name = "s3-integrator" + channel = var.s3_integrator_channel + revision = var.s3_integrator_revision + } + config = { + endpoint = var.s3_endpoint + bucket = var.s3_bucket + credentials = "secret:${juju_secret.mimir_s3_credentials_secret.secret_id}" + } + units = 1 + +} + +module "mimir_coordinator" { + source = "git::https://github.com/canonical/mimir-coordinator-k8s-operator//terraform" + app_name = "mimir" + model = var.model + channel = var.channel + revision = var.coordinator_revision + units = var.coordinator_units + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=mimir,anti-pod.topology-key=kubernetes.io/hostname" : null +} + +module "mimir_read" { + source = "git::https://github.com/canonical/mimir-worker-k8s-operator//terraform" + app_name = var.read_name + model = var.model + channel = var.channel + revision = var.worker_revision + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.read_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-read = true + } + units = var.read_units + depends_on = [ + module.mimir_coordinator + ] +} + +module "mimir_write" { + source = "git::https://github.com/canonical/mimir-worker-k8s-operator//terraform" + app_name = var.write_name + model = var.model + channel = var.channel + revision = var.worker_revision + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.write_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-write = true + } + units = var.write_units + depends_on = [ + module.mimir_coordinator + ] +} + +module "mimir_backend" { + source = "git::https://github.com/canonical/mimir-worker-k8s-operator//terraform" + app_name = var.backend_name + model = var.model + channel = var.channel + revision = var.worker_revision + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.backend_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-backend = true + } + units = var.backend_units + depends_on = [ + module.mimir_coordinator + ] +} + +# -------------- # Integrations -------------- + +resource "juju_integration" "coordinator_to_s3_integrator" { + model = var.model + application { + name = juju_application.s3_integrator.name + endpoint = "s3-credentials" + } + + application { + name = module.mimir_coordinator.app_name + endpoint = "s3" + } +} + +resource "juju_integration" "coordinator_to_read" { + model = var.model + + application { + name = module.mimir_coordinator.app_name + endpoint = "mimir-cluster" + } + + application { + name = module.mimir_read.app_name + endpoint = "mimir-cluster" + } +} + +resource "juju_integration" "coordinator_to_write" { + model = var.model + + application { + name = module.mimir_coordinator.app_name + endpoint = "mimir-cluster" + } + + application { + name = module.mimir_write.app_name + endpoint = "mimir-cluster" + } +} + +resource "juju_integration" "coordinator_to_backend" { + model = var.model + + application { + name = module.mimir_coordinator.app_name + endpoint = "mimir-cluster" + } + + application { + name = module.mimir_backend.app_name + endpoint = "mimir-cluster" + } +} diff --git a/terraform/modules/mimir/outputs.tf b/terraform/modules/mimir/outputs.tf new file mode 100644 index 00000000..d3603364 --- /dev/null +++ b/terraform/modules/mimir/outputs.tf @@ -0,0 +1,31 @@ +output "app_names" { + value = merge( + { + mimir_s3_integrator = juju_application.s3_integrator.name, + mimir_coordinator = module.mimir_coordinator.app_name, + mimir_read = module.mimir_read.app_name, + mimir_write = module.mimir_write.app_name, + mimir_backend = module.mimir_backend.app_name, + } + ) +} + +output "endpoints" { + value = { + # Requires + alertmanager = "alertmanager", + certificates = "certificates", + ingress = "ingress", + logging_consumer = "logging-consumer", + s3 = "s3", + charm_tracing = "charm-tracing", + catalogue = "catalogue", + + # Provides + grafana_dashboards_provider = "grafana-dashboards-provider", + grafana_source = "grafana-source", + mimir_cluster = "mimir-cluster", + receive_remote_write = "receive-remote-write", + self_metrics_endpoint = "self-metrics-endpoint", + } +} diff --git a/terraform/modules/mimir/variables.tf b/terraform/modules/mimir/variables.tf new file mode 100644 index 00000000..c6d35842 --- /dev/null +++ b/terraform/modules/mimir/variables.tf @@ -0,0 +1,129 @@ +variable "model" { + description = "Reference to an existing model resource or data source for the model to deploy to" + type = string +} + +variable "channel" { + description = "Channel that the charms are deployed from" + type = string +} + +variable "s3_integrator_channel" { + description = "Channel that the s3-integrator charm is deployed from" + type = string + default = "2/edge" +} + +variable "coordinator_revision" { + description = "Revision number of the coordinator charm" + type = number + default = null +} + +variable "worker_revision" { + description = "Revision number of the worker charm" + type = number + default = null +} + +variable "s3_integrator_revision" { + description = "Revision number of the s3-integrator charm" + type = number + default = 157 # FIXME: https://github.com/canonical/observability/issues/342 +} + +variable "s3_bucket" { + description = "Bucket name" + type = string + default = "mimir" +} + +variable "s3_access_key" { + description = "S3 access-key credential" + type = string +} + +variable "s3_secret_key" { + description = "S3 secret-key credential" + type = string + sensitive = true +} + +variable "s3_endpoint" { + description = "S3 endpoint" + type = string +} + +variable "anti_affinity" { + description = "Enable anti-affinity constraints." + type = bool + default = true +} + +# -------------- # App Names -------------- + +variable "read_name" { + description = "Name of the Mimir read (meta role) app" + type = string + default = "mimir-read" +} + +variable "write_name" { + description = "Name of the Mimir write (meta role) app" + type = string + default = "mimir-write" +} + +variable "backend_name" { + description = "Name of the Mimir backend (meta role) app" + type = string + default = "mimir-backend" +} + +variable "s3_integrator_name" { + description = "Name of the s3-integrator app" + type = string + default = "mimir-s3-integrator" +} + +# -------------- # Units Per App -------------- + +variable "read_units" { + description = "Number of Mimir worker units with the read meta role" + type = number + default = 1 + validation { + condition = var.read_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "write_units" { + description = "Number of Mimir worker units with the write meta role" + type = number + default = 1 + validation { + condition = var.write_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "backend_units" { + description = "Number of Mimir worker units with the backend meta role" + type = number + default = 1 + validation { + condition = var.backend_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "coordinator_units" { + description = "Number of Mimir coordinator units" + type = number + default = 1 + validation { + condition = var.coordinator_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} diff --git a/terraform/modules/mimir/versions.tf b/terraform/modules/mimir/versions.tf new file mode 100644 index 00000000..cde98c1a --- /dev/null +++ b/terraform/modules/mimir/versions.tf @@ -0,0 +1,9 @@ +terraform { + required_version = ">= 1.5" + required_providers { + juju = { + source = "juju/juju" + version = ">= 0.14.0" + } + } +} \ No newline at end of file diff --git a/terraform/modules/minio/main.tf b/terraform/modules/minio/main.tf new file mode 100644 index 00000000..f8edccb5 --- /dev/null +++ b/terraform/modules/minio/main.tf @@ -0,0 +1,43 @@ +resource "juju_application" "minio" { + # Coordinator requires s3 + name = var.minio_app + model = var.model_name + trust = true + + charm { + name = var.minio_app + channel = var.channel + } + units = 1 + + config = { + access-key = var.minio_user + secret-key = var.minio_password + } +} + +resource "null_resource" "s3management" { + triggers = { + # model_name = var.model_name + always_run = timestamp() + } + provisioner "local-exec" { + environment = { + MINIO_USER = var.minio_user + MINIO_PASSWORD = var.minio_password + } + command = <<-EOT + bash "${path.module}/scripts/s3management.sh" \ + --model-name ${var.model_name} \ + --minio-app ${var.minio_app} \ + --mc-binary-url ${var.mc_binary_url} \ + --minio-url "http://${var.minio_app}-0.${var.minio_app}-endpoints.${var.model_name}.svc.cluster.local:9000" \ + --loki-bucket ${var.loki.bucket_name} \ + --mimir-bucket ${var.mimir.bucket_name} \ + --tempo-bucket ${var.tempo.bucket_name} \ + --loki-integrator ${var.loki.s3_integrator_name} \ + --mimir-integrator ${var.mimir.s3_integrator_name} \ + --tempo-integrator ${var.tempo.s3_integrator_name} + EOT + } +} \ No newline at end of file diff --git a/terraform/modules/minio/outputs.tf b/terraform/modules/minio/outputs.tf new file mode 100644 index 00000000..7d42f35f --- /dev/null +++ b/terraform/modules/minio/outputs.tf @@ -0,0 +1,4 @@ +output "minio_name" { + value = var.minio_app + description = "The application name for Minio" +} diff --git a/terraform/modules/minio/scripts/s3management.sh b/terraform/modules/minio/scripts/s3management.sh new file mode 100755 index 00000000..ffc0a4d1 --- /dev/null +++ b/terraform/modules/minio/scripts/s3management.sh @@ -0,0 +1,112 @@ +#!/bin/bash + +set -euo pipefail + +# Variables +MODEL_NAME="" +MINIO_APP="" +MC_BINARY_URL="" +MINIO_URL="" +MINIO_USER="${MINIO_USER:-}" +MINIO_PASSWORD="${MINIO_PASSWORD:-}" +LOKI_BUCKET="" +MIMIR_BUCKET="" +TEMPO_BUCKET="" +LOKI_INTEGRATOR="" +MIMIR_INTEGRATOR="" +TEMPO_INTEGRATOR="" + +MC_BINARY="/root/minio/mc" + +# Parse arguments +while [[ "$#" -gt 0 ]]; do + case $1 in + --model-name) MODEL_NAME="$2"; shift ;; + --minio-app) MINIO_APP="$2"; shift ;; + --mc-binary-url) MC_BINARY_URL="$2"; shift ;; + --minio-url) MINIO_URL="$2"; shift ;; + --minio-user) MINIO_USER="$2"; shift ;; + --minio-password) MINIO_PASSWORD="$2"; shift ;; + --loki-bucket) LOKI_BUCKET="$2"; shift ;; + --mimir-bucket) MIMIR_BUCKET="$2"; shift ;; + --tempo-bucket) TEMPO_BUCKET="$2"; shift ;; + --loki-integrator) LOKI_INTEGRATOR="$2"; shift ;; + --mimir-integrator) MIMIR_INTEGRATOR="$2"; shift ;; + --tempo-integrator) TEMPO_INTEGRATOR="$2"; shift ;; + *) echo "Unknown parameter passed: $1"; exit 1 ;; + esac + shift +done + +# Credentials validation +if [[ -z "$MINIO_USER" || -z "$MINIO_PASSWORD" ]]; then + echo "Error: MINIO_USER and MINIO_PASSWORD must be set either as arguments or environment variables." + exit 1 +fi + + +# Functions +wait_for_app() { + local app="$1" + local status="${2:-active}" + + echo "Waiting for application $app in model $MODEL_NAME..." + juju wait-for application "$app" -m "$MODEL_NAME" --query="status=='$status'" --timeout 20m +} + +bucket_exists() { + local bucket_name="$1" + juju ssh -m "$MODEL_NAME" "$MINIO_APP/leader" "$MC_BINARY" ls local/ | grep -q "$bucket_name" +} + +mc_exists() { + echo "Checking if mc is already downlaoded..." + juju ssh -m "$MODEL_NAME" "$MINIO_APP/leader" ls "$MC_BINARY" +} + +configure_s3() { + local bucket_name="$1" + local integrator="$2" + + + echo "Checking if bucket $bucket_name exists..." + if bucket_exists "$bucket_name"; then + echo "Bucket $bucket_name already exists. Skipping creation." + else + echo "Creating bucket $bucket_name..." + juju ssh -m "$MODEL_NAME" "$MINIO_APP/leader" "$MC_BINARY" mb local/"$bucket_name" + fi + + wait_for_app "$integrator" "blocked" + + echo "Configuring $integrator..." + juju config "$integrator" endpoint="$MINIO_URL" bucket="$bucket_name" + + echo "Syncing S3 credentials for $integrator..." + juju run -m "$MODEL_NAME" "$integrator/leader" sync-s3-credentials access-key="$MINIO_USER" secret-key="$MINIO_PASSWORD" +} + +configure_minio() { + # Wait for MinIO app + wait_for_app "$MINIO_APP" + + if mc_exists; then + echo "MinIO client is already downloaded. Skipping download." + else + echo "Downloading MinIO client..." + juju ssh -m "$MODEL_NAME" "$MINIO_APP/leader" curl "$MC_BINARY_URL" --create-dirs -o "$MC_BINARY" + fi + + juju ssh -m "$MODEL_NAME" "$MINIO_APP/leader" chmod +x "$MC_BINARY" + juju ssh -m "$MODEL_NAME" "$MINIO_APP/leader" "$MC_BINARY" alias set local "$MINIO_URL" "$MINIO_USER" "$MINIO_PASSWORD" +} + +# Configure MinIO +configure_minio + +# Configure buckets and sync credentials +configure_s3 "$LOKI_BUCKET" "$LOKI_INTEGRATOR" +configure_s3 "$MIMIR_BUCKET" "$MIMIR_INTEGRATOR" +configure_s3 "$TEMPO_BUCKET" "$TEMPO_INTEGRATOR" + +echo "S3 configuration complete!" diff --git a/terraform/modules/minio/variables.tf b/terraform/modules/minio/variables.tf new file mode 100644 index 00000000..8649e8d2 --- /dev/null +++ b/terraform/modules/minio/variables.tf @@ -0,0 +1,47 @@ +variable "channel" { + description = "Charms channel" + type = string + default = "latest/edge" +} + +variable "model_name" { + description = "Model name" + type = string +} + +variable "minio_app" { + description = "Minio user" + type = string + default = "minio" +} + +variable "minio_user" { + description = "Minio user" + type = string +} + +variable "minio_password" { + description = "Minio Password" + type = string +} + +variable "mc_binary_url" { + description = "mc binary URL" + type = string + default = "https://dl.min.io/client/mc/release/linux-amd64/mc" +} + +variable "loki" { + description = "Configuration outputs from the Loki module, including bucket and integrator details." + type = any +} + +variable "mimir" { + description = "Configuration outputs from the Mimir module, including bucket and integrator details." + type = any +} + +variable "tempo" { + description = "Configuration outputs from the Tempo module, including bucket and integrator details." + type = any +} diff --git a/terraform/modules/minio/version.tf b/terraform/modules/minio/version.tf new file mode 100644 index 00000000..77b64403 --- /dev/null +++ b/terraform/modules/minio/version.tf @@ -0,0 +1,9 @@ +terraform { + required_version = ">= 1.5" + required_providers { + juju = { + source = "juju/juju" + version = "~> 0.14" + } + } +} \ No newline at end of file diff --git a/terraform/modules/tempo/README.md b/terraform/modules/tempo/README.md new file mode 100644 index 00000000..47ad1aee --- /dev/null +++ b/terraform/modules/tempo/README.md @@ -0,0 +1,63 @@ +# Terraform module for Tempo solution + +This is a Terraform module facilitating the deployment of Tempo solution, using the [Terraform juju provider](https://github.com/juju/terraform-provider-juju/). For more information, refer to the provider [documentation](https://registry.terraform.io/providers/juju/juju/latest/docs). + +The solution consists of the following Terraform modules: +- [tempo-coordinator-k8s](https://github.com/canonical/tempo-coordinator-k8s-operator): ingress, cluster coordination, single integration facade. +- [tempo-worker-k8s](https://github.com/canonical/tempo-worker-k8s-operator): run one or more tempo application components. +- [s3-integrator](https://github.com/canonical/s3-integrator): facade for S3 storage configurations. +- [self-signed-certificates](https://github.com/canonical/self-signed-certificates-operator): certificates operator to secure traffic with TLS. + +This Terraform module deploys Tempo in its [microservices mode](https://grafana.com/docs/tempo/latest/setup/deployment/#microservices-mode), which runs each one of the required roles in distinct processes. [See](https://discourse.charmhub.io/t/topic/15484) to understand more about Tempo roles. + + +> [!NOTE] +> `s3-integrator` itself doesn't act as an S3 object storage system. For the solution to be functional, `s3-integrator` needs to point to an S3-like storage. See [this guide](https://discourse.charmhub.io/t/cos-lite-docs-set-up-minio/15211) to learn how to connect to an S3-like storage for traces. + +## Requirements +This module requires a `juju` model to be available. Refer to the [usage section](#usage) below for more details. + +## API + +### Inputs +The module offers the following configurable inputs: + +| Name | Type | Description | Default | +| - | - | - | - | +| `channel`| string | Channel that the charms are deployed from | | +| `compactor_units`| number | Number of Tempo worker units with compactor role | 1 | +| `distributor_units`| number | Number of Tempo worker units with distributor role | 1 | +| `ingester_units`| number | Number of Tempo worker units with ingester role | 1 | +| `metrics_generator_units`| number | Number of Tempo worker units with metrics-generator role | 1 | +| `model`| string | Name of the model that the charm is deployed on | | +| `querier_units`| number | Number of Tempo worker units with querier role | 1 | +| `query_frontend_units`| number | Number of Tempo worker units with query-frontend role | 1 | +| `coordinator_units`| number | Number of Tempo coordinator units | 1 | +| `s3_integrator_name` | string | Name of the s3-integrator app | 1 | +| `s3_bucket` | string | Name of the bucke in which Tempo stores traces | 1 | +| `s3_access_key` | string | Access key credential to connect to the S3 provider | 1 | +| `s3_secret_key` | string | Secret key credential to connect to the S3 provider | 1 | +| `s3_endpoint` | string | Endpoint of the S3 provider | 1 | + + +### Outputs +Upon application, the module exports the following outputs: + +| Name | Type | Description | +| - | - | - | +| `app_names`| map(string) | Names of the deployed applications | +| `endpoints`| map(string) | Map of all `provides` and `requires` endpoints | + +## Usage + + +### Basic usage + +Users should ensure that Terraform is aware of the `juju_model` dependency of the charm module. + +To deploy this module with its needed dependency, you can run `terraform apply -var="model_name=" -auto-approve`. This would deploy all Tempo components in the same model. + +### Microservice deployment + +By default, this Terraform module will deploy each Tempo worker with `1` unit. To configure the module to run `x` units of any worker role, you can run `terraform apply -var="model_name=" -var="_units=" -auto-approve`. +See [Tempo worker roles](https://discourse.charmhub.io/t/tempo-worker-roles/15484) for the recommended scale for each role. diff --git a/terraform/modules/tempo/main.tf b/terraform/modules/tempo/main.tf new file mode 100644 index 00000000..db82bac9 --- /dev/null +++ b/terraform/modules/tempo/main.tf @@ -0,0 +1,247 @@ +resource "juju_secret" "tempo_s3_credentials_secret" { + model = var.model + name = "tempo_s3_credentials" + value = { + access-key = var.s3_access_key + secret-key = var.s3_secret_key + } + info = "Credentials for the S3 endpoint" +} + +resource "juju_access_secret" "tempo_s3_secret_access" { + model = var.model + applications = [ + juju_application.s3_integrator.name + ] + secret_id = juju_secret.tempo_s3_credentials_secret.secret_id +} + +# TODO: Replace s3_integrator resource to use its remote terraform module once available +resource "juju_application" "s3_integrator" { + name = var.s3_integrator_name + model = var.model + trust = true + + charm { + name = "s3-integrator" + channel = var.s3_integrator_channel + revision = var.s3_integrator_revision + } + config = { + endpoint = var.s3_endpoint + bucket = var.s3_bucket + credentials = "secret:${juju_secret.tempo_s3_credentials_secret.secret_id}" + } + units = 1 +} + +module "tempo_coordinator" { + source = "git::https://github.com/canonical/tempo-coordinator-k8s-operator//terraform" + model = var.model + channel = var.channel + revision = var.coordinator_revision + units = var.coordinator_units + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=tempo,anti-pod.topology-key=kubernetes.io/hostname" : null +} + +module "tempo_querier" { + source = "git::https://github.com/canonical/tempo-worker-k8s-operator//terraform" + app_name = var.querier_name + model = var.model + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.querier_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-all = false + role-querier = true + } + revision = var.worker_revision + units = var.querier_units + depends_on = [ + module.tempo_coordinator + ] +} + +module "tempo_query_frontend" { + source = "git::https://github.com/canonical/tempo-worker-k8s-operator//terraform" + app_name = var.query_frontend_name + model = var.model + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.query_frontend_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-all = false + role-query-frontend = true + } + revision = var.worker_revision + units = var.query_frontend_units + depends_on = [ + module.tempo_coordinator + ] +} + +module "tempo_ingester" { + source = "git::https://github.com/canonical/tempo-worker-k8s-operator//terraform" + app_name = var.ingester_name + model = var.model + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.ingester_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-all = false + role-ingester = true + } + revision = var.worker_revision + units = var.ingester_units + depends_on = [ + module.tempo_coordinator + ] +} + +module "tempo_distributor" { + source = "git::https://github.com/canonical/tempo-worker-k8s-operator//terraform" + app_name = var.distributor_name + model = var.model + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.distributor_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-all = false + role-distributor = true + } + revision = var.worker_revision + units = var.distributor_units + depends_on = [ + module.tempo_coordinator + ] +} + +module "tempo_compactor" { + source = "git::https://github.com/canonical/tempo-worker-k8s-operator//terraform" + app_name = var.compactor_name + model = var.model + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.compactor_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-all = false + role-compactor = true + } + revision = var.worker_revision + units = var.compactor_units + depends_on = [ + module.tempo_coordinator + ] +} + +module "tempo_metrics_generator" { + source = "git::https://github.com/canonical/tempo-worker-k8s-operator//terraform" + app_name = var.metrics_generator_name + model = var.model + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.metrics_generator_name},anti-pod.topology-key=kubernetes.io/hostname" : null + config = { + role-all = false + role-metrics-generator = true + } + revision = var.worker_revision + units = var.metrics_generator_units + depends_on = [ + module.tempo_coordinator + ] +} + +#Integrations + +resource "juju_integration" "coordinator_to_s3_integrator" { + model = var.model + + application { + name = juju_application.s3_integrator.name + endpoint = "s3-credentials" + } + + application { + name = module.tempo_coordinator.app_name + endpoint = "s3" + } +} + +resource "juju_integration" "coordinator_to_querier" { + model = var.model + + application { + name = module.tempo_coordinator.app_name + endpoint = "tempo-cluster" + } + + application { + name = module.tempo_querier.app_name + endpoint = "tempo-cluster" + } +} + +resource "juju_integration" "coordinator_to_query_frontend" { + model = var.model + + application { + name = module.tempo_coordinator.app_name + endpoint = "tempo-cluster" + } + + application { + name = module.tempo_query_frontend.app_name + endpoint = "tempo-cluster" + } +} + +resource "juju_integration" "coordinator_to_ingester" { + model = var.model + + application { + name = module.tempo_coordinator.app_name + endpoint = "tempo-cluster" + } + + application { + name = module.tempo_ingester.app_name + endpoint = "tempo-cluster" + } +} + +resource "juju_integration" "coordinator_to_distributor" { + model = var.model + + application { + name = module.tempo_coordinator.app_name + endpoint = "tempo-cluster" + } + + application { + name = module.tempo_distributor.app_name + endpoint = "tempo-cluster" + } +} + +resource "juju_integration" "coordinator_to_compactor" { + model = var.model + + application { + name = module.tempo_coordinator.app_name + endpoint = "tempo-cluster" + } + + application { + name = module.tempo_compactor.app_name + endpoint = "tempo-cluster" + } +} + +resource "juju_integration" "coordinator_to_metrics_generator" { + model = var.model + + application { + name = module.tempo_coordinator.app_name + endpoint = "tempo-cluster" + } + + application { + name = module.tempo_metrics_generator.app_name + endpoint = "tempo-cluster" + } +} diff --git a/terraform/modules/tempo/outputs.tf b/terraform/modules/tempo/outputs.tf new file mode 100644 index 00000000..a4579bec --- /dev/null +++ b/terraform/modules/tempo/outputs.tf @@ -0,0 +1,33 @@ +output "app_names" { + value = merge( + { + tempo_s3_integrator = juju_application.s3_integrator.name, + tempo_coordinator = module.tempo_coordinator.app_name, + tempo_querier = module.tempo_querier.app_name, + tempo_query_frontend = module.tempo_query_frontend.app_name, + tempo_ingester = module.tempo_ingester.app_name, + tempo_distributor = module.tempo_distributor.app_name, + tempo_compactor = module.tempo_compactor.app_name, + tempo_metrics_generator = module.tempo_metrics_generator.app_name, + } + ) +} + +output "endpoints" { + value = { + # Requires + logging = "logging", + ingress = "ingress", + certificates = "certificates", + send-remote-write = "send-remote-write", + receive_datasource = "receive-datasource" + catalogue = "catalogue", + + # Provides + tempo_cluster = "tempo-cluster" + grafana_dashboard = "grafana-dashboard", + grafana_source = "grafana-source", + metrics_endpoint = "metrics-endpoint", + tracing = "tracing", + } +} diff --git a/terraform/modules/tempo/variables.tf b/terraform/modules/tempo/variables.tf new file mode 100644 index 00000000..42db6db6 --- /dev/null +++ b/terraform/modules/tempo/variables.tf @@ -0,0 +1,176 @@ +variable "model" { + description = "Reference to an existing model resource or data source for the model to deploy to" + type = string +} + +variable "channel" { + description = "Channel that the charms are deployed from" + type = string +} + +variable "s3_integrator_channel" { + description = "Channel that the s3-integrator charm is deployed from" + type = string + default = "2/edge" +} + +variable "coordinator_revision" { + description = "Revision number of the coordinator charm" + type = number + default = null +} + +variable "worker_revision" { + description = "Revision number of the worker charm" + type = number + default = null +} + +variable "s3_integrator_revision" { + description = "Revision number of the s3-integrator charm" + type = number + default = 157 # FIXME: https://github.com/canonical/observability/issues/342 +} + +variable "s3_bucket" { + description = "Bucket name" + type = string + default = "tempo" +} + +variable "s3_access_key" { + description = "S3 access-key credential" + type = string +} + +variable "s3_secret_key" { + description = "S3 secret-key credential" + type = string + sensitive = true +} + +variable "s3_endpoint" { + description = "S3 endpoint" + type = string +} + +variable "anti_affinity" { + description = "Enable anti-affinity constraints" + type = bool + default = true +} + +# -------------- # App Names -------------- + +variable "querier_name" { + description = "Name of the Tempo querier app" + type = string + default = "tempo-querier" +} + +variable "query_frontend_name" { + description = "Name of the Tempo query-frontend app" + type = string + default = "tempo-query-frontend" +} + +variable "ingester_name" { + description = "Name of the Tempo ingester app" + type = string + default = "tempo-ingester" +} + +variable "distributor_name" { + description = "Name of the Tempo distributor app" + type = string + default = "tempo-distributor" +} + +variable "compactor_name" { + description = "Name of the Tempo compactor app" + type = string + default = "tempo-compactor" +} + +variable "metrics_generator_name" { + description = "Name of the Tempo metrics-generator app" + type = string + default = "tempo-metrics-generator" +} + +variable "s3_integrator_name" { + description = "Name of the s3-integrator app" + type = string + default = "tempo-s3-integrator" +} + +# -------------- # Units Per App -------------- + +variable "compactor_units" { + description = "Number of Tempo worker units with compactor role" + type = number + default = 1 + validation { + condition = var.compactor_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "distributor_units" { + description = "Number of Tempo worker units with distributor role" + type = number + default = 1 + validation { + condition = var.distributor_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "ingester_units" { + description = "Number of Tempo worker units with ingester role" + type = number + default = 1 + validation { + condition = var.ingester_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "metrics_generator_units" { + description = "Number of Tempo worker units with metrics-generator role" + type = number + default = 1 + validation { + condition = var.metrics_generator_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "coordinator_units" { + description = "Number of Tempo coordinator units" + type = number + default = 1 + validation { + condition = var.coordinator_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} + +variable "querier_units" { + description = "Number of Tempo worker units with querier role" + type = number + default = 1 + validation { + condition = var.querier_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} +variable "query_frontend_units" { + description = "Number of Tempo worker units with query-frontend role" + type = number + default = 1 + validation { + condition = var.query_frontend_units >= 1 + error_message = "The number of units must be greater than or equal to 1." + } +} diff --git a/terraform/modules/tempo/versions.tf b/terraform/modules/tempo/versions.tf new file mode 100644 index 00000000..cde98c1a --- /dev/null +++ b/terraform/modules/tempo/versions.tf @@ -0,0 +1,9 @@ +terraform { + required_version = ">= 1.5" + required_providers { + juju = { + source = "juju/juju" + version = ">= 0.14.0" + } + } +} \ No newline at end of file diff --git a/terraform/scripts/hcl-generator/generate_integrations.py b/terraform/scripts/hcl-generator/generate_integrations.py new file mode 100644 index 00000000..28d5dee1 --- /dev/null +++ b/terraform/scripts/hcl-generator/generate_integrations.py @@ -0,0 +1,116 @@ +import yaml +import sys +import hcl2 +import os +import argparse +from pathlib import Path + +OUTPUTS_TF_FILE = "outputs.tf" + + +def build_parser(): + """Create and configure the argument parser for the script.""" + + parser = argparse.ArgumentParser(description="Process YAML and generate Terraform output.") + + parser.add_argument( + '--input-yaml', + required=True, + help='Path to the input YAML file (charmcraft.yaml or metadata.yaml)' + ) + + parser.add_argument( + '--outputs-tf', + default=OUTPUTS_TF_FILE, + help=f'Path to the output Terraform file (default: {OUTPUTS_TF_FILE})' + ) + + return parser + + +class HCLGenerator(object): + def __init__(self, input_yaml: str, outputs_tf: str): + self.input_yaml = Path(input_yaml) + if outputs_tf == OUTPUTS_TF_FILE: + self.outputs_tf = Path(os.getcwd()) / outputs_tf + else: + self.outputs_tf = Path(outputs_tf) + + def parse_yaml(self): + """Parse the YAML file and return the data""" + try: + with open(self.input_yaml, "r") as file: + return yaml.safe_load(file) + except Exception as e: + print(f"Error reading YAML file: {e}") + sys.exit(1) + + @staticmethod + def format_keys(section): + """ + Format the keys by replacing hyphens with underscores + Although HCL allows dashes in keys, this does not allow for dot notation + """ + return {key.replace("-", "_"): key for key in section} + + def create_file_with_parents(self): + """Create the file and parent directories if they don't exist""" + self.outputs_tf.parent.mkdir(parents=True, exist_ok=True) + self.outputs_tf.touch(exist_ok=True) + + def generate_output(self, data): + """Generate the output string based on the parsed YAML data""" + requires = data.get("requires", {}) + provides = data.get("provides", {}) + + # Format the keys in the 'requires' and 'provides' sections + requires_formatted = self.format_keys(requires) + provides_formatted = self.format_keys(provides) + + # Prepare the output string + output = 'output "endpoints" {\n value = {\n' + + # Add requires + output += " # Requires\n" + for key, value in requires_formatted.items(): + output += f' {key:<20} = "{value}",\n' + + # Add provides + output += " # Provides\n" + for key, value in provides_formatted.items(): + output += f' {key:<20} = "{value}",\n' + + output += " }\n}" + # TODO: Create a function for `terraform format` of the output + return output + + def write_hcl_file(self, hcl_content): + """Parse the YAML file and return the data""" + + self.create_file_with_parents() + + with open(self.outputs_tf, "r") as file: + read_obj = hcl2.load(file) + + if read_obj: + print("WE HAD CONTENTS") + + with open(self.outputs_tf, "w") as file: + file.write(hcl_content) + + +def main(): + """Main function to handle script execution""" + + parser = build_parser() + args = parser.parse_args() + + gen = HCLGenerator(args.input_yaml, args.outputs_tf) + data = gen.parse_yaml() + output_raw = gen.generate_output(data) + print(output_raw) + gen.write_hcl_file(output_raw) + + +if __name__ == "__main__": + main() From 893c1c00e61fda43d81241fba51a6e0c88639872 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Fri, 13 Jun 2025 12:55:55 -0400 Subject: [PATCH 02/20] feat: tf CI --- .github/workflows/_local-pull-request.yaml | 32 +++++++++++++++++++++ justfile | 33 ++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 .github/workflows/_local-pull-request.yaml create mode 100644 justfile diff --git a/.github/workflows/_local-pull-request.yaml b/.github/workflows/_local-pull-request.yaml new file mode 100644 index 00000000..05be23e6 --- /dev/null +++ b/.github/workflows/_local-pull-request.yaml @@ -0,0 +1,32 @@ +name: Pull Requests + +on: + pull_request: + branches: + - main + +jobs: + lint-terraform: + name: Terraform lint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install dependencies + run: | + sudo snap install terraform --classic + sudo snap install just --classic + - name: Lint the Terraform modules + run: just lint-terraform + lint-workflows: + name: Workflows Lint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install dependencies + run: | + sudo snap install astral-uv --classic + sudo snap install just --classic + - name: Lint the workflows + run: just lint-workflows diff --git a/justfile b/justfile new file mode 100644 index 00000000..716a3097 --- /dev/null +++ b/justfile @@ -0,0 +1,33 @@ +set quiet # Recipes are silent by default +set export # Just variables are exported to the environment + +terraform := `which terraform || which tofu || echo ""` # require 'terraform' or 'opentofu' + +[private] +default: + just --list + +# Lint everything +[group("Lint")] +lint: lint-terraform lint-workflows + +# Format everything +[group("Format")] +fmt: format-terraform + +# Lint the Terraform modules +[group("Lint")] +lint-terraform: + if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi + $terraform fmt -check -recursive -diff + +# Lint the Github workflows +[group("Lint")] +lint-workflows: + uvx --from=actionlint-py actionlint + +# Format the Terraform modules +[group("Format")] +format-terraform: + if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi + $terraform fmt -recursive -diff From 8dd132a8958f793a86b0c3ff91cccb1469836eb5 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Fri, 13 Jun 2025 12:57:47 -0400 Subject: [PATCH 03/20] chore: fmt TF file --- .../installation/cos-canonical-k8s-sandbox.tf | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/tutorial/installation/cos-canonical-k8s-sandbox.tf b/docs/tutorial/installation/cos-canonical-k8s-sandbox.tf index 9afa4867..2847032c 100644 --- a/docs/tutorial/installation/cos-canonical-k8s-sandbox.tf +++ b/docs/tutorial/installation/cos-canonical-k8s-sandbox.tf @@ -1,13 +1,13 @@ module "cos" { - source = "git::https://github.com/canonical/observability//terraform/modules/cos" - model_name = "cos" - channel = "1/stable" - s3_endpoint = "http://{{IPADDR}}:8080" - s3_password = "secret-key" - s3_user = "access-key" - loki_bucket = "loki" - mimir_bucket = "mimir" - tempo_bucket = "tempo" - ssc_channel = "1/stable" - anti_affinity = true + source = "git::https://github.com/canonical/observability//terraform/modules/cos" + model_name = "cos" + channel = "1/stable" + s3_endpoint = "http://{{IPADDR}}:8080" + s3_password = "secret-key" + s3_user = "access-key" + loki_bucket = "loki" + mimir_bucket = "mimir" + tempo_bucket = "tempo" + ssc_channel = "1/stable" + anti_affinity = true } From c53ad2ae44f91232d3fb7c291b1369ff2f5c9684 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Mon, 16 Jun 2025 10:20:22 -0400 Subject: [PATCH 04/20] feat: validate TF in CI --- .github/workflows/_local-pull-request.yaml | 22 ++++- justfile | 14 ++- terraform/modules/cos-lite/README.md | 18 ++-- terraform/modules/cos-lite/main.tf | 108 ++++++++++----------- terraform/modules/cos-lite/variables.tf | 2 +- terraform/modules/cos/README.md | 14 +-- terraform/modules/cos/outputs.tf | 2 +- 7 files changed, 96 insertions(+), 84 deletions(-) diff --git a/.github/workflows/_local-pull-request.yaml b/.github/workflows/_local-pull-request.yaml index 05be23e6..394aa344 100644 --- a/.github/workflows/_local-pull-request.yaml +++ b/.github/workflows/_local-pull-request.yaml @@ -6,6 +6,18 @@ on: - main jobs: + lint-workflows: + name: Workflows Lint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install dependencies + run: | + sudo snap install astral-uv --classic + sudo snap install just --classic + - name: Lint the workflows + run: just lint-workflows lint-terraform: name: Terraform lint runs-on: ubuntu-latest @@ -18,15 +30,15 @@ jobs: sudo snap install just --classic - name: Lint the Terraform modules run: just lint-terraform - lint-workflows: - name: Workflows Lint + validate-terraform: + name: Terraform validate runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install dependencies run: | - sudo snap install astral-uv --classic + sudo snap install terraform --classic sudo snap install just --classic - - name: Lint the workflows - run: just lint-workflows + - name: Validate the Terraform modules + run: just validate-terraform diff --git a/justfile b/justfile index 716a3097..8736439c 100644 --- a/justfile +++ b/justfile @@ -15,16 +15,22 @@ lint: lint-terraform lint-workflows [group("Format")] fmt: format-terraform +# Lint the Github workflows +[group("Lint")] +lint-workflows: + uvx --from=actionlint-py actionlint + # Lint the Terraform modules [group("Lint")] lint-terraform: if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi $terraform fmt -check -recursive -diff -# Lint the Github workflows -[group("Lint")] -lint-workflows: - uvx --from=actionlint-py actionlint +# Validate the Terraform modules +[group("Validate")] +validate-terraform: + if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi + $terraform validate # Format the Terraform modules [group("Format")] diff --git a/terraform/modules/cos-lite/README.md b/terraform/modules/cos-lite/README.md index c99645ae..9e95d9d7 100644 --- a/terraform/modules/cos-lite/README.md +++ b/terraform/modules/cos-lite/README.md @@ -3,11 +3,13 @@ Terraform module for COS solution This is a Terraform module facilitating the deployment of COS solution, using the [Terraform juju provider](https://github.com/juju/terraform-provider-juju/). For more information, refer to the provider [documentation](https://registry.terraform.io/providers/juju/juju/latest/docs). The COS Lite solution consists of the following Terraform modules: -- [grafana-k8s](https://github.com/canonical/grafana-k8s-operator): Visualization, monitoring, and dashboards. - [alertmanager-k8s](https://github.com/canonical/alertmanager-k8s-operator): Handles alerts sent by clients applications. -- [prometheus-k8s](https://github.com/canonical/prometheus-k8s-operator/tree/main/terraform/): Backend for metrics +- [catalogue-k8s](https://github.com/canonical/catalogue-k8s-operator/tree/main/terraform): UI catalogue. +- [grafana-k8s](https://github.com/canonical/grafana-k8s-operator): Visualization, monitoring, and dashboards. - [loki-k8s](https://github.com/canonical/loki-k8s-operator/tree/main/terraform): Backend for logs +- [prometheus-k8s](https://github.com/canonical/prometheus-k8s-operator/tree/main/terraform/): Backend for metrics - [self-signed-certificates](https://github.com/canonical/self-signed-certificates-operator): certificates operator to secure traffic with TLS. +- [traefik](https://github.com/canonical/traefik-k8s-operator/tree/main/terraform): ingress. ## Requirements @@ -19,11 +21,11 @@ This module requires a `juju` model to be available. Refer to the [usage section The module offers the following configurable inputs: -| Name | Type | Description | Required | -|--------------|--------|------------------------------------------------------------------------|-------------| -| `channel` | string | Channel that the charms are deployed from | latest/edge | -| `model_name` | string | Name of the model that the charm is deployed on | | -| `use_tls` | bool | Specify whether to use TLS or not for coordinator-worker communication | | +| Name | Type | Description | Default | +|--|--|--|--| +| `channel` | string | Channel that all the charms (unless overwritten) are deployed from | +| `model` | string | Reference to an existing model resource or data source for the model to deploy to | +| `use_tls` | bool | Specify whether to use TLS or not for coordinator-worker communication | true | ### Outputs @@ -42,5 +44,5 @@ Upon application, the module exports the following outputs: Users should ensure that Terraform is aware of the `juju_model` dependency of the charm module. -To deploy this module with its needed dependency, you can run `terraform apply -var="model_name=" -auto-approve`. This would deploy all COS HA solution modules in the same model. +To deploy this module with its needed dependency, you can run `terraform apply -var="model=" -auto-approve`. This would deploy all COS HA solution modules in the same model. diff --git a/terraform/modules/cos-lite/main.tf b/terraform/modules/cos-lite/main.tf index 71331838..b3343dcc 100644 --- a/terraform/modules/cos-lite/main.tf +++ b/terraform/modules/cos-lite/main.tf @@ -1,62 +1,60 @@ # -------------- # Applications -------------- -module "ssc" { - count = var.use_tls ? 1 : 0 - source = "git::https://github.com/canonical/self-signed-certificates-operator//terraform" - model = var.model_name - channel = var.channel -} - module "alertmanager" { - source = "git::https://github.com/canonical/alertmanager-k8s-operator//terraform" - app_name = "alertmanager" - model_name = var.model_name - channel = var.channel + source = "git::https://github.com/canonical/alertmanager-k8s-operator//terraform" + app_name = "alertmanager" + model = var.model + channel = var.channel } module "catalogue" { - source = "git::https://github.com/canonical/catalogue-k8s-operator//terraform" - app_name = "catalogue" - model_name = var.model_name - channel = var.channel + source = "git::https://github.com/canonical/catalogue-k8s-operator//terraform" + app_name = "catalogue" + model = var.model + channel = var.channel } -module "prometheus" { - source = "git::https://github.com/canonical/prometheus-k8s-operator//terraform" - app_name = "prometheus" - model_name = var.model_name - channel = var.channel +module "grafana" { + source = "git::https://github.com/canonical/grafana-k8s-operator//terraform" + app_name = "grafana" + model = var.model + channel = var.channel } module "loki" { source = "git::https://github.com/canonical/loki-k8s-operator//terraform" app_name = "loki" - model_name = var.model_name + model_name = var.model channel = var.channel } -module "grafana" { - source = "git::https://github.com/canonical/grafana-k8s-operator//terraform" - app_name = "grafana" - model_name = var.model_name +module "prometheus" { + source = "git::https://github.com/canonical/prometheus-k8s-operator//terraform" + app_name = "prometheus" + model_name = var.model channel = var.channel } -module "traefik" { - source = "git::https://github.com/canonical/traefik-k8s-operator//terraform" - app_name = "traefik" - model_name = var.model_name - channel = var.channel +module "ssc" { + count = var.use_tls ? 1 : 0 + source = "git::https://github.com/canonical/self-signed-certificates-operator//terraform" + model = var.model + channel = var.channel } +module "traefik" { + source = "git::https://github.com/canonical/traefik-k8s-operator//terraform" + app_name = "traefik" + model = var.model + channel = var.channel +} # -------------- # Integrations -------------- - # Provided by Alertmanager resource "juju_integration" "alertmanager_grafana_dashboards" { - model = var.model_name + model = var.model application { name = module.alertmanager.app_name @@ -70,7 +68,7 @@ resource "juju_integration" "alertmanager_grafana_dashboards" { } resource "juju_integration" "alertmanager_prometheus" { - model = var.model_name + model = var.model application { name = module.prometheus.app_name @@ -84,7 +82,7 @@ resource "juju_integration" "alertmanager_prometheus" { } resource "juju_integration" "alertmanager_self_monitoring_prometheus" { - model = var.model_name + model = var.model application { name = module.prometheus.app_name @@ -98,7 +96,7 @@ resource "juju_integration" "alertmanager_self_monitoring_prometheus" { } resource "juju_integration" "alertmanager_loki" { - model = var.model_name + model = var.model application { name = module.loki.app_name @@ -113,7 +111,7 @@ resource "juju_integration" "alertmanager_loki" { resource "juju_integration" "grafana_source_alertmanager" { - model = var.model_name + model = var.model application { name = module.alertmanager.app_name @@ -129,7 +127,7 @@ resource "juju_integration" "grafana_source_alertmanager" { # Provided by Grafana resource "juju_integration" "grafana_self_monitoring_prometheus" { - model = var.model_name + model = var.model application { name = module.prometheus.app_name @@ -146,7 +144,7 @@ resource "juju_integration" "grafana_self_monitoring_prometheus" { # Provided by Prometheus resource "juju_integration" "prometheus_grafana_dashboards_provider" { - model = var.model_name + model = var.model application { name = module.prometheus.app_name @@ -160,7 +158,7 @@ resource "juju_integration" "prometheus_grafana_dashboards_provider" { } resource "juju_integration" "prometheus_grafana_source" { - model = var.model_name + model = var.model application { name = module.prometheus.app_name @@ -179,7 +177,7 @@ resource "juju_integration" "prometheus_grafana_source" { # Provided by Loki resource "juju_integration" "loki_grafana_dashboards_provider" { - model = var.model_name + model = var.model application { name = module.loki.app_name @@ -193,7 +191,7 @@ resource "juju_integration" "loki_grafana_dashboards_provider" { } resource "juju_integration" "loki_grafana_source" { - model = var.model_name + model = var.model application { name = module.loki.app_name @@ -207,7 +205,7 @@ resource "juju_integration" "loki_grafana_source" { } resource "juju_integration" "loki_self_monitoring_prometheus" { - model = var.model_name + model = var.model application { name = module.prometheus.app_name @@ -224,7 +222,7 @@ resource "juju_integration" "loki_self_monitoring_prometheus" { # Provided by Catalogue resource "juju_integration" "catalogue_alertmanager" { - model = var.model_name + model = var.model application { name = module.catalogue.app_name @@ -238,7 +236,7 @@ resource "juju_integration" "catalogue_alertmanager" { } resource "juju_integration" "catalogue_grafana" { - model = var.model_name + model = var.model application { name = module.catalogue.app_name @@ -252,7 +250,7 @@ resource "juju_integration" "catalogue_grafana" { } resource "juju_integration" "catalogue_prometheus" { - model = var.model_name + model = var.model application { name = module.catalogue.app_name @@ -269,7 +267,7 @@ resource "juju_integration" "catalogue_prometheus" { # Provided by Traefik resource "juju_integration" "alertmanager_ingress" { - model = var.model_name + model = var.model application { name = module.traefik.app_name @@ -284,7 +282,7 @@ resource "juju_integration" "alertmanager_ingress" { resource "juju_integration" "catalogue_ingress" { - model = var.model_name + model = var.model application { name = module.traefik.app_name @@ -298,7 +296,7 @@ resource "juju_integration" "catalogue_ingress" { } resource "juju_integration" "grafana_ingress" { - model = var.model_name + model = var.model application { name = module.traefik.app_name @@ -312,7 +310,7 @@ resource "juju_integration" "grafana_ingress" { } resource "juju_integration" "prometheus_ingress" { - model = var.model_name + model = var.model application { name = module.traefik.app_name @@ -326,7 +324,7 @@ resource "juju_integration" "prometheus_ingress" { } resource "juju_integration" "loki_ingress" { - model = var.model_name + model = var.model application { name = module.traefik.app_name @@ -340,7 +338,7 @@ resource "juju_integration" "loki_ingress" { } resource "juju_integration" "traefik_self_monitoring_prometheus" { - model = var.model_name + model = var.model application { name = module.prometheus.app_name @@ -357,28 +355,28 @@ resource "juju_integration" "traefik_self_monitoring_prometheus" { resource "juju_offer" "alertmanager-karma-dashboard" { name = "alertmanager-karma-dashboard" - model = var.model_name + model = var.model application_name = module.alertmanager.app_name endpoint = "karma-dashboard" } resource "juju_offer" "grafana-dashboards" { name = "grafana-dashboards" - model = var.model_name + model = var.model application_name = module.grafana.app_name endpoint = "grafana-dashboard" } resource "juju_offer" "loki-logging" { name = "loki-logging" - model = var.model_name + model = var.model application_name = module.loki.app_name endpoint = "logging" } resource "juju_offer" "prometheus-receive-remote-write" { name = "prometheus-receive-remote-write" - model = var.model_name + model = var.model application_name = module.prometheus.app_name endpoint = "receive-remote-write" } diff --git a/terraform/modules/cos-lite/variables.tf b/terraform/modules/cos-lite/variables.tf index c8f3a356..fd74d96a 100644 --- a/terraform/modules/cos-lite/variables.tf +++ b/terraform/modules/cos-lite/variables.tf @@ -4,7 +4,7 @@ variable "channel" { default = "latest/edge" } -variable "model_name" { +variable "model" { description = "Model name" type = string } diff --git a/terraform/modules/cos/README.md b/terraform/modules/cos/README.md index e0387019..151ff574 100644 --- a/terraform/modules/cos/README.md +++ b/terraform/modules/cos/README.md @@ -2,8 +2,9 @@ This is a Terraform module facilitating the deployment of COS solution, using the [Terraform juju provider](https://github.com/juju/terraform-provider-juju/). For more information, refer to the provider [documentation](https://registry.terraform.io/providers/juju/juju/latest/docs). -The HA solution consists of the following Terraform modules: +The HA solution consists of the following components: - [alertmanager-k8s](https://github.com/canonical/alertmanager-k8s-operator/tree/main/terraform): Handles alerts sent by clients applications. +- [catalogue-k8s](https://github.com/canonical/catalogue-k8s-operator/tree/main/terraform): UI catalogue. - [grafana-k8s](https://github.com/canonical/grafana-k8s-operator/tree/main/terraform): Visualization, monitoring, and dashboards. - [grafana-agent-k8s](https://github.com/canonical/grafana-agent-k8s-operator/tree/main/terraform): Aggregate and send telemetry data. - [loki](https://github.com/canonical/observability/tree/main/terraform/modules/loki): Backend for logs. @@ -74,15 +75,8 @@ Upon application, the module exports the following outputs: | Name | Type | Description | | - | - | - | -| `alertmanager`| module | Alertmanager module | -| `catalogue`| module | Catalogue module | -| `grafana`| module | Grafana module | -| `grafana_agent`| module | Grafana agent module | -| `loki`| module | Loki module | -| `mimir`| module | Mimir module | -| `ssc`| module | Self-signed certificates module | -| `tempo`| module | Tempo module | -| `traefik`| module | Traefik module | +| `components`| map(any) | All TF charm submodule which make up this product module | +| `offers`| map(any) | All offers which are exposed by this product module | ## Usage diff --git a/terraform/modules/cos/outputs.tf b/terraform/modules/cos/outputs.tf index 0de44f9b..ab886241 100644 --- a/terraform/modules/cos/outputs.tf +++ b/terraform/modules/cos/outputs.tf @@ -9,7 +9,7 @@ output "offers" { } } -# -------------- # Sub-modules -------------- # +# -------------- # Submodules -------------- # output "components" { value = { From 95b02a00d9ca4170628cfe62daf2760c5ff290bf Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Mon, 16 Jun 2025 10:23:40 -0400 Subject: [PATCH 05/20] test: validate TF CI --- terraform/modules/cos-lite/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terraform/modules/cos-lite/main.tf b/terraform/modules/cos-lite/main.tf index b3343dcc..e1414099 100644 --- a/terraform/modules/cos-lite/main.tf +++ b/terraform/modules/cos-lite/main.tf @@ -29,7 +29,7 @@ module "loki" { } module "prometheus" { - source = "git::https://github.com/canonical/prometheus-k8s-operator//terraform" + source = "git::https://github.com/canonical/prometheus-k8s-operator//terraform?ref=v44" app_name = "prometheus" model_name = var.model channel = var.channel From e7f2b7b6abbc3a182bd6a4eb498dfa77ee4d5d34 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Mon, 16 Jun 2025 10:47:41 -0400 Subject: [PATCH 06/20] chore: fix TF just recipes --- justfile | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/justfile b/justfile index 8736439c..a63199ae 100644 --- a/justfile +++ b/justfile @@ -1,6 +1,9 @@ set quiet # Recipes are silent by default set export # Just variables are exported to the environment +repo-root := invocation_directory() +tf-dir := 'terraform/modules' + terraform := `which terraform || which tofu || echo ""` # require 'terraform' or 'opentofu' [private] @@ -24,16 +27,16 @@ lint-workflows: [group("Lint")] lint-terraform: if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi - $terraform fmt -check -recursive -diff - -# Validate the Terraform modules -[group("Validate")] -validate-terraform: - if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi - $terraform validate + cd {{tf-dir}} && $terraform fmt -check -recursive -diff && cd {{repo-root}} # Format the Terraform modules [group("Format")] format-terraform: if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi - $terraform fmt -recursive -diff + cd {{tf-dir}} && $terraform fmt -recursive -diff && cd {{repo-root}} + +# Validate the Terraform modules +[group("Validate")] +validate-terraform: + if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi + cd {{tf-dir}} && $terraform validate && cd {{repo-root}} From 3cb84d30572b6a159511e11d4622f64ad0238bdf Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Mon, 16 Jun 2025 11:16:19 -0400 Subject: [PATCH 07/20] fix: justfile TF recipes --- justfile | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/justfile b/justfile index a63199ae..19e34b3a 100644 --- a/justfile +++ b/justfile @@ -1,9 +1,6 @@ set quiet # Recipes are silent by default set export # Just variables are exported to the environment -repo-root := invocation_directory() -tf-dir := 'terraform/modules' - terraform := `which terraform || which tofu || echo ""` # require 'terraform' or 'opentofu' [private] @@ -12,7 +9,7 @@ default: # Lint everything [group("Lint")] -lint: lint-terraform lint-workflows +lint: lint-workflows lint-terraform # Format everything [group("Format")] @@ -25,18 +22,21 @@ lint-workflows: # Lint the Terraform modules [group("Lint")] +[working-directory("./terraform/modules")] lint-terraform: if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi - cd {{tf-dir}} && $terraform fmt -check -recursive -diff && cd {{repo-root}} + for repo in */; do (cd "$repo" && echo "Processing ${repo%/}..." && $terraform init -upgrade -reconfigure && $terraform fmt -check -recursive -diff); done # Format the Terraform modules [group("Format")] +[working-directory("./terraform/modules")] format-terraform: if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi - cd {{tf-dir}} && $terraform fmt -recursive -diff && cd {{repo-root}} + for repo in */; do (cd "$repo" && echo "Processing ${repo%/}..." && $terraform init -upgrade -reconfigure && $terraform fmt -recursive -diff); done # Validate the Terraform modules [group("Validate")] +[working-directory("./terraform/modules")] validate-terraform: if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi - cd {{tf-dir}} && $terraform validate && cd {{repo-root}} + for repo in */; do (cd "$repo" && echo "Processing ${repo%/}..." && $terraform init -upgrade -reconfigure && $terraform validate); done From ea8c2f653e9bf2dff0fda34f31a1d7f8e755e1d6 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Mon, 16 Jun 2025 11:17:35 -0400 Subject: [PATCH 08/20] chore: revert test, solution works now --- terraform/modules/cos-lite/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terraform/modules/cos-lite/main.tf b/terraform/modules/cos-lite/main.tf index e1414099..b3343dcc 100644 --- a/terraform/modules/cos-lite/main.tf +++ b/terraform/modules/cos-lite/main.tf @@ -29,7 +29,7 @@ module "loki" { } module "prometheus" { - source = "git::https://github.com/canonical/prometheus-k8s-operator//terraform?ref=v44" + source = "git::https://github.com/canonical/prometheus-k8s-operator//terraform" app_name = "prometheus" model_name = var.model channel = var.channel From ed567db9eb4116a9012117261b6caa9132c6eb53 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Mon, 16 Jun 2025 11:35:15 -0400 Subject: [PATCH 09/20] fix: Justfile and README --- justfile | 6 +++--- terraform/modules/README.md | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 terraform/modules/README.md diff --git a/justfile b/justfile index 19e34b3a..5b55d679 100644 --- a/justfile +++ b/justfile @@ -25,18 +25,18 @@ lint-workflows: [working-directory("./terraform/modules")] lint-terraform: if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi - for repo in */; do (cd "$repo" && echo "Processing ${repo%/}..." && $terraform init -upgrade -reconfigure && $terraform fmt -check -recursive -diff); done + set -e; for repo in */; do (cd "$repo" && echo "Processing ${repo%/}..." && $terraform init -upgrade -reconfigure && $terraform fmt -check -recursive -diff) || exit 1; done # Format the Terraform modules [group("Format")] [working-directory("./terraform/modules")] format-terraform: if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi - for repo in */; do (cd "$repo" && echo "Processing ${repo%/}..." && $terraform init -upgrade -reconfigure && $terraform fmt -recursive -diff); done + set -e; for repo in */; do (cd "$repo" && echo "Processing ${repo%/}..." && $terraform init -upgrade -reconfigure && $terraform fmt -recursive -diff) || exit 1; done # Validate the Terraform modules [group("Validate")] [working-directory("./terraform/modules")] validate-terraform: if [ -z "${terraform}" ]; then echo "ERROR: please install terraform or opentofu"; exit 1; fi - for repo in */; do (cd "$repo" && echo "Processing ${repo%/}..." && $terraform init -upgrade -reconfigure && $terraform validate); done + set -e; for repo in */; do (cd "$repo" && echo "Processing ${repo%/}..." && $terraform init -upgrade -reconfigure && $terraform validate) || exit 1; done diff --git a/terraform/modules/README.md b/terraform/modules/README.md new file mode 100644 index 00000000..2e9a432d --- /dev/null +++ b/terraform/modules/README.md @@ -0,0 +1,3 @@ +## Dev workflow + +Use the [justfile](https://github.com/canonical/observability-stack/blob/main/justfile) to lint, format, and validate your TF changes. From a239fd028d6c4178b86e9b377e482d5ea32924f9 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Mon, 16 Jun 2025 12:12:00 -0400 Subject: [PATCH 10/20] chore: update module source paths --- .github/workflows/_local-pull-request.yaml | 14 ++------------ terraform/modules/aws-infra/README.md | 2 +- terraform/modules/cos/README.md | 10 +++++----- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/.github/workflows/_local-pull-request.yaml b/.github/workflows/_local-pull-request.yaml index 394aa344..9c0c6a68 100644 --- a/.github/workflows/_local-pull-request.yaml +++ b/.github/workflows/_local-pull-request.yaml @@ -4,20 +4,10 @@ on: pull_request: branches: - main + paths: + - '**/*.tf' jobs: - lint-workflows: - name: Workflows Lint - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Install dependencies - run: | - sudo snap install astral-uv --classic - sudo snap install just --classic - - name: Lint the workflows - run: just lint-workflows lint-terraform: name: Terraform lint runs-on: ubuntu-latest diff --git a/terraform/modules/aws-infra/README.md b/terraform/modules/aws-infra/README.md index c36c58af..15bafdca 100644 --- a/terraform/modules/aws-infra/README.md +++ b/terraform/modules/aws-infra/README.md @@ -31,7 +31,7 @@ In order to provision the AWS infrastructure required for COS, create a `main.tf ```hcl module "aws_infra" { - source = "git::https://github.com/canonical/observability//terraform/modules/aws-infra" + source = "git::https://github.com/canonical/observability-stack//terraform/modules/aws-infra" region = var.region cos_cloud_name = var.cos_cloud_name cos_controller_name = var.cos_controller_name diff --git a/terraform/modules/cos/README.md b/terraform/modules/cos/README.md index 151ff574..a9a9ba9f 100644 --- a/terraform/modules/cos/README.md +++ b/terraform/modules/cos/README.md @@ -7,9 +7,9 @@ The HA solution consists of the following components: - [catalogue-k8s](https://github.com/canonical/catalogue-k8s-operator/tree/main/terraform): UI catalogue. - [grafana-k8s](https://github.com/canonical/grafana-k8s-operator/tree/main/terraform): Visualization, monitoring, and dashboards. - [grafana-agent-k8s](https://github.com/canonical/grafana-agent-k8s-operator/tree/main/terraform): Aggregate and send telemetry data. -- [loki](https://github.com/canonical/observability/tree/main/terraform/modules/loki): Backend for logs. -- [mimir](https://github.com/canonical/observability/tree/main/terraform/modules/mimir): Backend for metrics. -- [tempo](https://github.com/canonical/observability/tree/main/terraform/modules/tempo): Backend for traces. +- [loki](https://github.com/canonical/observability-stack/tree/main/terraform/modules/loki): Backend for logs. +- [mimir](https://github.com/canonical/observability-stack/tree/main/terraform/modules/mimir): Backend for metrics. +- [tempo](https://github.com/canonical/observability-stack/tree/main/terraform/modules/tempo): Backend for traces. - [s3-integrator](https://github.com/canonical/s3-integrator): facade for S3 storage configurations. - [self-signed-certificates](https://github.com/canonical/self-signed-certificates-operator/tree/main/terraform): certificates operator to secure traffic with TLS. - [traefik](https://github.com/canonical/traefik-k8s-operator/tree/main/terraform): ingress. @@ -113,7 +113,7 @@ terraform { # COS module that deploy the whole Canonical Observability Stack module "cos" { - source = "git::https://github.com/canonical/observability//terraform/modules/cos" + source = "git::https://github.com/canonical/observability-stack//terraform/modules/cos" model = "cos" channel = "2/edge" s3_integrator_channel = "2/edge" @@ -320,7 +320,7 @@ In order to deploy COS on AWS, create a `main.tf` file with the following conten ```hcl # COS module that deploy the whole Canonical Observability Stack module "cos" { - source = "git::https://github.com/canonical/observability//terraform/modules/cos" + source = "git::https://github.com/canonical/observability-stack//terraform/modules/cos" model_name = var.model_name channel = var.channel s3_endpoint = var.s3_endpoint From 0e2f14c7e3cc84629498b5f44b6e90621b4ac0cd Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Mon, 16 Jun 2025 12:23:36 -0400 Subject: [PATCH 11/20] chore: add back the lint-workflows to PRs --- .github/workflows/_local-pull-request.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/_local-pull-request.yaml b/.github/workflows/_local-pull-request.yaml index 9c0c6a68..b66d2340 100644 --- a/.github/workflows/_local-pull-request.yaml +++ b/.github/workflows/_local-pull-request.yaml @@ -8,6 +8,18 @@ on: - '**/*.tf' jobs: + lint-workflows: + name: Workflows Lint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install dependencies + run: | + sudo snap install astral-uv --classic + sudo snap install just --classic + - name: Lint the workflows + run: just lint-workflows lint-terraform: name: Terraform lint runs-on: ubuntu-latest From 6c639636f17bd610ca9b9ddc05238bd8b10e4ecb Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Mon, 16 Jun 2025 14:31:06 -0400 Subject: [PATCH 12/20] feat: TF TLS part 1 --- terraform/modules/cos-lite/main.tf | 104 +++++++++++++++++++++--- terraform/modules/cos-lite/variables.tf | 15 ++++ 2 files changed, 109 insertions(+), 10 deletions(-) diff --git a/terraform/modules/cos-lite/main.tf b/terraform/modules/cos-lite/main.tf index b3343dcc..c6a34f00 100644 --- a/terraform/modules/cos-lite/main.tf +++ b/terraform/modules/cos-lite/main.tf @@ -39,14 +39,14 @@ module "ssc" { count = var.use_tls ? 1 : 0 source = "git::https://github.com/canonical/self-signed-certificates-operator//terraform" model = var.model - channel = var.channel + channel = var.ssc_channel } module "traefik" { source = "git::https://github.com/canonical/traefik-k8s-operator//terraform" app_name = "traefik" model = var.model - channel = var.channel + channel = var.traefik_channel } # -------------- # Integrations -------------- @@ -109,7 +109,6 @@ resource "juju_integration" "alertmanager_loki" { } } - resource "juju_integration" "grafana_source_alertmanager" { model = var.model @@ -140,7 +139,6 @@ resource "juju_integration" "grafana_self_monitoring_prometheus" { } } - # Provided by Prometheus resource "juju_integration" "prometheus_grafana_dashboards_provider" { @@ -171,9 +169,6 @@ resource "juju_integration" "prometheus_grafana_source" { } } - - - # Provided by Loki resource "juju_integration" "loki_grafana_dashboards_provider" { @@ -218,7 +213,6 @@ resource "juju_integration" "loki_self_monitoring_prometheus" { } } - # Provided by Catalogue resource "juju_integration" "catalogue_alertmanager" { @@ -263,7 +257,6 @@ resource "juju_integration" "catalogue_prometheus" { } } - # Provided by Traefik resource "juju_integration" "alertmanager_ingress" { @@ -280,7 +273,6 @@ resource "juju_integration" "alertmanager_ingress" { } } - resource "juju_integration" "catalogue_ingress" { model = var.model @@ -351,6 +343,98 @@ resource "juju_integration" "traefik_self_monitoring_prometheus" { } } +# Provided by Self-Signed-Certificates + +resource "juju_integration" "traefik_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.certificates + } +} + +resource "juju_integration" "alertmanager_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.certificates + } +} + +resource "juju_integration" "catalogue_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.certificates + } +} + +resource "juju_integration" "grafana_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.certificates + } +} + +resource "juju_integration" "loki_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.loki.app_name + endpoint = module.loki.endpoints.certificates + } +} + +resource "juju_integration" "prometheus_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.prometheus.app_name + endpoint = module.prometheus.endpoints.certificates + } +} + # -------------- # Offers -------------- resource "juju_offer" "alertmanager-karma-dashboard" { diff --git a/terraform/modules/cos-lite/variables.tf b/terraform/modules/cos-lite/variables.tf index fd74d96a..49f686d6 100644 --- a/terraform/modules/cos-lite/variables.tf +++ b/terraform/modules/cos-lite/variables.tf @@ -14,3 +14,18 @@ variable "use_tls" { type = bool default = true } + +# -------------- # External channels -------------- +# O11y does not own these charms, so we allow users to specify their channels directly. + +variable "ssc_channel" { + description = "Channel that the self-signed certificates charm is deployed from" + type = string + default = "1/stable" +} + +variable "traefik_channel" { + description = "Channel that the Traefik charm is deployed from" + type = string + default = "latest/stable" +} \ No newline at end of file From 90bcd70814aead28a8f50badf33e2142eb80b6e1 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Wed, 18 Jun 2025 08:25:26 -0400 Subject: [PATCH 13/20] chore: flatten dir --- terraform/{modules => }/README.md | 0 terraform/{modules => }/aws-infra/README.md | 0 terraform/{modules => }/aws-infra/justfile | 0 terraform/{modules => }/aws-infra/main.tf | 0 terraform/{modules => }/aws-infra/outputs.tf | 0 .../{modules => }/aws-infra/variables.tf | 0 terraform/{modules => }/aws-infra/versions.tf | 0 terraform/{modules => }/cos-lite/README.md | 0 terraform/{modules => }/cos-lite/main.tf | 52 +++++--- terraform/{modules => }/cos-lite/outputs.tf | 0 terraform/{modules => }/cos-lite/variables.tf | 2 +- terraform/{modules => }/cos-lite/versions.tf | 0 terraform/{modules => }/cos/README.md | 0 terraform/{modules => }/cos/main.tf | 125 ++++++++++++++++++ terraform/{modules => }/cos/outputs.tf | 0 terraform/{modules => }/cos/variables.tf | 0 terraform/{modules => }/cos/versions.tf | 0 terraform/{modules => }/loki/README.md | 0 terraform/{modules => }/loki/main.tf | 0 terraform/{modules => }/loki/outputs.tf | 0 terraform/{modules => }/loki/variables.tf | 0 terraform/{modules => }/loki/versions.tf | 0 terraform/{modules => }/mimir/README.md | 0 terraform/{modules => }/mimir/main.tf | 0 terraform/{modules => }/mimir/outputs.tf | 0 terraform/{modules => }/mimir/variables.tf | 0 terraform/{modules => }/mimir/versions.tf | 0 terraform/{modules => }/minio/main.tf | 0 terraform/{modules => }/minio/outputs.tf | 0 .../minio/scripts/s3management.sh | 0 terraform/{modules => }/minio/variables.tf | 0 terraform/{modules => }/minio/version.tf | 0 .../hcl-generator/generate_integrations.py | 116 ---------------- terraform/{modules => }/tempo/README.md | 0 terraform/{modules => }/tempo/main.tf | 0 terraform/{modules => }/tempo/outputs.tf | 0 terraform/{modules => }/tempo/variables.tf | 0 terraform/{modules => }/tempo/versions.tf | 0 38 files changed, 156 insertions(+), 139 deletions(-) rename terraform/{modules => }/README.md (100%) rename terraform/{modules => }/aws-infra/README.md (100%) rename terraform/{modules => }/aws-infra/justfile (100%) rename terraform/{modules => }/aws-infra/main.tf (100%) rename terraform/{modules => }/aws-infra/outputs.tf (100%) rename terraform/{modules => }/aws-infra/variables.tf (100%) rename terraform/{modules => }/aws-infra/versions.tf (100%) rename terraform/{modules => }/cos-lite/README.md (100%) rename terraform/{modules => }/cos-lite/main.tf (93%) rename terraform/{modules => }/cos-lite/outputs.tf (100%) rename terraform/{modules => }/cos-lite/variables.tf (99%) rename terraform/{modules => }/cos-lite/versions.tf (100%) rename terraform/{modules => }/cos/README.md (100%) rename terraform/{modules => }/cos/main.tf (84%) rename terraform/{modules => }/cos/outputs.tf (100%) rename terraform/{modules => }/cos/variables.tf (100%) rename terraform/{modules => }/cos/versions.tf (100%) rename terraform/{modules => }/loki/README.md (100%) rename terraform/{modules => }/loki/main.tf (100%) rename terraform/{modules => }/loki/outputs.tf (100%) rename terraform/{modules => }/loki/variables.tf (100%) rename terraform/{modules => }/loki/versions.tf (100%) rename terraform/{modules => }/mimir/README.md (100%) rename terraform/{modules => }/mimir/main.tf (100%) rename terraform/{modules => }/mimir/outputs.tf (100%) rename terraform/{modules => }/mimir/variables.tf (100%) rename terraform/{modules => }/mimir/versions.tf (100%) rename terraform/{modules => }/minio/main.tf (100%) rename terraform/{modules => }/minio/outputs.tf (100%) rename terraform/{modules => }/minio/scripts/s3management.sh (100%) rename terraform/{modules => }/minio/variables.tf (100%) rename terraform/{modules => }/minio/version.tf (100%) delete mode 100644 terraform/scripts/hcl-generator/generate_integrations.py rename terraform/{modules => }/tempo/README.md (100%) rename terraform/{modules => }/tempo/main.tf (100%) rename terraform/{modules => }/tempo/outputs.tf (100%) rename terraform/{modules => }/tempo/variables.tf (100%) rename terraform/{modules => }/tempo/versions.tf (100%) diff --git a/terraform/modules/README.md b/terraform/README.md similarity index 100% rename from terraform/modules/README.md rename to terraform/README.md diff --git a/terraform/modules/aws-infra/README.md b/terraform/aws-infra/README.md similarity index 100% rename from terraform/modules/aws-infra/README.md rename to terraform/aws-infra/README.md diff --git a/terraform/modules/aws-infra/justfile b/terraform/aws-infra/justfile similarity index 100% rename from terraform/modules/aws-infra/justfile rename to terraform/aws-infra/justfile diff --git a/terraform/modules/aws-infra/main.tf b/terraform/aws-infra/main.tf similarity index 100% rename from terraform/modules/aws-infra/main.tf rename to terraform/aws-infra/main.tf diff --git a/terraform/modules/aws-infra/outputs.tf b/terraform/aws-infra/outputs.tf similarity index 100% rename from terraform/modules/aws-infra/outputs.tf rename to terraform/aws-infra/outputs.tf diff --git a/terraform/modules/aws-infra/variables.tf b/terraform/aws-infra/variables.tf similarity index 100% rename from terraform/modules/aws-infra/variables.tf rename to terraform/aws-infra/variables.tf diff --git a/terraform/modules/aws-infra/versions.tf b/terraform/aws-infra/versions.tf similarity index 100% rename from terraform/modules/aws-infra/versions.tf rename to terraform/aws-infra/versions.tf diff --git a/terraform/modules/cos-lite/README.md b/terraform/cos-lite/README.md similarity index 100% rename from terraform/modules/cos-lite/README.md rename to terraform/cos-lite/README.md diff --git a/terraform/modules/cos-lite/main.tf b/terraform/cos-lite/main.tf similarity index 93% rename from terraform/modules/cos-lite/main.tf rename to terraform/cos-lite/main.tf index c6a34f00..7d9a3f58 100644 --- a/terraform/modules/cos-lite/main.tf +++ b/terraform/cos-lite/main.tf @@ -24,15 +24,23 @@ module "grafana" { module "loki" { source = "git::https://github.com/canonical/loki-k8s-operator//terraform" app_name = "loki" - model_name = var.model - channel = var.channel + model_name = var.model + channel = var.charms["loki"].channel + config = var.charms["loki"].config + constraints = var.charms["loki"].constraints + revision = var.charms["loki"].revision + units = var.charms["loki"].units } module "prometheus" { source = "git::https://github.com/canonical/prometheus-k8s-operator//terraform" app_name = "prometheus" model_name = var.model - channel = var.channel + channel = var.charms["prometheus"].channel + config = var.charms["prometheus"].config + constraints = var.charms["prometheus"].constraints + revision = var.charms["prometheus"].revision + units = var.charms["prometheus"].units } module "ssc" { @@ -345,21 +353,6 @@ resource "juju_integration" "traefik_self_monitoring_prometheus" { # Provided by Self-Signed-Certificates -resource "juju_integration" "traefik_certificates" { - count = var.use_tls ? 1 : 0 - model = var.model - - application { - name = module.ssc[0].app_name - endpoint = module.ssc[0].provides.certificates - } - - application { - name = module.traefik.app_name - endpoint = module.traefik.endpoints.certificates - } -} - resource "juju_integration" "alertmanager_certificates" { count = var.use_tls ? 1 : 0 model = var.model @@ -435,30 +428,45 @@ resource "juju_integration" "prometheus_certificates" { } } +resource "juju_integration" "traefik_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.certificates + } +} + # -------------- # Offers -------------- -resource "juju_offer" "alertmanager-karma-dashboard" { +resource "juju_offer" "alertmanager_karma_dashboard" { name = "alertmanager-karma-dashboard" model = var.model application_name = module.alertmanager.app_name endpoint = "karma-dashboard" } -resource "juju_offer" "grafana-dashboards" { +resource "juju_offer" "grafana_dashboards" { name = "grafana-dashboards" model = var.model application_name = module.grafana.app_name endpoint = "grafana-dashboard" } -resource "juju_offer" "loki-logging" { +resource "juju_offer" "loki_logging" { name = "loki-logging" model = var.model application_name = module.loki.app_name endpoint = "logging" } -resource "juju_offer" "prometheus-receive-remote-write" { +resource "juju_offer" "prometheus_receive_remote_write" { name = "prometheus-receive-remote-write" model = var.model application_name = module.prometheus.app_name diff --git a/terraform/modules/cos-lite/outputs.tf b/terraform/cos-lite/outputs.tf similarity index 100% rename from terraform/modules/cos-lite/outputs.tf rename to terraform/cos-lite/outputs.tf diff --git a/terraform/modules/cos-lite/variables.tf b/terraform/cos-lite/variables.tf similarity index 99% rename from terraform/modules/cos-lite/variables.tf rename to terraform/cos-lite/variables.tf index 49f686d6..463b42b2 100644 --- a/terraform/modules/cos-lite/variables.tf +++ b/terraform/cos-lite/variables.tf @@ -28,4 +28,4 @@ variable "traefik_channel" { description = "Channel that the Traefik charm is deployed from" type = string default = "latest/stable" -} \ No newline at end of file +} diff --git a/terraform/modules/cos-lite/versions.tf b/terraform/cos-lite/versions.tf similarity index 100% rename from terraform/modules/cos-lite/versions.tf rename to terraform/cos-lite/versions.tf diff --git a/terraform/modules/cos/README.md b/terraform/cos/README.md similarity index 100% rename from terraform/modules/cos/README.md rename to terraform/cos/README.md diff --git a/terraform/modules/cos/main.tf b/terraform/cos/main.tf similarity index 84% rename from terraform/modules/cos/main.tf rename to terraform/cos/main.tf index 07309b5e..75015d5d 100644 --- a/terraform/modules/cos/main.tf +++ b/terraform/cos/main.tf @@ -33,6 +33,7 @@ module "grafana_agent" { } module "loki" { + # TODO: Update to remove the modules path source = "git::https://github.com/canonical/observability-stack//terraform/modules/loki?ref=feat/tf-migration" model = var.model channel = var.channel @@ -52,6 +53,7 @@ module "loki" { } module "mimir" { + # TODO: Update to remove the modules path source = "git::https://github.com/canonical/observability-stack//terraform/modules/mimir?ref=feat/tf-migration" model = var.model channel = var.channel @@ -79,6 +81,7 @@ module "ssc" { } module "tempo" { + # TODO: Update to remove the modules path source = "git::https://github.com/canonical/observability-stack//terraform/modules/tempo?ref=feat/tf-migration" model = var.model channel = var.channel @@ -576,6 +579,128 @@ resource "juju_integration" "grafana_tracing_grafana_agent_traicing_provider" { } } +# Provided by Self-Signed-Certificates + +resource "juju_integration" "alertmanager_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.alertmanager.app_name + endpoint = module.alertmanager.endpoints.certificates + } +} + +resource "juju_integration" "catalogue_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.catalogue.app_name + endpoint = module.catalogue.endpoints.certificates + } +} + +resource "juju_integration" "grafana_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.grafana.app_name + endpoint = module.grafana.endpoints.certificates + } +} + +resource "juju_integration" "grafana_agent_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.grafana_agent.app_name + endpoint = module.grafana_agent.endpoints.certificates + } +} + +resource "juju_integration" "loki_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.loki.app_names.loki_coordinator + endpoint = module.loki.endpoints.certificates + } +} + +resource "juju_integration" "mimir_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.mimir.app_names.mimir_coordinator + endpoint = module.mimir.endpoints.certificates + } +} + +resource "juju_integration" "tempo_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.tempo.app_names.tempo_coordinator + endpoint = module.tempo.endpoints.certificates + } +} + +resource "juju_integration" "traefik_certificates" { + count = var.use_tls ? 1 : 0 + model = var.model + + application { + name = module.ssc[0].app_name + endpoint = module.ssc[0].provides.certificates + } + + application { + name = module.traefik.app_name + endpoint = module.traefik.endpoints.certificates + } +} + # -------------- # Offers -------------- resource "juju_offer" "alertmanager-karma-dashboard" { diff --git a/terraform/modules/cos/outputs.tf b/terraform/cos/outputs.tf similarity index 100% rename from terraform/modules/cos/outputs.tf rename to terraform/cos/outputs.tf diff --git a/terraform/modules/cos/variables.tf b/terraform/cos/variables.tf similarity index 100% rename from terraform/modules/cos/variables.tf rename to terraform/cos/variables.tf diff --git a/terraform/modules/cos/versions.tf b/terraform/cos/versions.tf similarity index 100% rename from terraform/modules/cos/versions.tf rename to terraform/cos/versions.tf diff --git a/terraform/modules/loki/README.md b/terraform/loki/README.md similarity index 100% rename from terraform/modules/loki/README.md rename to terraform/loki/README.md diff --git a/terraform/modules/loki/main.tf b/terraform/loki/main.tf similarity index 100% rename from terraform/modules/loki/main.tf rename to terraform/loki/main.tf diff --git a/terraform/modules/loki/outputs.tf b/terraform/loki/outputs.tf similarity index 100% rename from terraform/modules/loki/outputs.tf rename to terraform/loki/outputs.tf diff --git a/terraform/modules/loki/variables.tf b/terraform/loki/variables.tf similarity index 100% rename from terraform/modules/loki/variables.tf rename to terraform/loki/variables.tf diff --git a/terraform/modules/loki/versions.tf b/terraform/loki/versions.tf similarity index 100% rename from terraform/modules/loki/versions.tf rename to terraform/loki/versions.tf diff --git a/terraform/modules/mimir/README.md b/terraform/mimir/README.md similarity index 100% rename from terraform/modules/mimir/README.md rename to terraform/mimir/README.md diff --git a/terraform/modules/mimir/main.tf b/terraform/mimir/main.tf similarity index 100% rename from terraform/modules/mimir/main.tf rename to terraform/mimir/main.tf diff --git a/terraform/modules/mimir/outputs.tf b/terraform/mimir/outputs.tf similarity index 100% rename from terraform/modules/mimir/outputs.tf rename to terraform/mimir/outputs.tf diff --git a/terraform/modules/mimir/variables.tf b/terraform/mimir/variables.tf similarity index 100% rename from terraform/modules/mimir/variables.tf rename to terraform/mimir/variables.tf diff --git a/terraform/modules/mimir/versions.tf b/terraform/mimir/versions.tf similarity index 100% rename from terraform/modules/mimir/versions.tf rename to terraform/mimir/versions.tf diff --git a/terraform/modules/minio/main.tf b/terraform/minio/main.tf similarity index 100% rename from terraform/modules/minio/main.tf rename to terraform/minio/main.tf diff --git a/terraform/modules/minio/outputs.tf b/terraform/minio/outputs.tf similarity index 100% rename from terraform/modules/minio/outputs.tf rename to terraform/minio/outputs.tf diff --git a/terraform/modules/minio/scripts/s3management.sh b/terraform/minio/scripts/s3management.sh similarity index 100% rename from terraform/modules/minio/scripts/s3management.sh rename to terraform/minio/scripts/s3management.sh diff --git a/terraform/modules/minio/variables.tf b/terraform/minio/variables.tf similarity index 100% rename from terraform/modules/minio/variables.tf rename to terraform/minio/variables.tf diff --git a/terraform/modules/minio/version.tf b/terraform/minio/version.tf similarity index 100% rename from terraform/modules/minio/version.tf rename to terraform/minio/version.tf diff --git a/terraform/scripts/hcl-generator/generate_integrations.py b/terraform/scripts/hcl-generator/generate_integrations.py deleted file mode 100644 index 28d5dee1..00000000 --- a/terraform/scripts/hcl-generator/generate_integrations.py +++ /dev/null @@ -1,116 +0,0 @@ -import yaml -import sys -import hcl2 -import os -import argparse -from pathlib import Path - -OUTPUTS_TF_FILE = "outputs.tf" - - -def build_parser(): - """Create and configure the argument parser for the script.""" - - parser = argparse.ArgumentParser(description="Process YAML and generate Terraform output.") - - parser.add_argument( - '--input-yaml', - required=True, - help='Path to the input YAML file (charmcraft.yaml or metadata.yaml)' - ) - - parser.add_argument( - '--outputs-tf', - default=OUTPUTS_TF_FILE, - help=f'Path to the output Terraform file (default: {OUTPUTS_TF_FILE})' - ) - - return parser - - -class HCLGenerator(object): - def __init__(self, input_yaml: str, outputs_tf: str): - self.input_yaml = Path(input_yaml) - if outputs_tf == OUTPUTS_TF_FILE: - self.outputs_tf = Path(os.getcwd()) / outputs_tf - else: - self.outputs_tf = Path(outputs_tf) - - def parse_yaml(self): - """Parse the YAML file and return the data""" - try: - with open(self.input_yaml, "r") as file: - return yaml.safe_load(file) - except Exception as e: - print(f"Error reading YAML file: {e}") - sys.exit(1) - - @staticmethod - def format_keys(section): - """ - Format the keys by replacing hyphens with underscores - Although HCL allows dashes in keys, this does not allow for dot notation - """ - return {key.replace("-", "_"): key for key in section} - - def create_file_with_parents(self): - """Create the file and parent directories if they don't exist""" - self.outputs_tf.parent.mkdir(parents=True, exist_ok=True) - self.outputs_tf.touch(exist_ok=True) - - def generate_output(self, data): - """Generate the output string based on the parsed YAML data""" - requires = data.get("requires", {}) - provides = data.get("provides", {}) - - # Format the keys in the 'requires' and 'provides' sections - requires_formatted = self.format_keys(requires) - provides_formatted = self.format_keys(provides) - - # Prepare the output string - output = 'output "endpoints" {\n value = {\n' - - # Add requires - output += " # Requires\n" - for key, value in requires_formatted.items(): - output += f' {key:<20} = "{value}",\n' - - # Add provides - output += " # Provides\n" - for key, value in provides_formatted.items(): - output += f' {key:<20} = "{value}",\n' - - output += " }\n}" - # TODO: Create a function for `terraform format` of the output - return output - - def write_hcl_file(self, hcl_content): - """Parse the YAML file and return the data""" - - self.create_file_with_parents() - - with open(self.outputs_tf, "r") as file: - read_obj = hcl2.load(file) - - if read_obj: - print("WE HAD CONTENTS") - - with open(self.outputs_tf, "w") as file: - file.write(hcl_content) - - -def main(): - """Main function to handle script execution""" - - parser = build_parser() - args = parser.parse_args() - - gen = HCLGenerator(args.input_yaml, args.outputs_tf) - data = gen.parse_yaml() - output_raw = gen.generate_output(data) - print(output_raw) - gen.write_hcl_file(output_raw) - - -if __name__ == "__main__": - main() diff --git a/terraform/modules/tempo/README.md b/terraform/tempo/README.md similarity index 100% rename from terraform/modules/tempo/README.md rename to terraform/tempo/README.md diff --git a/terraform/modules/tempo/main.tf b/terraform/tempo/main.tf similarity index 100% rename from terraform/modules/tempo/main.tf rename to terraform/tempo/main.tf diff --git a/terraform/modules/tempo/outputs.tf b/terraform/tempo/outputs.tf similarity index 100% rename from terraform/modules/tempo/outputs.tf rename to terraform/tempo/outputs.tf diff --git a/terraform/modules/tempo/variables.tf b/terraform/tempo/variables.tf similarity index 100% rename from terraform/modules/tempo/variables.tf rename to terraform/tempo/variables.tf diff --git a/terraform/modules/tempo/versions.tf b/terraform/tempo/versions.tf similarity index 100% rename from terraform/modules/tempo/versions.tf rename to terraform/tempo/versions.tf From 8fcc5c0e0ca50b3349577d3fd1bacc1d33b68861 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Wed, 18 Jun 2025 15:58:22 -0400 Subject: [PATCH 14/20] chore: lower case offers resources --- terraform/cos-lite/main.tf | 6 +++--- terraform/cos-lite/outputs.tf | 8 ++++---- terraform/cos/main.tf | 8 ++++---- terraform/cos/outputs.tf | 8 ++++---- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/terraform/cos-lite/main.tf b/terraform/cos-lite/main.tf index 79c377e5..933f5bb7 100644 --- a/terraform/cos-lite/main.tf +++ b/terraform/cos-lite/main.tf @@ -444,21 +444,21 @@ resource "juju_offer" "alertmanager_karma_dashboard" { endpoint = "karma-dashboard" } -resource "juju_offer" "grafana-dashboards" { +resource "juju_offer" "grafana_dashboards" { name = "grafana-dashboards" model = var.model application_name = module.grafana.app_name endpoint = "grafana-dashboard" } -resource "juju_offer" "loki-logging" { +resource "juju_offer" "loki_logging" { name = "loki-logging" model = var.model application_name = module.loki.app_name endpoint = "logging" } -resource "juju_offer" "prometheus-receive-remote-write" { +resource "juju_offer" "prometheus_receive_remote_write" { name = "prometheus-receive-remote-write" model = var.model application_name = module.prometheus.app_name diff --git a/terraform/cos-lite/outputs.tf b/terraform/cos-lite/outputs.tf index 3e9fed61..ddce7ec8 100644 --- a/terraform/cos-lite/outputs.tf +++ b/terraform/cos-lite/outputs.tf @@ -2,10 +2,10 @@ output "offers" { value = { - alertmanager_karma_dashboard = juju_offer.alertmanager-karma-dashboard - grafana_dashboards = juju_offer.grafana-dashboards - loki_logging = juju_offer.loki-logging - prometheus_receive_remote_write = juju_offer.prometheus-receive-remote-write + alertmanager_karma_dashboard = juju_offer.alertmanager_karma_dashboard + grafana_dashboards = juju_offer.grafana_dashboards + loki_logging = juju_offer.loki_logging + prometheus_receive_remote_write = juju_offer.prometheus_receive_remote_write } } diff --git a/terraform/cos/main.tf b/terraform/cos/main.tf index 785736d1..3e14d98a 100644 --- a/terraform/cos/main.tf +++ b/terraform/cos/main.tf @@ -700,28 +700,28 @@ resource "juju_integration" "traefik_certificates" { # -------------- # Offers -------------- -resource "juju_offer" "alertmanager-karma-dashboard" { +resource "juju_offer" "alertmanager_karma_dashboard" { name = "alertmanager-karma-dashboard" model = var.model application_name = module.alertmanager.app_name endpoint = "karma-dashboard" } -resource "juju_offer" "grafana-dashboards" { +resource "juju_offer" "grafana_dashboards" { name = "grafana-dashboards" model = var.model application_name = module.grafana.app_name endpoint = "grafana-dashboard" } -resource "juju_offer" "loki-logging" { +resource "juju_offer" "loki_logging" { name = "loki-logging" model = var.model application_name = module.loki.app_names.loki_coordinator endpoint = "logging" } -resource "juju_offer" "mimir-receive-remote-write" { +resource "juju_offer" "mimir_receive_remote_write" { name = "mimir-receive-remote-write" model = var.model application_name = module.mimir.app_names.mimir_coordinator diff --git a/terraform/cos/outputs.tf b/terraform/cos/outputs.tf index ab886241..58e1ff83 100644 --- a/terraform/cos/outputs.tf +++ b/terraform/cos/outputs.tf @@ -2,10 +2,10 @@ output "offers" { value = { - alertmanager_karma_dashboard = juju_offer.alertmanager-karma-dashboard - grafana_dashboards = juju_offer.grafana-dashboards - loki_logging = juju_offer.loki-logging - mimir_receive_remote_write = juju_offer.mimir-receive-remote-write + alertmanager_karma_dashboard = juju_offer.alertmanager_karma_dashboard + grafana_dashboards = juju_offer.grafana_dashboards + loki_logging = juju_offer.loki_logging + mimir_receive_remote_write = juju_offer.mimir_receive_remote_write } } From a037e9ce2607a54e01abc8165020026129ededf6 Mon Sep 17 00:00:00 2001 From: Michael Thamm Date: Thu, 19 Jun 2025 12:03:33 -0400 Subject: [PATCH 15/20] chore: cleanup PR --- .github/workflows/_local-pull-request.yaml | 46 ------------------- .../installation/cos-canonical-k8s-sandbox.tf | 2 +- 2 files changed, 1 insertion(+), 47 deletions(-) delete mode 100644 .github/workflows/_local-pull-request.yaml diff --git a/.github/workflows/_local-pull-request.yaml b/.github/workflows/_local-pull-request.yaml deleted file mode 100644 index b66d2340..00000000 --- a/.github/workflows/_local-pull-request.yaml +++ /dev/null @@ -1,46 +0,0 @@ -name: Pull Requests - -on: - pull_request: - branches: - - main - paths: - - '**/*.tf' - -jobs: - lint-workflows: - name: Workflows Lint - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Install dependencies - run: | - sudo snap install astral-uv --classic - sudo snap install just --classic - - name: Lint the workflows - run: just lint-workflows - lint-terraform: - name: Terraform lint - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Install dependencies - run: | - sudo snap install terraform --classic - sudo snap install just --classic - - name: Lint the Terraform modules - run: just lint-terraform - validate-terraform: - name: Terraform validate - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Install dependencies - run: | - sudo snap install terraform --classic - sudo snap install just --classic - - name: Validate the Terraform modules - run: just validate-terraform diff --git a/docs/tutorial/installation/cos-canonical-k8s-sandbox.tf b/docs/tutorial/installation/cos-canonical-k8s-sandbox.tf index 96df22e3..0182f644 100644 --- a/docs/tutorial/installation/cos-canonical-k8s-sandbox.tf +++ b/docs/tutorial/installation/cos-canonical-k8s-sandbox.tf @@ -11,4 +11,4 @@ module "cos" { ssc_channel = "1/stable" traefik_channel = "latest/stable" anti_affinity = true -} +} \ No newline at end of file From 1927171df101cb6333893e3300358f0f70697f3d Mon Sep 17 00:00:00 2001 From: Leon <82407168+sed-i@users.noreply.github.com> Date: Thu, 19 Jun 2025 00:42:10 -0400 Subject: [PATCH 16/20] Manual sync from starter pack (#52) --- .github/workflows/automatic-doc-checks.yml | 2 + .github/workflows/markdown-style-checks.yml | 4 + .../sphinx-python-dependency-build-checks.yml | 50 - .gitignore | 29 - .readthedocs.yaml | 13 +- README.md | 2 +- docs/.gitignore | 26 + docs/.sphinx/.pre-commit-config.yaml | 23 + docs/.sphinx/.wordlist.txt | 267 +++++ docs/.sphinx/get_vale_conf.py | 184 +++- docs/Makefile | 118 +-- docs/conf.py | 56 +- docs/html/.buildinfo | 4 - docs/html/404/index.html | 388 -------- .../add-tracing-support-to-cos-lite.png | Bin 61788 -> 0 bytes .../migrate-from-lma-to-cos-lite-1.png | Bin 71870 -> 0 bytes .../migrate-from-lma-to-cos-lite-2.png | Bin 254267 -> 0 bytes .../migrate-from-lma-to-cos-lite-3.png | Bin 326402 -> 0 bytes docs/html/_images/with-scrape-config.svg | 361 ------- docs/html/_images/without-scrape-config.svg | 289 ------ .../html/_sphinx_design_static/design-tabs.js | 101 -- .../sphinx-design.min.css | 1 - docs/html/_static/404.svg | 13 - .../_sphinx_javascript_frameworks_compat.js | 123 --- docs/html/_static/basic.css | 925 ------------------ docs/html/_static/check-solid.svg | 4 - docs/html/_static/clipboard.min.js | 7 - docs/html/_static/contributors.css | 47 - docs/html/_static/contributors.js | 12 - docs/html/_static/copy-button.svg | 5 - docs/html/_static/copybutton.css | 94 -- docs/html/_static/copybutton.js | 248 ----- docs/html/_static/copybutton_funcs.js | 73 -- docs/html/_static/custom.css | 397 -------- docs/html/_static/debug.css | 69 -- docs/html/_static/design-tabs.js | 101 -- docs/html/_static/doctools.js | 156 --- docs/html/_static/documentation_options.js | 13 - docs/html/_static/favicon.png | Bin 2258 -> 0 bytes docs/html/_static/file.png | Bin 286 -> 0 bytes docs/html/_static/furo_colors.css | 89 -- docs/html/_static/github_issue_links.css | 24 - docs/html/_static/github_issue_links.js | 34 - docs/html/_static/header-nav.js | 10 - docs/html/_static/header.css | 167 ---- docs/html/_static/jquery.js | 2 - docs/html/_static/language_data.js | 199 ---- docs/html/_static/minus.png | Bin 90 -> 0 bytes docs/html/_static/plus.png | Bin 90 -> 0 bytes docs/html/_static/project_specific.css | 0 docs/html/_static/pygments.css | 258 ----- docs/html/_static/related-links.css | 39 - docs/html/_static/scripts/furo-extensions.js | 0 docs/html/_static/scripts/furo.js | 3 - docs/html/_static/scripts/furo.js.LICENSE.txt | 7 - docs/html/_static/scripts/furo.js.map | 1 - docs/html/_static/searchtools.js | 620 ------------ docs/html/_static/skeleton.css | 296 ------ docs/html/_static/sphinx-design.min.css | 1 - docs/html/_static/sphinx_highlight.js | 154 --- docs/html/_static/styles/furo-extensions.css | 2 - .../_static/styles/furo-extensions.css.map | 1 - docs/html/_static/styles/furo.css | 2 - docs/html/_static/styles/furo.css.map | 1 - docs/html/_static/tabs.css | 89 -- docs/html/_static/tabs.js | 145 --- docs/html/_static/tag.png | Bin 6781 -> 0 bytes docs/html/_static/terminal-output.css | 32 - docs/html/_static/youtube.css | 33 - docs/html/explanation/cos-lite/index.html | 522 ---------- docs/html/explanation/index.html | 397 -------- docs/html/genindex/index.html | 378 ------- .../how-to/add-tracing-to-cos-lite/index.html | 493 ---------- .../html/how-to/adding-alert-rules/index.html | 452 --------- .../how-to/configure-scrape-jobs/index.html | 509 ---------- .../how-to/dev-setup-with-minio/index.html | 534 ---------- .../exposing-a-metrics-endpoint/index.html | 460 --------- docs/html/how-to/index.html | 441 --------- .../index.html | 497 ---------- .../how-to/migrate-cos-lite-to-cos/index.html | 414 -------- .../how-to/migrate-lma-to-cos-lite/index.html | 454 --------- docs/html/how-to/troubleshooting/index.html | 399 -------- .../index.html | 510 ---------- .../troubleshoot-integrations/index.html | 644 ------------ .../index.html | 470 --------- docs/html/index.html | 457 --------- docs/html/objects.inv | Bin 910 -> 0 bytes docs/html/reference/index.html | 398 -------- docs/html/reference/migration/index.html | 392 -------- .../html/reference/solution-matrix/index.html | 451 --------- docs/html/search/index.html | 389 -------- docs/html/searchindex.js | 1 - docs/html/tutorial/index.html | 433 -------- .../getting-started-with-cos-lite/index.html | 627 ------------ .../getting-started-with-cos/index.html | 390 -------- docs/html/tutorial/installation/index.html | 408 -------- .../instrument-machine-charms/index.html | 390 -------- .../sync-alert-rules-from-git/index.html | 390 -------- docs/{.sphinx => }/requirements.txt | 3 +- 99 files changed, 585 insertions(+), 18132 deletions(-) delete mode 100644 .github/workflows/sphinx-python-dependency-build-checks.yml create mode 100644 docs/.gitignore create mode 100644 docs/.sphinx/.pre-commit-config.yaml delete mode 100644 docs/html/.buildinfo delete mode 100644 docs/html/404/index.html delete mode 100644 docs/html/_images/add-tracing-support-to-cos-lite.png delete mode 100644 docs/html/_images/migrate-from-lma-to-cos-lite-1.png delete mode 100644 docs/html/_images/migrate-from-lma-to-cos-lite-2.png delete mode 100644 docs/html/_images/migrate-from-lma-to-cos-lite-3.png delete mode 100644 docs/html/_images/with-scrape-config.svg delete mode 100644 docs/html/_images/without-scrape-config.svg delete mode 100644 docs/html/_sphinx_design_static/design-tabs.js delete mode 100644 docs/html/_sphinx_design_static/sphinx-design.min.css delete mode 100644 docs/html/_static/404.svg delete mode 100644 docs/html/_static/_sphinx_javascript_frameworks_compat.js delete mode 100644 docs/html/_static/basic.css delete mode 100644 docs/html/_static/check-solid.svg delete mode 100644 docs/html/_static/clipboard.min.js delete mode 100644 docs/html/_static/contributors.css delete mode 100644 docs/html/_static/contributors.js delete mode 100644 docs/html/_static/copy-button.svg delete mode 100644 docs/html/_static/copybutton.css delete mode 100644 docs/html/_static/copybutton.js delete mode 100644 docs/html/_static/copybutton_funcs.js delete mode 100644 docs/html/_static/custom.css delete mode 100644 docs/html/_static/debug.css delete mode 100644 docs/html/_static/design-tabs.js delete mode 100644 docs/html/_static/doctools.js delete mode 100644 docs/html/_static/documentation_options.js delete mode 100644 docs/html/_static/favicon.png delete mode 100644 docs/html/_static/file.png delete mode 100644 docs/html/_static/furo_colors.css delete mode 100644 docs/html/_static/github_issue_links.css delete mode 100644 docs/html/_static/github_issue_links.js delete mode 100644 docs/html/_static/header-nav.js delete mode 100644 docs/html/_static/header.css delete mode 100644 docs/html/_static/jquery.js delete mode 100644 docs/html/_static/language_data.js delete mode 100644 docs/html/_static/minus.png delete mode 100644 docs/html/_static/plus.png delete mode 100644 docs/html/_static/project_specific.css delete mode 100644 docs/html/_static/pygments.css delete mode 100644 docs/html/_static/related-links.css delete mode 100644 docs/html/_static/scripts/furo-extensions.js delete mode 100644 docs/html/_static/scripts/furo.js delete mode 100644 docs/html/_static/scripts/furo.js.LICENSE.txt delete mode 100644 docs/html/_static/scripts/furo.js.map delete mode 100644 docs/html/_static/searchtools.js delete mode 100644 docs/html/_static/skeleton.css delete mode 100644 docs/html/_static/sphinx-design.min.css delete mode 100644 docs/html/_static/sphinx_highlight.js delete mode 100644 docs/html/_static/styles/furo-extensions.css delete mode 100644 docs/html/_static/styles/furo-extensions.css.map delete mode 100644 docs/html/_static/styles/furo.css delete mode 100644 docs/html/_static/styles/furo.css.map delete mode 100644 docs/html/_static/tabs.css delete mode 100644 docs/html/_static/tabs.js delete mode 100644 docs/html/_static/tag.png delete mode 100644 docs/html/_static/terminal-output.css delete mode 100644 docs/html/_static/youtube.css delete mode 100644 docs/html/explanation/cos-lite/index.html delete mode 100644 docs/html/explanation/index.html delete mode 100644 docs/html/genindex/index.html delete mode 100644 docs/html/how-to/add-tracing-to-cos-lite/index.html delete mode 100644 docs/html/how-to/adding-alert-rules/index.html delete mode 100644 docs/html/how-to/configure-scrape-jobs/index.html delete mode 100644 docs/html/how-to/dev-setup-with-minio/index.html delete mode 100644 docs/html/how-to/exposing-a-metrics-endpoint/index.html delete mode 100644 docs/html/how-to/index.html delete mode 100644 docs/html/how-to/integrating-cos-lite-with-uncharmed-applications/index.html delete mode 100644 docs/html/how-to/migrate-cos-lite-to-cos/index.html delete mode 100644 docs/html/how-to/migrate-lma-to-cos-lite/index.html delete mode 100644 docs/html/how-to/troubleshooting/index.html delete mode 100644 docs/html/how-to/troubleshooting/troubleshoot-gateway-address-unavailable/index.html delete mode 100644 docs/html/how-to/troubleshooting/troubleshoot-integrations/index.html delete mode 100644 docs/html/how-to/troubleshooting/troubleshoot-socket-too-many-open-files/index.html delete mode 100644 docs/html/index.html delete mode 100644 docs/html/objects.inv delete mode 100644 docs/html/reference/index.html delete mode 100644 docs/html/reference/migration/index.html delete mode 100644 docs/html/reference/solution-matrix/index.html delete mode 100644 docs/html/search/index.html delete mode 100644 docs/html/searchindex.js delete mode 100644 docs/html/tutorial/index.html delete mode 100644 docs/html/tutorial/installation/getting-started-with-cos-lite/index.html delete mode 100644 docs/html/tutorial/installation/getting-started-with-cos/index.html delete mode 100644 docs/html/tutorial/installation/index.html delete mode 100644 docs/html/tutorial/instrument-machine-charms/index.html delete mode 100644 docs/html/tutorial/sync-alert-rules-from-git/index.html rename docs/{.sphinx => }/requirements.txt (81%) diff --git a/.github/workflows/automatic-doc-checks.yml b/.github/workflows/automatic-doc-checks.yml index 9f8ab04f..479ebcbd 100644 --- a/.github/workflows/automatic-doc-checks.yml +++ b/.github/workflows/automatic-doc-checks.yml @@ -5,6 +5,8 @@ on: push: branches: [ main ] pull_request: + paths: + - 'docs/**' # Only run on changes to the docs directory workflow_dispatch: # Manual trigger diff --git a/.github/workflows/markdown-style-checks.yml b/.github/workflows/markdown-style-checks.yml index 9369eb64..e0de019d 100644 --- a/.github/workflows/markdown-style-checks.yml +++ b/.github/workflows/markdown-style-checks.yml @@ -4,9 +4,13 @@ on: push: branches: - main + paths: + - 'docs/**' # Only run on changes to the docs directory pull_request: branches: - '*' + paths: + - 'docs/**' # Only run on changes to the docs directory jobs: markdown-lint: diff --git a/.github/workflows/sphinx-python-dependency-build-checks.yml b/.github/workflows/sphinx-python-dependency-build-checks.yml deleted file mode 100644 index d9419045..00000000 --- a/.github/workflows/sphinx-python-dependency-build-checks.yml +++ /dev/null @@ -1,50 +0,0 @@ -# The purpose of this workflow file is to confirm that the Sphinx -# virtual environment can be built from source, consequently documenting -# the packages required in the build environment to do that. -# -# This is needed because some projects embeds the documentation into built -# artifacts which involves rendering the documentation on the target -# architecture. -# -# Depending on the architecture, pip may or may not have already built wheels -# available, and as such we need to make sure building wheels from source can -# succeed. -name: Sphinx python dependency build checks - -on: - push: - branches: [ main ] - pull_request: - workflow_dispatch: # manual trigger - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build: - name: build - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Install dependencies - run: | - set -ex - sudo apt -y install \ - cargo \ - libpython3-dev \ - libxml2-dev \ - libxslt1-dev \ - make \ - python3-venv \ - rustc \ - libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python3-tk libharfbuzz-dev libfribidi-dev libxcb1-dev - - name: Build Sphinx venv - working-directory: "docs" - run: | - set -ex - make install \ - PIPOPTS="--no-binary :all:" \ - || ( cat .sphinx/venv/pip_install.log && exit 1 ) diff --git a/.gitignore b/.gitignore index 21f514e7..47ec151d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,32 +1,3 @@ - -# Starter pack rules start here - -# Environment -/*env*/ -docs/.sphinx/venv/ - -# Sphinx -docs/.sphinx/warnings.txt -docs/.sphinx/.wordlist.dic -docs/.sphinx/.doctrees/ -docs/.sphinx/node_modules/ - -# Vale -docs/.sphinx/styles/* -docs/.sphinx/vale.ini - -# Build outputs -docs/_build - -# Node.js -docs/package*.json - -# Unrelated cache and config files -docs/.DS_Store -docs/__pycache__ -docs/.idea/ -docs/.vscode/ - # Terraform **/.terraform/* *.tfstate diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 3cc15b0a..ec26cd67 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -11,8 +11,17 @@ build: tools: python: "3.11" jobs: - pre_install: + post_checkout: - git fetch --unshallow || true + # Cancel building pull requests when there aren't changed in the docs directory. + # If there are no changes (git diff exits with 0) we force the command to return with 183. + # This is a special exit code on Read the Docs that will cancel the build immediately. + # https://docs.readthedocs.io/en/stable/build-customization.html#cancel-build-based-on-a-condition + - | + if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/main -- 'docs/' '.readthedocs.yaml'; + then + exit 183; + fi # Build documentation in the docs/ directory with Sphinx sphinx: @@ -27,4 +36,4 @@ formats: # Optionally declare the Python requirements required to build your docs python: install: - - requirements: docs/.sphinx/requirements.txt + - requirements: docs/requirements.txt diff --git a/README.md b/README.md index ebc6f715..08314755 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ and install sphinx dependencies: ```bash cd docs source .sphinx/venv/bin/activate -pip install -r .sphinx/requirements.txt +pip install -r requirements.txt ``` Build and serve the docs locally: diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..aad78f1f --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,26 @@ +# Environment +*env*/ +.sphinx/venv/ + +# Sphinx +.sphinx/warnings.txt +.sphinx/.wordlist.dic +.sphinx/.doctrees/ +.sphinx/update/ +.sphinx/node_modules/ + +# Vale +.sphinx/styles/* +.sphinx/vale.ini + +# Build outputs +_build + +# Node.js +package*.json + +# Unrelated cache and config files +.DS_Store +__pycache__ +.idea/ +.vscode/ diff --git a/docs/.sphinx/.pre-commit-config.yaml b/docs/.sphinx/.pre-commit-config.yaml new file mode 100644 index 00000000..07e0b48c --- /dev/null +++ b/docs/.sphinx/.pre-commit-config.yaml @@ -0,0 +1,23 @@ +repos: + - repo: local + hooks: + - id: make-spelling + name: Run make spelling + entry: make -C docs spelling + language: system + pass_filenames: false + files: ^docs/.*\.(rst|md|txt)$ + + - id: make-linkcheck + name: Run make linkcheck + entry: make -C docs linkcheck + language: system + pass_filenames: false + files: ^docs/.*\.(rst|md|txt)$ + + - id: make-woke + name: Run make woke + entry: make -C docs woke + language: system + pass_filenames: false + files: ^docs/.*\.(rst|md|txt)$ diff --git a/docs/.sphinx/.wordlist.txt b/docs/.sphinx/.wordlist.txt index be5021a1..fd1f1010 100644 --- a/docs/.sphinx/.wordlist.txt +++ b/docs/.sphinx/.wordlist.txt @@ -62,3 +62,270 @@ UUID VM webhook YAML + +AAM +AAR +AArch +ABI +ADB +ADSys +AKS +AMC +AMS +ANAIS +APK +APM +ARMv +ARR +ASIC +AZ +BAU +BOM +BTS +BZR +CAC +CBR +CDK +CDN +CISC +CLA +CMP +CNI +COS +COTS +CPC +CPQ +CPT +CR +CRD +CRI +CSB +CSI +CTR +CVE +DBR +DEP +DHCP +DKMS +DMB +DNS +DPU +DSA +DSE +EE +EFI +EoL +EoS +EPMO +ESM +FCE +FFE +FIPS +FOSS +FPGA +FTBFS +FTI +FUSE +GKE +GPGPU +GPL +GSI +GTM +HA +HAP +HPC +HWE +IC +IHV +IOV +IPMI +IPU +IRCC +iSCSI +ISM +ISR +ISV +ITP +JAAS +KSPP +LTV +MAAS +MDF +MDL +MEC +MLflow +MOTU +MPA +MQL +MRE +MSRP +NATS +NFS +NIC +NIH +NIST +NOC +NOS +NPOASR +NPV +NRE +NUMA +NVIU +NVMe +OBSD +OCI +OCL +OCTO +ODM +OSD +OSS +OVA +OVAL +OVN +OVS +P4 +PCB +PCF +PCKN +PCRE +PKCS +PKS +PMO +POSIX +PPA +PS5 +PXE +RACI +RADOS +RAG +RBAC +RDMA +RTOS +SDK +SDR +SDS +SEG +SFDC +SIP +SKU +SLA +SOW +SQL +SR +SRU +TAM +TCS +TFTP +TLS +TPM +TUI +UCA +UCT +UDS +UIFe +URI +UX +VCS +VNFD +WSL +ZFS + +Anbox +Ansible +Appium +Backports +Ceph +Changelog +Charmcraft +CoC +CoF +Containerd +Coturn +Cryptographic +Devel +Endian +Endianness +Fluentd +GraphQL +HAProxy +HAcluster +Imagecraft +Infiniband +Influxdb +Istio +Kata +Keepalived +KernOS +KernelFactory +Keyring +Keyserver +Kibana +Knative +LXC +Laravel +Libvirt +Linkerd +LinuxONE +Livepatch +Mesos +Metallb +MicroK +MicroStack +Mojo +Multipass +Nagios +NetApp +Netplan +Nginx +OpenSSL +OpenSearch +OpenStack +Openshift +PgBouncer +QEMU +RabbitMQ +Rasterization +Rebase +RegEx +RoM +RoP +RoQA +RoSRM +RoST +Rockcraft +SQLair +Scrcpy +Snapcraft +Snapd +Splunk +Subnet +Superdistro +Superset +Telegraf +Terraform +Testflinger +Thruk +Tigera +TrilioVault +TripleO +Vue +WebRTC +WoU +amd +armhf +autopkgtest +cURL +containeragent +dqlite +dsc +init +jQuery +juju +jujuc +jujud +ppc +riscv +snapcrafting +subcluster +swrast +zSystems diff --git a/docs/.sphinx/get_vale_conf.py b/docs/.sphinx/get_vale_conf.py index 9ee2d0b5..46f57d89 100644 --- a/docs/.sphinx/get_vale_conf.py +++ b/docs/.sphinx/get_vale_conf.py @@ -1,53 +1,151 @@ #! /usr/bin/env python -import requests import os +import shutil +import subprocess +import tempfile +import sys +import logging +import argparse -DIR = os.getcwd() +# Configure logging +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(levelname)s - %(message)s', + datefmt='%Y-%m-%d %H:%M:%S' +) +SPHINX_DIR = os.path.join(os.getcwd(), ".sphinx") -def main(): - if os.path.exists(f"{DIR}/.sphinx/styles/Canonical"): - print("Vale directory exists") - else: - os.makedirs(f"{DIR}/.sphinx/styles/Canonical") - - url = ( - "https://api.github.com/repos/canonical/praecepta/" - + "contents/styles/Canonical" - ) - r = requests.get(url) - for item in r.json(): - download = requests.get(item["download_url"]) - file = open(".sphinx/styles/Canonical/" + item["name"], "w") - file.write(download.text) - file.close() - - if os.path.exists(f"{DIR}/.sphinx/styles/config/vocabularies/Canonical"): - print("Vocab directory exists") - else: - os.makedirs(f"{DIR}/.sphinx/styles/config/vocabularies/Canonical") - - url = ( - "https://api.github.com/repos/canonical/praecepta/" - + "contents/styles/config/vocabularies/Canonical" - ) - r = requests.get(url) - for item in r.json(): - download = requests.get(item["download_url"]) - file = open( - ".sphinx/styles/config/vocabularies/Canonical/" + item["name"], - "w" +GITHUB_REPO = "canonical/praecepta" +GITHUB_CLONE_URL = f"https://github.com/{GITHUB_REPO}.git" + +# Source paths to copy from repo +VALE_FILE_LIST = [ + "styles/Canonical", + "styles/config/vocabularies/Canonical", + "styles/config/dictionaries", + "vale.ini" +] + +def clone_repo_and_copy_paths(file_source_dest, overwrite=False): + """ + Clone the repository to a temporary directory and copy required files + + Args: + file_source_dest: dictionary of file paths to copy from the repository, + and their destination paths + overwrite: boolean flag to overwrite existing files in the destination + + Returns: + bool: True if all files were copied successfully, False otherwise + """ + + if not file_source_dest: + logging.error("No files to copy") + return False + + # Create temporary directory on disk for cloning + temp_dir = tempfile.mkdtemp() + logging.info("Cloning repository <%s> to temporary directory: %s", GITHUB_REPO, temp_dir) + clone_cmd = ["git", "clone", "--depth", "1", GITHUB_CLONE_URL, temp_dir] + + try: + result = subprocess.run( + clone_cmd, + capture_output=True, + text=True, + check=True ) - file.write(download.text) - file.close() - config = requests.get( - "https://raw.githubusercontent.com/canonical/praecepta/main/vale.ini" - ) - file = open(".sphinx/vale.ini", "w") - file.write(config.text) - file.close() + logging.debug("Git clone output: %s", result.stdout) + except subprocess.CalledProcessError as e: + logging.error("Git clone failed: %s", e.stderr) + return False + + # Copy files from the cloned repository to the destination paths + is_copy_success = True + for source, dest in file_source_dest.items(): + source_path = os.path.join(temp_dir, source) + + if not os.path.exists(source_path): + is_copy_success = False + logging.error("Source path not found: %s", source_path) + continue + + if not copy_files_to_path(source_path, dest, overwrite): + is_copy_success = False + logging.error("Failed to copy %s to %s", source_path, dest) + + # Clean up temporary directory + logging.info("Cleaning up temporary directory: %s", temp_dir) + shutil.rmtree(temp_dir) + + return is_copy_success + +def copy_files_to_path(source_path, dest_path, overwrite=False): + """ + Copy a file or directory from source to destination + + Args: + source_path: Path to the source file or directory + dest_path: Path to the destination + overwrite: Boolean flag to overwrite existing files in the destination + + Returns: + bool: True if copy was successful, False otherwise + """ + # Skip if source file doesn't exist + if not os.path.exists(source_path): + logging.warning("Source path not found: %s", source_path) + return False + + logging.info("Copying %s to %s", source_path, dest_path) + # Handle existing files + if os.path.exists(dest_path): + if overwrite: + logging.info(" Destination exists, overwriting: %s", dest_path) + if os.path.isdir(dest_path): + shutil.rmtree(dest_path) + else: + os.remove(dest_path) + else: + logging.info(" Destination exists, skip copying (use overwrite=True to replace): %s", + dest_path) + return True # Skip copying + + # Copy the source to destination + try: + if os.path.isdir(source_path): + # entire directory + shutil.copytree(source_path, dest_path) + else: + # individual files + shutil.copy2(source_path, dest_path) + return True + except (shutil.Error, OSError) as e: + logging.error("Copy failed: %s", e) + return False + +def parse_arguments(): + parser = argparse.ArgumentParser(description="Download Vale configuration files") + parser.add_argument("--no-overwrite", action="store_true", help="Don't overwrite existing files") + return parser.parse_args() + +def main(): + # Define local directory paths + vale_files_dict = {file: os.path.join(SPHINX_DIR, file) for file in VALE_FILE_LIST} + + # Parse command line arguments, default to overwrite_enabled = True + overwrite_enabled = not parse_arguments().no_overwrite + + # Download into /tmp through git clone + if not clone_repo_and_copy_paths(vale_files_dict, overwrite=overwrite_enabled): + logging.error("Failed to download files from repository") + return 1 + + logging.info("Download complete") + return 0 if __name__ == "__main__": - main() + sys.exit(main()) # Keep return code diff --git a/docs/Makefile b/docs/Makefile index 09b2b2ce..0b4a3a44 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -17,30 +17,35 @@ ALLFILES = *.rst **/*.rst METRICSDIR = $(SOURCEDIR)/.sphinx/metrics REQPDFPACKS = latexmk fonts-freefont-otf texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended texlive-font-utils texlive-lang-cjk texlive-xetex plantuml xindy tex-gyre dvipng CONFIRM_SUDO ?= N +VALE_CONFIG = $(SPHINXDIR)/vale.ini +SPHINX_HOST ?= 0.0.0.0 +SPHINX_PORT ?= 8000 # Put it first so that "make" without argument is like "make help". help: - @echo "\n" \ - "------------------------------------------------------------- \n" \ - "* watch, build and serve the documentation: make run \n" \ - "* only build: make html \n" \ - "* only serve: make serve \n" \ - "* clean built doc files: make clean-doc \n" \ - "* clean full environment: make clean \n" \ - "* check links: make linkcheck \n" \ - "* check spelling: make spelling \n" \ - "* check spelling (without building again): make spellcheck \n" \ - "* check inclusive language: make woke \n" \ - "* check accessibility: make pa11y \n" \ - "* check style guide compliance: make vale \n" \ - "* check style guide compliance on target: make vale TARGET=* \n" \ - "* check metrics for documentation: make allmetrics \n" \ - "* other possible targets: make \n" \ - "------------------------------------------------------------- \n" - -.PHONY: full-help woke-install spellcheck-install pa11y-install install run html \ + @echo + @echo "-------------------------------------------------------------" + @echo "* watch, build and serve the documentation: make run" + @echo "* only build: make html" + @echo "* only serve: make serve" + @echo "* clean built doc files: make clean-doc" + @echo "* clean full environment: make clean" + @echo "* check links: make linkcheck" + @echo "* check spelling: make spelling" + @echo "* check spelling (without building again): make spellcheck" + @echo "* check inclusive language: make woke" + @echo "* check accessibility: make pa11y" + @echo "* check style guide compliance: make vale" + @echo "* check style guide compliance on target: make vale TARGET=*" + @echo "* check metrics for documentation: make allmetrics" + @echo "* other possible targets: make " + @echo "-------------------------------------------------------------" + @echo + +.PHONY: full-help spellcheck-install pa11y-install install run html \ epub serve clean clean-doc spelling spellcheck linkcheck woke \ - allmetrics pa11y pdf-prep-force pdf-prep pdf Makefile.sp vale bash + allmetrics pa11y pdf-prep-force pdf-prep pdf vale-install vale \ + update full-help: $(VENVDIR) @. $(VENV); $(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) @@ -54,28 +59,13 @@ $(VENVDIR): @echo "... setting up virtualenv" python3 -m venv $(VENVDIR) . $(VENV); pip install $(PIPOPTS) --require-virtualenv \ - --upgrade -r $(SPHINXDIR)/requirements.txt \ + --upgrade -r requirements.txt \ --log $(VENVDIR)/pip_install.log @test ! -f $(VENVDIR)/pip_list.txt || \ mv $(VENVDIR)/pip_list.txt $(VENVDIR)/pip_list.txt.bak @. $(VENV); pip list --local --format=freeze > $(VENVDIR)/pip_list.txt @touch $(VENVDIR) -woke-install: - @type woke >/dev/null 2>&1 || \ - { \ - echo "Installing system-wide \"woke\" snap..."; \ - confirm_sudo=$(CONFIRM_SUDO); \ - if [ "$$confirm_sudo" != "y" ] && [ "$$confirm_sudo" != "Y" ]; then \ - read -p "This requires sudo privileges. Proceed? [y/N]: " confirm_sudo; \ - fi; \ - if [ "$$confirm_sudo" = "y" ] || [ "$$confirm_sudo" = "Y" ]; then \ - sudo snap install woke; \ - else \ - echo "Installation cancelled."; \ - fi \ - } - spellcheck-install: @type aspell >/dev/null 2>&1 || \ { \ @@ -93,7 +83,7 @@ spellcheck-install: pa11y-install: @type $(PA11Y) >/dev/null 2>&1 || { \ - echo "Installing \"pa11y\" from npm... \n"; \ + echo "Installing \"pa11y\" from npm..."; echo; \ mkdir -p $(SPHINXDIR)/node_modules/ ; \ npm install --prefix $(SPHINXDIR) pa11y; \ } @@ -101,7 +91,7 @@ pa11y-install: install: $(VENVDIR) run: install - . $(VENV); $(VENVDIR)/bin/sphinx-autobuild -b dirhtml "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) + . $(VENV); $(VENVDIR)/bin/sphinx-autobuild -b dirhtml --host $(SPHINX_HOST) --port $(SPHINX_PORT) "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) # Doesn't depend on $(BUILDDIR) to rebuild properly at every run. html: install @@ -111,14 +101,14 @@ epub: install . $(VENV); $(SPHINXBUILD) -b epub "$(SOURCEDIR)" "$(BUILDDIR)" -w $(SPHINXDIR)/warnings.txt $(SPHINXOPTS) serve: html - cd "$(BUILDDIR)"; python3 -m http.server --bind 0.0.0.0 8000 + cd "$(BUILDDIR)"; python3 -m http.server --bind $(SPHINX_HOST) $(SPHINX_PORT) clean: clean-doc @test ! -e "$(VENVDIR)" -o -d "$(VENVDIR)" -a "$(abspath $(VENVDIR))" != "$(VENVDIR)" rm -rf $(VENVDIR) rm -rf $(SPHINXDIR)/node_modules/ rm -rf $(SPHINXDIR)/styles - rm -rf $(SPHINXDIR)/vale.ini + rm -rf $(VALE_CONFIG) clean-doc: git clean -fx "$(BUILDDIR)" @@ -133,29 +123,42 @@ linkcheck: install . $(VENV) ; $(SPHINXBUILD) -b linkcheck "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) || { grep --color -F "[broken]" "$(BUILDDIR)/output.txt"; exit 1; } exit 0 -woke: woke-install - woke $(ALLFILES) --exit-1-on-failure \ - -c https://raw.githubusercontent.com/canonical/Inclusive-naming/main/config.yml - pa11y: pa11y-install html find $(BUILDDIR) -name *.html -print0 | xargs -n 1 -0 $(PA11Y) -vale: install - @. $(VENV); test -d $(SPHINXDIR)/venv/lib/python*/site-packages/vale || pip install vale - @. $(VENV); test -f $(SPHINXDIR)/vale.ini || python3 $(SPHINXDIR)/get_vale_conf.py - @. $(VENV); find $(SPHINXDIR)/venv/lib/python*/site-packages/vale/vale_bin -size 195c -exec vale --config "$(SPHINXDIR)/vale.ini" $(TARGET) > /dev/null \; +vale-install: install + @. $(VENV); test -d $(SPHINXDIR)/venv/lib/python*/site-packages/vale || pip install rst2html vale + @. $(VENV); test -f $(VALE_CONFIG) || python3 $(SPHINXDIR)/get_vale_conf.py + @echo '.Name=="Canonical.400-Enforce-inclusive-terms"' > $(SPHINXDIR)/styles/woke.filter + @echo '.Level=="error" and .Name!="Canonical.500-Repeated-words" and .Name!="Canonical.000-US-spellcheck"' > $(SPHINXDIR)/styles/error.filter + @echo '.Name=="Canonical.000-US-spellcheck"' > $(SPHINXDIR)/styles/spelling.filter + @. $(VENV); find $(SPHINXDIR)/venv/lib/python*/site-packages/vale/vale_bin -size 195c -exec vale --version \; + +woke: vale-install + @cat $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept.txt > $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept_backup.txt + @cat $(SPHINXDIR)/.wordlist.txt $(SOURCEDIR)/.custom_wordlist.txt >> $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept.txt + @echo "Running Vale acceptable term check against $(TARGET). To change target set TARGET= with make command" + @. $(VENV); vale --config="$(VALE_CONFIG)" --filter='$(SPHINXDIR)/styles/woke.filter' --glob='*.{md,rst}' $(TARGET) + @cat $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept_backup.txt > $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept.txt && rm $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept_backup.txt + +vale: vale-install @cat $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept.txt > $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept_backup.txt @cat $(SPHINXDIR)/.wordlist.txt $(SOURCEDIR)/.custom_wordlist.txt >> $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept.txt - @echo "" @echo "Running Vale against $(TARGET). To change target set TARGET= with make command" - @echo "" - @. $(VENV); vale --config "$(SPHINXDIR)/vale.ini" --glob='*.{md,txt,rst}' $(TARGET) || true + @. $(VENV); vale --config="$(VALE_CONFIG)" --filter='$(SPHINXDIR)/styles/error.filter' --glob='*.{md,rst}' $(TARGET) + @cat $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept_backup.txt > $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept.txt && rm $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept_backup.txt + +vale-spelling: vale-install + @cat $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept.txt > $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept_backup.txt + @cat $(SPHINXDIR)/.wordlist.txt $(SOURCEDIR)/.custom_wordlist.txt >> $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept.txt + @echo "Running Vale against $(TARGET). To change target set TARGET= with make command" + @. $(VENV); vale --config="$(VALE_CONFIG)" --filter='$(SPHINXDIR)/styles/spelling.filter' --glob='*.{md,rst}' $(TARGET) @cat $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept_backup.txt > $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept.txt && rm $(SPHINXDIR)/styles/config/vocabularies/Canonical/accept_backup.txt pdf-prep: install @for packageName in $(REQPDFPACKS); do (dpkg-query -W -f='$${Status}' $$packageName 2>/dev/null | \ grep -c "ok installed" >/dev/null && echo "Package $$packageName is installed") && continue || \ - (echo "\nPDF generation requires the installation of the following packages: $(REQPDFPACKS)" && \ + (echo; echo "PDF generation requires the installation of the following packages: $(REQPDFPACKS)" && \ echo "" && echo "Run 'sudo make pdf-prep-force' to install these packages" && echo "" && echo \ "Please be aware these packages will be installed to your system") && exit 1 ; done @@ -170,18 +173,23 @@ pdf: pdf-prep @rm ./$(BUILDDIR)/latex/normal-page-footer.pdf || true @find ./$(BUILDDIR)/latex -name "*.pdf" -exec mv -t ./$(BUILDDIR) {} + @rm -r $(BUILDDIR)/latex - @echo "\nOutput can be found in ./$(BUILDDIR)\n" + @echo + @echo "Output can be found in ./$(BUILDDIR)" + @echo allmetrics: html @echo "Recording documentation metrics..." @echo "Checking for existence of vale..." . $(VENV) @. $(VENV); test -d $(SPHINXDIR)/venv/lib/python*/site-packages/vale || pip install vale - @. $(VENV); test -f $(SPHINXDIR)/vale.ini || python3 $(SPHINXDIR)/get_vale_conf.py - @. $(VENV); find $(SPHINXDIR)/venv/lib/python*/site-packages/vale/vale_bin -size 195c -exec vale --config "$(SPHINXDIR)/vale.ini" $(TARGET) > /dev/null \; + @. $(VENV); test -f $(VALE_CONFIG) || python3 $(SPHINXDIR)/get_vale_conf.py + @. $(VENV); find $(SPHINXDIR)/venv/lib/python*/site-packages/vale/vale_bin -size 195c -exec vale --config "$(VALE_CONFIG)" $(TARGET) > /dev/null \; @eval '$(METRICSDIR)/source_metrics.sh $(PWD)' @eval '$(METRICSDIR)/build_metrics.sh $(PWD) $(METRICSDIR)' +update: install + @. $(VENV); .sphinx/update_sp.py + # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: diff --git a/docs/conf.py b/docs/conf.py index 3576c5e5..d9489b05 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,5 +1,6 @@ import datetime -import ast +import os +import yaml # Configuration for the Sphinx documentation builder. # All configuration specific to your project should be done in this file. @@ -33,7 +34,7 @@ # # TODO: To disable the title, set to an empty string. -html_title = "Observability Documentation" +html_title = project + " documentation" # Copyright string; shown at the bottom of the page @@ -69,7 +70,7 @@ # NOTE: The Open Graph Protocol (OGP) enhances page display in a social graph # and is used by social media platforms; see https://ogp.me/ -# ogp_site_url = "https://canonical-starter-pack.readthedocs-hosted.com/" +ogp_site_url = "https://documentation.ubuntu.com/observability/" # Preview name of the documentation website @@ -148,6 +149,17 @@ "github_issues": 'enabled', } +# TODO: To enable the edit button on pages, uncomment and change the link to a +# public repository on GitHub or Launchpad. Any of the following link domains +# are accepted: +# - https://github.com/example-org/example" +# - https://launchpad.net/example +# - https://git.launchpad.net/example +# +# html_theme_options = { +# 'source_edit_link': 'https://github.com/canonical/sphinx-docs-starter-pack', +# } + # Project slug; see https://meta.discourse.org/t/what-is-category-slug/87897 # # TODO: If your documentation is hosted on https://docs.ubuntu.com/, @@ -155,11 +167,27 @@ # slug = '' +####################### +# Sitemap configuration: https://sphinx-sitemap.readthedocs.io/ +####################### + +# Base URL of RTD hosted project + +html_baseurl = 'https://documentation.ubuntu.com/observability/' + +# URL scheme. Add language and version scheme elements. +# When configured with RTD variables, check for RTD environment so manual runs succeed: + +if 'READTHEDOCS_VERSION' in os.environ: + version = os.environ["READTHEDOCS_VERSION"] + sitemap_url_scheme = '{version}{link}' +else: + sitemap_url_scheme = 'MANUAL/{link}' # Template and asset locations -html_static_path = [".sphinx/_static"] -templates_path = [".sphinx/_templates"] +#html_static_path = ["_static"] +#templates_path = ["_templates"] ############# @@ -239,6 +267,8 @@ "canonical_sphinx", "sphinxcontrib.cairosvgconverter", "sphinx_last_updated_by_git", + "sphinx.ext.intersphinx", + "sphinx_sitemap", "sphinxcontrib.mermaid", ] @@ -250,9 +280,7 @@ # Adds custom CSS files, located under 'html_static_path' -html_css_files = [ - "css/pdf.css", -] +# html_css_files = [] # Adds custom JavaScript files, located under 'html_static_path' @@ -275,13 +303,15 @@ # Your manpage URL # -# TODO: To enable manpage links, uncomment and update as needed. +# TODO: To enable manpage links, uncomment and replace {codename} with required +# release, preferably an LTS release (e.g. noble). Do *not* substitute +# {section} or {page}; these will be replaced by sphinx at build time # # NOTE: If set, adding ':manpage:' to an .rst file # adds a link to the corresponding man section at the bottom of the page. -# manpages_url = f'https://manpages.ubuntu.com/manpages/{codename}/en/' + \ -# f'man{section}/{page}.{section}.html' +# manpages_url = 'https://manpages.ubuntu.com/manpages/{codename}/en/' + \ +# 'man{section}/{page}.{section}.html' # Specifies a reST snippet to be prepended to each .rst file @@ -293,6 +323,10 @@ :class: align-center .. role:: h2 :class: hclass2 +.. role:: woke-ignore + :class: woke-ignore +.. role:: vale-ignore + :class: vale-ignore """ # Workaround for https://github.com/canonical/canonical-sphinx/issues/34 diff --git a/docs/html/.buildinfo b/docs/html/.buildinfo deleted file mode 100644 index a0f3c9b3..00000000 --- a/docs/html/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 0fce2ff703edc4415fb5d34ed86a2984 -tags: d77d1c0d9ca2f4c8421862c7c5a0d620 diff --git a/docs/html/404/index.html b/docs/html/404/index.html deleted file mode 100644 index 09f0b899..00000000 --- a/docs/html/404/index.html +++ /dev/null @@ -1,388 +0,0 @@ - - - - - - - - Page not found - Observability Documentation - - - - - - - - - - - - - - - - - - - - - - - - - Contents - - - - - - Menu - - - - - - - - Expand - - - - - - Light mode - - - - - - - - - - - - - - Dark mode - - - - - - - Auto light/dark, in light mode - - - - - - - - - - - - - - - Auto light/dark, in dark mode - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Skip to content - - - -
-
-
- -
- -
-
- -
- -
-
- -
-
-
- - - - - Back to top - -
-
- -
- -
-
-
-

Page not found

-
-
-
-

Page not found

- -Unfortunately we couldn't find the content you were looking for. -
-
- Penguin with a question mark -
-
-
-
-
-
-
- - - - -
-
- - - -
-
- -
-
-
-
- -
-
- -
-
- - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/html/_images/add-tracing-support-to-cos-lite.png b/docs/html/_images/add-tracing-support-to-cos-lite.png deleted file mode 100644 index b8af7dc8fea770680aba06b994c796474095eede..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61788 zcmV)8K*qm`P)XaT6{ux0|^EO2`vN$Xh8)gKq&_S5jzAUK?5{D0uUtwHfjU}D=Y*gBLfsL z1&xkLjRZYe0xvTH1yL~r97P0peI7OgFMtIFClWGgp#*VtMHd7GY)}J8Xghoa3@2U& zIbH>LT||5YdOHy}2LTW^YeR5?xp zrNhw%T{c!51ha!nwa(3jP${apxE4wUh;52ajmN&1UIbZbO*<+CbBLi~CF%V9DM$lT zPDB6w;J&1F1Q7^~kBMrVx0J86LQYpPU5?bnoLGyn0T@yPXMwx7t$e4rODGN^A03cM z4+U68Wrdr0M<5eGc^f1(GjzA<+`(Ec4`n$S(8#p}evj9qVuXBYEHyvC#ldN5XJDby zMr)M4;N_6S;=KpL9p2 zs;95y{%l)Hshf|mkz>}niUSEeF(@k3)WeRp%j&&*>C~ity5h``O-DRElctyilBCDs z%M%$Y8!$>PK2S%Q1;2nkqL6zP6d2s-?>ts{YI=ZqtIkwlZQSPC^6cAbuH*jm$NuH0 z5g|(jpO~G7VLU)cy33?vWRaI=Y6NG8na=eqRRaV70t5mA3=3=7001BWNkl{(kRiMl)XjcBRos zBkBG5===NrWC<^O{)M)v!>czs9XC(%Ja_Y=DDY`M+#JW;JQq2Cq3?cFh;Vu$wngX( z&+E2hFZN7`Fyte?=y-k@n!Rxx^7aDX5F4FN(p%(6lEuXBb!dMSRw{E4nUpe9zH*iw zr)46`GAFCQwEAYL4?6S%N7->$St|5=FIHV;Sr#s4D{4_yVeNU;2%)ggQE?cz(JX2i zMI7U+4rM77w-vT5{)SLW@gd8a^i+3uKJ+dc1nz3bb#s@41~E5-S-5VRrlZj)Nz?H- zO_PLX0Gs>7V3Z`i9+qS_a3)T41*WTr0zdR|1-}Z06yx#IctjhK2teP~*VCCyWOZ7=@9PkSB4^LAAUx}DrMW;K4Otq?Y6}MPVpZS#EP-U2@arDT`LY7yv`!~6vQ;N zZgXf26Bt_XFv83y#N7bMjz)t46S}@W3+!No-|=8EsJ-3{vp|-a#m(}3Jj{nRu}e$i zF(I34Wb=I3XaG|L4hdZ1wItG}$mRo$Y?{_56y-QA^T~H?6v7A`eh>B;7NVpqo7Cds z0g)R;^Fld?EMNt(d)3NHwMS9W#{^l7BdwC8$*gFMszw%Lknl}&9`pjAbZ5fP_j&r6 z-Ec;7Xu`}@eQr-!YZ8DANn;C03;KIlBuuK-*gViHL^xx8{=EB$P$Vvi7bg_IvN;S^L%~0J_GDvK+H~n zokB~z)RXO3E zm_;Xq%gh$82m){^3d++g*G-`f06#MuX>7gylTzgqrWK}LBg}aX zC5TaGnpHR;Dp^nBFO}HMs;VQK?!jLe@cosmKUuMpfv#Ahg2H z7)_xh98@H-q_V)%N5Y4STFN*CNH3m2Pzhw)Mqh2#UE6k`y?ZM38pt-G-Nz%KXQJT< zSPAv$VsAPjmY5x<3@ET2jTl&3L4Ao1NH72gqD4{wzh2SMS;%Y-A_ZiYW(4z*Yni2B zWc7q`hUA#2Y{Z|D@dU)`5bI%1D#=PpqM9is$S0{eh-G9CkCqM{T7rjLOo&(^4x=sL6?xpYln;TcEV8n&t&x(s80bD2|25+H>Yh((gR*bnIqktRsQf{Mi$o&dH%*-D3& zS;ZEH9fB2Wfz>uvv5=#UvqrYbtR8%v-sv=qL5C9*k0dWltTwV!V#jH%se^Pt4q@GZ zoB&sh5pt2NSvyM-90W!eqbQnBOayGj$QlD{6tp4<7 zHmVzKNjshR{69bFf?O$==a_Bco2M>&u!yBY&j!jXo-)6ly!mPLYMjX}dSMrLjqZIgt(OA zatn-wc^(q7DyB0^Aj{W7o#t?bSBEu0mZ5~mDy^_;8n6*h5j)8#)N8&6Ms}9iTwu5{ zw1V<2CxE;L>W+?E)PCc zh4E8Pz|Ip(Ix#K3y61oRm(|OEyMCc>(96!Qy?G?)9DDH5ndkCnBTKvrc$F}Wh*o{B zSwi1?R=U)+xPE8w;xDeBS+T$K`g^OTF1VzvPkz+x)6bMz*{hf+^pW5!#fh&zSba`ZD8p>UAX5D$&%gfj zb212g`|?|VJtLKU{13RDV@-K9g(C6~Tt0j(9s&Ftl_eR5?#>}gE<%`R744S)zVq5| z|8)Zo%*1g~qI6FF?#2;TgCxz_*3KhKz)n&<9fOAju}PW?2-!rxF6bpWF2^q^^lJ-HQf!6rfSz>)glaQShMMh(d^3pOao0W|&sv5|`?dl5$+7y$! z(5`(>W6gVmeBe^`K1VD$M+gh$>B^n{JrB z_~j$)63=ATm;|KUBG($*X@EJ0>^_AF3hm=xKe{00`K>pPkkG|=TDS=>-T(A7J}& zocd?i*4~jM=9m9R&5*~h;&vwZ)XcWENV@##upc1%U^|L<#kKI^JymW_Yl{B&*RDNW z!_ZPbk)mUpuDrbUQz-*Med>c(GP20|O_ilu$DO=QG(luAFr(aM-1xkV5 zfj_Q2diCbo<2NMTWkrO1uOQ;C9PoMk4n%q|S36*NcV2x;*N7l_} zk%h+sf#|lWs-pTu*}g%xLJ+d^icjyfm{`A>s4OvCslCeDLn(pW|NIMGMLIdrF~-O9yU%rd28+Z#^zDF`e#=Z&mz4eXjWfI%DzvR z6gm3=epmZ{M$Ip#iENMKHj`5-x1s4w8z8jqwur#$-lPwhZerx=NT2MZPreWz*aXPp zlYs}9+}yY(4Onu!F-&&6yDLHzh$sb9C4kCU&<2@{Vl3cIR-=^VZfT7sH%+*|-#OEN zh?_eJ)-q-0%*?0X^Zk8)M?j-0)bLc+=H$5%%C*f9l~Z%mG9U~0>j{X!4|sF~Iq?Rb zXMH7H!cPwkj!L*EA7LmbKH^m(GZrVB0FJHO$#JtIdQQQb%fal`1 zK@~$dR}s5rF11W+5!pWp*wM*CRYJy-kF;1vvi0gLRJB>qldrFJk&L~02i^!77 z_pmeE%Em>1^c-8G$^%3ea23lXRtK33b<^R+)Fe4RP3c9rh5?n*)rrb&dQnzJJJ;}1 z(q{?W5uAB2K`@v|r*=LN^O0K`O(xQ9r!#oiF3`VZg2w!}X5pNZq~$S1DL%CYFTEbZ zP)Cu)K!G7^!q!5LR}6SLvw39uNi*$l7?i2f3nybo|A<#Y=RJ5~^jxi;cvkF6=22*| zi~??%Jz&TRpbTc4t%hkVK#NJE)5*dvK=#hk)Pr=-Q5baUJ7XhWc5i*tAfC(b4Z+Lm zB)O&1q?~SRgey{dJtbDG&-moerIzyw|5)r$BUyz#kwq8aE@qY&T?M?dcb`XAwA;nq zPFBomtc5ob^vD1=Gzf^SunXDs4mIv+7`Z^tNe557zMq&$usvu+Ib za6x$?dIF zPlp`;UIS#0fa0MyHKDaMc4p$;YCj+mzp5$06)iU04Q61Q_72Dq$8X*0^Cu(qP=Ud) zMDA3Lq+NbGsPr^#)2BD(w7;1~{-dSfgwL4L5xdC?TJ~!tJi;;za<()w( z^Q}1_Y}YehF0?{kR|_Q8{%H-!Zk{OSk>#B)VD<=$XAxN=M^-ZAksXC+4K6YY$bM~T zT4P>TaQ>egLl(wp=45hXAnef-!sM12h%%`?asF}m#_AKe!`^A73y>X!*|-r@DB{Q> zyP~E24ckgr!_~#5S*2@S34&ojWWiS&jT}I*vXR$X1a^#q(G7x_U7wO;ZSYq^@FfH< zJMZCj985+gmgPF&vq1oAC6o5!51xIRsq8x1XgENhoa%|n;kyqdAWeA(lc~vo1s4`z zrtg4ZBeKZ0O*gvGjHrD8!z64B1D5N}fs%E8D_8e}v)y{soC$cP^&k`$e2UCC{MpztN z9a$aMLJ|ISvod1!4S~)11CA`Z+I_+&$espdOB{%-wf6X0s)v-CKZ~rZ_-#(~&78@- za&*4hz*5G9xJD49AuYVzmx#RpW&qb#{DBABs40omL>5^b6VlX7lT!&qwv{wZuDcWZyatIvDd) z%V(NyK0vSJ-Mo~b>tGDZG1l6(p~?zeWkplDWXLkBBO6}&aJCW)yLNTG7JfVj1T%_4 zy|t`q296H@aXNLOS9eY8@@+kOIdr;X13LEk*)aRFF=5cx4#TgCAc{m zN`KT882jHRyaShH9CUXeLF4|@8ohIgMnH3YD~PNzH8pj8j959Y)z#K&9%|`Xt{Yt~ z?9depc2w_nh^(7{$fAJek%jr5SzE59S!DCD?ujdYYj#*Oip#7nwmUpJ$h%tZWhLVf zOvyM4>c}#cB}8J#LbY75e50VH@QM1eu$kKwvA_-#>nqNhIQ*Ef@aAfZ`N7h*4;D4}D`%e&DE#^5ak;eN__v^$O3Pje# zM7E3{+GLWX{RU=d%W}p5OLMRQXaf*i&k+|OE5jXjd?|rJkNJ;a+4EI_z*dx2aAiXC zRqABR2^ho7b(ukAv&dpw!KEX6C<;s}1dg`a~Gc*tw-h7ARs+w7}8 zl44-t*4bPvHxSE;nqRq5wxp%4Kv0txUiWQ~ZdXBy3Hha6u1 zS8X$eo$Fracag#Lzf~;1Sn8@9(^HwW50tjQMNRd=&L)`mmM%W?WRZn$#_|W>!5u~w z_IXPjFi)=&!*;4?oIZa^(`_B{>Y~h%HIx_|w&4H|&ieU&_g6eiDMp{c+rLL8day zD7EBhKu!e>RdA#7tK>>~tX1_zMUl+n>N#wAv!qMZmlEWhY<_eiHw{c>u{G=64o|cv z*6SN)63HL`M!bVbj%>u!qR#ut@n2+m#fLj#cqdw(U z*Vf7A?44hM=f)cex)3x>hr5PmBc6km1G6;N1_i$fiv4{?hHP`9pBx%bj&*J&mjkP9 zO@oPRzosThw|Y)0k;t*Z1P#yCw+9l*=fmXWRzhAFGdOgG-B(O3(^p(bv!BHX7QU#F z-2pNKrqv=y&$llV$!inD>eiP`Wmg$sp=EPsk#*uSM3&C7 zv_P;Gt~u1{#ebw|a+FktR(qN*Bxv%P?>!uSVbXEzmp|n2oX0zp2rsKwe5Y>wu{;}V z^KQ<{$t!0otw@Ev+Fot7x~mR<<+R#`+`2BFAvl>Qa5J4PHip=;J)k$t{ztdj$4F7$ zaeQYd&+P2pI@8_R&F*+JXP3ES_pZlra0eb7FULy{LEg&A5d<#K%4?do@euk-15K3^ zS}idaR04*GH7&$OnyN)AiY0{F7>yN)*pk|&tuaj+Bk3RA?eFDzX6F_Hxq*Dyned;uWD8Vj|uyc%o9RaG}3CsZ|)t3}7b6OiQ1C(T&4ruK{=hA6S8Bi;0y^ z!M)!}2Kf%zO=GCeL>cZ2@b%#F_=E~KZ$%RJt#}xYdhj7U&vi|<$41hx7#S9^Q|2U< zwKhZ+zCC^+&xSmcI~?#Ggpn_mbo!zmw>n^MrRY`CQ`p|ZL=63~c&5pa#olEf6fKC@ zTv3&`)aEO6(}p3k7FPWDtMN|L@FdbLw*tTI@}pOtc@icbmwGb*1~PFwiP-?6W~34e z(G_{-5Q{Ce24#=}%3CNB`;29Vknu;Udd2EtYSSi#@;V7 z+Mv_MGtqIwN7P+p1T&QLhDxz?K}9X}ASStyfSzwFi|qu*K|>8f>%@py?$}z)FnWAY z1l!bT0A$JaBhyjNVmnB0HTz*zHs?!ZONcD11LZX2AA@-H>)|%+2p35|!ugF`tkIkT z8txqpJ_DrIROGhpLW~mh49>i$XY(2K5!jgwkQyLy`MgaLHw>>0QI@6#*&EC2SYN>A zuWe^C%J;%18yREi2)(1cUQfLAF7~g&hk`lFZqNp`n~^1BRU}K20FfWtqWWJdB?ok< zTXFdK_0q7s3Ww6xt&Qd~7t2P<>}eG%a`2Wpe9L5vkVUh00^*ySNFcR%3B+La6F>zt z;M}8M+fWrQvlT$3^Y2W2;l|O!{i4SGHJ$!LV(~>vI=+E&EF?m2O)Mq{fO<`dt{fEw z={Z0FfTKAnwE%@Lu!^o-HS7tWyRx`9;Z0u4Bj|;^nzEl>GY8E zKQpOjBeFK|1{YK%Kq>0`HdzYwAP7QABfNsTW#wR_p^+gaWF@rd%O#o>pqa=957YDE zA;L3jv-RJ;Se7q{qoIi%ve?f-VmYcMJe;M4>qc$c7*pAtZ2&bfNaGOSSW-e& ztC}&dT7x;U1!neY%=0|uM5&qN;D&h}0%lCl%B450@DSm#W0B*jGQk=~s5vO2YYqlc zTF(I2alHi$7>KV99(B+Yj(0*7<9&9#y*?TZfZ242Y>6`N2^3#_Ir*c9z8rmaKqIKp-o$#pOMpx?7YT3S3sy@AjN+vC0i!G zE_>oK=}KD@&;9@#^zga`O$?qYqYV#3Di4bkJR6Wrw{eUuz|7r~!r9Sw$8uZF!H zwOVFXQ$=}&;&6J2!!(Wb4x}^;nRH8TdND+{go3bCm#%)XDYAuXRxwN6R2|*l*w&SS z2X+9hMQaCm7!XPjMgu?w)IkgI7od>U30WN_tk1%rln<0UG02BTM!bqvT#Q=ZwOSZlqx%}S3v3l#^#)`mwn;=9{am&}R_fQvs|O+1=B0yd`X*t}x%aabLbc#3EKxFXDiWHy@R9WY6$I48iuv_$lo21t!Fm+lg0 zKDck&`6tBor+@S3$KGhqra@+*dazI#q|3>qmbB8AL+OxkXRe~>LX;&?T~W`)c(oT~ z>sdmUA|dDv5(of$=TLhU;Di9Zb-wE^T>{90)bL!d3K+ZIc$I<34i0ab4aiR4**)jT zdS2fM@b4df4v=+-+Cmj#?3$O>Lv%epxOj7F@XkHcw(RV6IP-#|4-Wvc(+9fqTXv-8 zd}Uwq3(b}i?zluFtCCR4Wbvefu#g>i({pn~_>*!4pZUwOSoG}Jv7diah`k5L zj@>Vu=|4Pob?mJvrt{wA(_+!J4~6*c%k7nqUicCmE#+v2rUs6U(smW#p7{QM?t?5!uC?4R6a1_Jg6!FcvRUtpd}` zYg%&gGElINvwcSo?&dDsE&a8`sC6I zvEl6xE}p&E|Br`G{{B?|&(6Pf?alwZ|KsK74!`ip<5M=ged)qOC-3X~_?;^szw#Y% z=2sVAeey%`we#=Zxcc%GvF&#!FaGsnzbU>90s7mQpZLp#GjFb#`~0C-{{HK7R#$x+ zOzqN3zx3Uqt?P_QGar0l!Bgd~-kAq_rV7#3I}Zf{gj{##y<+LwRYSWE7_>GqhR7BO zSI?g?|sq2p8xm?bjeeGP&_t?8O*!2>VHZ~+A zBu)Z^Fdj+@;gO6~l$56!k3tF>?`MjLM<_5x8&N0=?dTW{9bGk5DhyT-FmBgJEfLlWSzD!dII!BR2U0DX$xe~M^X#cjF5#JSOY(8j~|3d0~FbKP&6Vs_8-Kf zJ~|lB#9dKx5!6T%msXbQUSDwp87E-{)gVIGl571ErwR7$`me+1vU0rahb4=MT=_zdU`;zE@e*M<-bg zt~}ImVFQ?oUbg>J&X%6q%a)$U!n%uZx^Rer(*FK$r#mlCzj^T1nGb$lZmOyzRxMHk zUiXaV<|VteDYHg`_iz{k@Uo0`?MRf4TN_^2%2?U(a)z5~U07~%nJ&3i5p@w51`&&( zmkm!DJ~BLI<#@&b**>Fh)NXu~V3{xuhYv&~vO|UevXRvB*^`!4t*KDl9RFRGK-NW# zui!&DUp%H#QR>nY$CQB~;I*rPTv$UX)3Ag;!P&ZbgqiH386(kIvw?DHeFaVm@n=|wTk#9cYO`m=QA$gJ(30ZZ~G za@L6*b5YU@Uo-`@XdB=(TV;zo|NMs|fGimUZ)*R)u3UNT&7ZNJeQgY60g&xr+(vfk zo|ljO1(9uIRr^lXymRXAk@Fii!S%oRTyMkue_y$>=gl^@^u}hUt2+DS*msx#Dtq$; zs4Qb298Q4Wbp~pI0bRpeA1`TDnwFPqSo|kpmEjj~x@6>(<%#h8l`SpnZ;xasvRv#T zBxL0_EpiGbgvvCtTUjB-F0 zQ}3dh0#0=S=PvF~9avPsm4@R}O(lq#xH*u`Mp81^rSPjjCdNZ@JW0qiFb7#_7RWDv1Y;8i;EgR`PG$jG?*N%O z8?1w#1x-72k3ZFqm0LB6+hy$`L81u?6&ClHiA+H-=r0@`jr-!ktRBbl`kwXTQ@65(FZ2a^pkV&D-JqgM)5`KNR-Z^^!%SujN=Lo0ZZ~>^3G?R7NZ_7YmzXSI zxv&mqCr>faZ#{`@*gb6iZe00H7FqPdiY5)M2FPlWNmDiL#bv5uCs`3$w<>FYeC+D& zU{H}!#IxqWA|0$VCSZ9UAd1K0aK18jVi_KrnTxEwInzf2p0K8nL6(>;AoGg6W~dEO zw!kjjsA@8X>6HR(-3ka|k<3`k6M~;yXW;R`TAE&xpC1w%>_a4(WDl~;4iNDdeq~Im z9jG`93H&TD8I^9jr@f*bbg~7PLaOlvut*~^b#+`*PsjvMqL6Fm!mFX_* zm&dWefXcN#SsGKb5twCCg~%m3s$h-XFMAEZ>-iXvt%D1Eg#84xvF0BGIU);RRCvCM zu?(`O6RC4wW{?FoSA4Od_~B`Ax4mFpSFxJ+5?rV(TXE_`yxV{IrEB0ZOs`>O(!JQM z6bk5GecTJ-%5kl3@UHICO0I?RQl2pe;jR`4!@^y^O|T&&B2=}7PhReR#q9`g%E;n4 zEsa$!8I8I;KHM}5ksUrBz60x8IV%~#vI$;%4^gv4TY<(vt6Ec;I{tm+t-4ZiaWV$L zYiieaklfn2v$@+;>f81B;xQF{i_EjR!!$C-+PtU zy?yG+YcKyw>$w5QMs=;~(z|y*?76YG^R3S>wXOK*?vYDhzEpMb=d9|Lw$$6l&iwd? z8`z4A?_T+$m(BbstbD6OTk+4$ED8?e^=C^$x-w_aseQn5&R{C}sd$a9$=w@gwYvMd zhPSk|Ch{U(D>rrrO1mE4-tl;?#>#H5Ot47Bs2v+yTAx89V8X@Bh1U-%g<3ohchZ3P zM#>(y+-`k5df2)h-RlwA(ovH)j%StYVdZYlzUE{$kNOWIT5b9lkJ7WXhDl=jfLsev-z}%3-KIxZlN0M8Qz?cTv=p+2_lx5B`zGn7tSaEWZ^__foy}J8bZE6 zRu0z5qDnV$@4@*;gFS($9-tgA=xk9@CIrK1Za`4TokSKxFF(d!h-`9jY;cm4mP)cB zSuB3!mTGVW*!>mHsw|ia^rTJ$i$0W8*UUjSBetZP;-&un!nmJ`4L9O4K0JK z-?Y%m+WoRx-Geg+Zyk)NO8wD$Ck@_k^xoNn1C82kt2ABLjpCd4&YY+_4DnOy=&Isd z_pbi(aC!aF4z_b!2dl-ECm6eV_V4#MfJ`4fd-XR7SlQvy`O=GRY%pNS#y+^ZikZ$C zKbb}(qi|mL+8JxzMjwP>Ta-MlWJ32mZ)sC^b949j2rHSe7Ka;E%xj*v1(RI37X~AH zRSs0d3$}%mULs}9-Ob(Iqazhf%`+y9fNMo%bN3b|SCYy~2a5`uM;!$9)o|OcXbsiX z?KmN^wz>i??la-w`|X^krY$h6;B)Y7*LGeH_n@n|VpsK#6fFhMIB&o=*lO^d@HQ$e zfO8DDn$s+-(#$8XNxO^0s6OFNF`_CeA}#j883^-V#!f%L7+{ELPiCcfl$m7 z$O7xhz6KH;!?XgXyJ9%QE2;(@X#VJ!u!qjx z`$a8sN(7+t4q`55sT=~G@X&7tSQsl@UMdi9#)e=$!C>%VvmvkoN3c-QpoA%7ufF$P zFaxT>;!iVGH`ow8q}Knbyac7e8)3s(wtve|ZDQdZ!_cr6Yj_O>qArZ*!`Tk5FttMB zkOI-FN5;Uk6io#4)I{Z?sY5Q&UI_0XmWHu`5v#oHtKAA3jr0Oj0dx-X4|;l#CK?j+ zF!^9N48ZrmG^m?^2UQ)%B?iS|u9RAqMoSdYV}R#kFvbn8bCH%cGM+$WWMyj#98VTl zhF2yHaD1Ln*(7ZPk2ZcIM%7zK_=Op&B2>sE^>u|Lo&f?hKj}c$<3U}O+>$LI6;8$) z8~@AK`M^e5pK-h|*Z1vv|K1ng_s+Z9-Ss?fmG=6F+CSRTu81Y9aH4`Nh(hZqV1Ue+ zMVM8LRfq%z#z`0(8zGxp7Rd2yvOn8wWcH!+&IIc3R~CCg&c+w*;%-}~NM z=y(I|UGJ`KuAh6}=g;@~9x{Y7J)^0 z2O*S*d9%ZW5_rNwHfY$9f;XHhsTy(t_abE!(_qxWG^@^F6`%&QB0y`f_lv(&V|d1% zMlRQI+2KunP40DpUB8GkIm<_qtTurp^JiaK{2+gIhQ$tb{Bn_zY_O$uiFq7Gw3bDL zq8nOHQbjk*LIos?860LStrBGs&xlf_pG``(&B2kbV9*e~Wb75EhsOQOX)eHUU6S1b zB?gfqF-uqCX^yh=t%`o_=OLSfB&K9TY`|MHg$gLI;MG$p@D=)0$n)kGJ5&PlQnJ)2 z#a2mX1=7JnT(v!9DUq!Pa#=yPmdKiIW&l|<4yrtla9E-_1F%yzM0P5dr9aR--+&;- z@|FOyj9Cp>IY=8LaeVk3?gfJ%~p~AffchM zV8m%)4}nkVCdw`?B`!o*vSqtiPL6n^g^dzfQavNFqLC4WjM&7=@Heb^#zsD`ER8|# zA)gRUQR=Z#C;e#Gbb|hlo(yeqKlP*E76wE z&orlv`{S=TT3+?4gAhk;M%)sqRDMOv;F(u)gUlvprsfRuu;ugg~`A5C$i2ia@A*fk=2Tl-c2+Qy<@SDz%&6>=&K@Z_$N(A?Mrs4k~ zs}6xy6U!nq9G2|@KFg;RuIdn7A!i24`;d@zT~4JfeuV4rXL>dQ$lB7}oyGcfn{@{K z8b!^{#0s*^Nuey6ECDNWM2}b?TP{bhaKxkKbm6M2>Z4`!Wce$JbhaE#7ZXS$qUECZ zgeO$l7eJPNTj*l*%w-wzwIaT@_$|=LK(d|pn9V1}+Mpzw78M#jWam_ab6WY5?8$ox zsn;cFr?jA5ve`hR!SN-twbp{aq>!?wJY>V-HB_sOV!c25={2+IsI=zu*5JiGZ|>AX zp;+khej`ta1ZAsv_iHWsbx)mq?OHvOdf?exzDUecT97TUhkT-TG~tiNu_Shhfeay% z8{Pr?LZe|~n~h#vLycGtg%BAqv9366i<>cQkEc3U^+Vb1Xq^-N?F;5#=$awOdXjEV z9ELWHZtNyr7mklV?AyIY?%Mz0u7Kx{j;{^1Efu6w}TV@L|<4)OXD(fp<+N*7Cs{VpX)&b!hV_Cc9 zOlul=a|L#b5o8HFL;1&v9P7*PAJ+9R6#0vx((&J%+d#;&zRQtMdX8c*DjpGbnOJhd zRAJp8j{f(B!`eqjp8MdfBRfsbfYCFU7G=EyRf%PVbD5k*d7Xv2ON|mRxZS>u>K^u# z^@LpFa?CLm?rn~Yy;v52;XA!Fx9huKBK}sN zI!%Kv5|{N0 z=x*$OD9CD-rT6~j%#odN7Mpx2*Z16KFC0Dd%0TlolV@J(*JJuGPHxa6vD`-AjEZS(Yw;jtZTm(jp& zSop^yxFVgc+8k`Hj^P#C>Z_qJ-E~+^zp(d6-+o81V^DLcM_z#Gm$qq(6a-Rvnj3B)%reP?m~I9c}w?Hho-H&p;J6&Qy9?R&`B9?D&}rtnb+rxY%R#z+*Y+x zD#R*eW3?#Dhp*mBAjATUVi}XHVnn86i7V48-B_*-=pyWsv*~D|z8+IB#Mvgg2mO?M zqRh+|1=%8(fN(BGW?JHXonpD1&2#nDN=adsa)dmmwurvc+n`joDB~_j3`(MD35*YF zhn(mGDlfQB3aX&B+U`5U*beVGQgCITYO`uPm&v@rulUOxV9((fS zubV%8>UZZ}e{EpsC&ylY{!b%qIY!p~_r8<+&izVX{m$F3zi@s;jS}=no;dl$!yELJ z@#lT_>dgmVZP9=K%g6PbFMjXn*L8yENG?No56QQ=_z&F&|fO#wQgRa`oG=VG@5BZ%DD1YsHdOyLb^)B7m z0cj$Tt@Dt@^b1LB@6*deVJk_aFS1E|nWdj4jkt*+j$wS-d7>#t_F(iAtFDYcNqjmKqy*=#|V<&YUe5 zI4_`F79R5z&JR(P`PCPTWW}T&OE`0CJ6+SOC2V}zyzbs;LrY81r9JT0G67^|;D9|v z8(U8SpQBnri}y`v^Q|{Di!ggo|Kzx~Icu?GW7mw zWBq#@hW>eeL=9|*Ui|j8gYVp*GkB`od-n8?kAC{$;|o8V{9y9gmvW43G|ig_iG*6D zjd{%jYo3+TwC=8O$AXoao<%FIxjQI3pv#yUWbV4N6f(Bo;b!hynZZe($kjzwAO$|# z8k^|TvjR9|L1WMmzHQOA+<`R;SxPUKwPdzm(DWd&YE>~O8Uvzj|K=0d-Pi4kOEZzE zkd=4$V1caW4vjC~(uvBedFe(m0`rtyg!&-e*yGxQtmq6`3S-3xx}vwH$zSI8hrpB{ z)F^1BNx+9+nRBN~fGuA#-{KQkzLzVsj!F5X3Plf{E6 zFF^4{g-k1m#idGRcB}kiMX~Ud5Oy`ug)DXHU22>)#ylWij`Da{Mf%1Vb0^pJxKuhd=%B!D|K{_`xk#*IUxc zf}lVxf2UPWkU$n2n}@bm&&1vHKfWU;vKZ4uE{k-Pkj*){o9@0AVwVMXbamadW&}5= zcQsHgRF}wx$B!S{@5+O#{ETLY?V)$Sw!6b`aT= z>Pe*BAr7*AU)ejlRx>nX^L?F$Q5QtkasS8I^~E-IU*X(b?#=bh&2{W+*LLjS-a#5L z4rxe29fnu~5n=YdfLsod2;MC%K=`{mwbx`OY9+dDN3A8`phZ z^%J6QR8Jz=$@>_yO~E-jNh~4k*D`(zD!vvNOo=uEu;>K%Em2?5LW%VYN?i=z0=&Kp zc_0>$Ed*F5f>1lj0kRIIV5}QZ2EobBw9i)IT#Lo_8mYat^JR4bO|$~;;_GZVr-}{A zYNH0(YD{P-(*ic^m<`C*h1VKl!yqfATF^W;>&9!f=3x-6gf8>}WHW@r9@m|B`sVXP zr{C^l$U3>*SKfX6Z>P>1a~ZOS|8U5->#dvXE`L-H+1-D-arMTHf3G6G`y<0Cff&3( z#2{7rRiEY(hfS#FL_#f^vF)@JwJFAS!}_qYcRo`c@AE`#O_*<6E?OUn%7p5IiE74w3Yz^uTE zGh}hzr%!AQOnd03F_#5cHQ3h@AL!?~8Vbn+rZ#%-{aj{4RZNKwQ3|6UFyJ*rS%$0& zD*@Nf7f_F7O%R2kP-Gxsw&9{fg#`>U)Y1*Xl&C^$TiX|>VXay2d=wK&t@DB>Ew`EVUYSs*oY`NO`s_{22cI`>^;_pS2= zr(f3KXCE1KyFP-n@q`eA-M7B~*HhxuUb_6;d`i?FxVg@NGS+cC*Orc%uGfrsY|JGA zvH)v0@AZleAIMM?&8-c zhQ?8L1tE1)ZwOhaZ}E}|8)z*#W!_<>T!t)VPV}~uqTk9%I}*1vj)(|~}>`Zdh@x5I2b ze+?usB8K@A#G*h;h$S+c&oZwFse}aWE1+aK3N}w)U#Y*F)sQhIc zAnQ8D?km^d|L2?YE?-=A>@Nh_(r0hKK|J=>L(AahrY*ku?)yW=1Ft@F?8+hIm8n1e z9rl(VJbmZsf4x>ZeeU^70DC}$zrTCagxWBLLf6wTTshROxlW>SSEU-rMemmxt?M`f z+33W{$a*3M7^K;>VZN0+NKv<`rN4j2#(vv0)(?*lK}fju$chc~iOKS_v&!`mJKvtS zUA1IWckM-+hL}3ckfkxb5rqmjJS!aqOv2&z(2E z{lU~ve|fRb%6;#te_R|Y{r>82fA;Ko!!5md<<)15!6&AsuCFpmFJ67`7w-)j$LPwJ zUNe^ddTQziuN#QHZi;@+sZX!3GblrL#Hx=yq_~NjR<8*s7#VjZHcs?@>yeWhaoXO! z8@ny@?uqehi~5)B8y_Fv>g5J@T7Pras>YSr}=jbTwwlyp`r zGlOulu?;r~G3&?_qtDqPy=Rpc!L`$;9Bje#FiR;|UX6kkd?^`#1)!)~4Lb=GU^_Yx zMn%Yl&|3vFKzTOGtATbyjtBy zEyDK>8oHjv_e}BtnM{7j9E~iL_H`xe!nOPPc&>>*cET_}i{LV|yo_pQUS@VinRDObeDPkaizl0QbKI3n^9r_OXI;;WND}vuvkp*gmWFsQNi8elY>3A zrs%E|W@R07F0|OvtlG{}hyYS*drmxF+wZ_^6nmQM5vwWCYV2X>DG7onUWoFq<0MP& zEjxXsvgeEZhmVb(6u35rwi=C)ty2_+^k61r^XWvQE{NtOq6!adB|bb$;_x&wQ9vDy z9+1xRi7tL*thXshfmi}5dS9y>xh#S#GYK`S@ zX4$8%r`ibFu*DS*WdvXa)dt9hfq6!h)p=i&tBb7DRdz3ds=#6W7KKV4CU6EXJ^JVy zT9567>)7~6!CQ@}sVcg%c<;D8j#je$isJVm4WN z)=nwy%G?&n2q}}4&2#uy5oB%lV#ihy5!bNdK}z~4X{CLmiwEO&ZkvPEfH zG2@{0X>MrfoZ@yc{f4FnsiCE|)WNn(GzOLzxN~x?yBgJJ_)yj$>pSYHj0bCW>ZWNL zAPaF)BCNvJLAC+5ZHWX$QEqp&g|KX6(JXG4O+ZUqsMTxhG+*2h=t}sMYK46r>1Oz> zL?B+!zPbUjTr^-MdV%}Molq7EGpKdC0NEHHo>&JrZYh)MDY6iOzT1PEYy9RI9)WW_HbV!a4<87M1>&4gGCPf zB^?u&>x3yK-7-bXrMA&D@hG}lT4$w%98{t#0&^Q|s&SqQ2El6!rZD5$92O1g$Se$x zQ9P~97u1JY0j+cfTGRPiU`A=C1g(%2B+{rC+;Io=F>N@7x7E!lFq>6Bjv(8G=a7_z zeaiR>=o(YzMcjacY^8I?m^#;qF=S$#C-Fc!s>BePt-tyodx6m|8u#qF+!bXnb zt1tnxV`aI#P=kxy*chA4jg3vZ|D)?%gQGgjIG*L?J$p%V*4>k^IoS<6o0uk9c7c$K z87>8+C9w<_K|#69U?Y|&g()dW+X05b(P1d9P6sLdAlR`=5MkOfwe57u6jTJX9qm}B zTs{=5^fI;Ms2}{`S)c#&yzlPW1b33`W;Y?Q{POJoeJ=keUOlZSX#-6x9nIyFDS|At zWUdnH=$WGcnyYWrqXnW&O_b5YDY63Ygi7e?mu2cW}4ntB_r)QwI2{sDxNNZ;;UGffil&YDq})3Q;jpq(Ivu z)c}6N5nj#Kb_uti=4Mn{c?~RwS&m&;4qNh5 z^mq4nt?xpGt83GG56Rc`XA%-=`Q*e-Hwi1&rdNr?^jb%}0&`xLh>d1u&HQ|E*Uas6 zGdy~bQ6gk3F_vE8Lv%`VVI$Y)I$|S-^B4YY?XZz^1z9H&9c3H2kl4tD=F!!{J8J>n?w9A*?st1;@t5&c@=CS~RV)FvyuHnjCk`RtH%@7M%f&dKf0#pd+gg%OCg( zorbmaM(?<%LGH`)ep`M)<2a0}L|r~>gay|k=vSfvWKu|Ntk0R2oP48BUbPa%oZ||F z+38Dpe2fEZ5-U3sV)+X7N@{?wicBc$0-TUFvBEH)swN^EtbegDOc~h{BA8+J{|JMq z9x6}~Z9s1ur?_pzq>{<2i1a6_SiN5A8gqs|d9r)({5vaN_;jn<|6{s54`c&P1Qb!N zn6Wr%W&eLb5y5}CXoD2JcC)*^jhQbmU@a>GjjCLx;;ohgEt5=KLJnlpXpL!3%PB0Km(l_rtE+r7-w9^( zbtGO5vpK!sNP1?aF$TpiiLqJjL@y>r2{A5YT$$GdzligHjR6-Mk|m!N*qmG)YKu5S z8*C#&Y{@5iknv05K*j*UYBI9+yk`%7aP1kTp4<1Ii!VQhR)ga^)Y?xzy7%CfUn)4o z{h(XjzwfP!#}6oNBWKlTw%vM6t-bn;>c4PX4eq~s<5Ew?5oS5oiX&%pdE2!N&Nw`6 z$VVBB45p&6k^7>X$*_%_4;#7dZ_e#nxoG=NF9RDnZ{?S|k(XUp>yciNcD6RN?SdHt zvR0IBUQei5>J+vqD7jLh<5S`~BCEGJ@NkY0|hDC~2<EMoIA ze5;GGNX#zP7tyhLC;?3{dQL{iS96hrlDT0#s>_5Dv3MZBa5>JFv>zvm2qliRzHgV} zr2wRKGhzpj<%OVVF1Ylwdv`1E+>ieByPuq1@cPp)K6`xlt`DEP^3pHncCp9YR_r4D z*VWxh+sK6-54|)eZ$1Cwf%C8Sy#LmzQy-kRS<52N)d;iWdIZ^Yr398nz5rQK_P!u3 zh=8}6ZR9+$k?Zd5`}U!}*~ymPzD4UjyFek=o3qXn8#xpb;v@>%%=&DKveT?q(JHA( zwT&Dj8&WIjJ2$OT8QUmX0Gl-P+Kg=f_~9jc2OjQqVEaCOdO8MVlVSr!N2`vCU)kK}4lFzh^Vw*Xja)@j!NQH=m>j!U7g&=LTx?*> zdD*}*zYJ?u4p#Jq+w#q=z8*=dyPV8V)eB zh(0bYV)ag?xW!!p@r2H1m8Z2hhot!)}ghJ5&PlB{LJi?xj$oDY?F&%j2GwX+agS>liVD`HgYc8$c1X$(7drdAx?H7XbZAS*6dyI%3*il-y2S#=9{dT z$OZCSG6;|(W~Ye75F5WwZj2#u(7>~_mCO`MUv=3kT~Njk6JK&i9R?Or`Kr^BA)T#A z;A~ZCf_^8omj-lz9v7D#+Vwd^TA(UrTK*EAGr%f24JcydMElW%NQLpOo!^%cctdjL*xglq`NI^q;} zTb;Yy17t_pM(%)u+3{yX6lGug6(OsNuRR@7Nl6&!ogn7DvXz3Qtb-_v!YRaMif%nM z^O65Pu+CfgE!Y!AN`!1U-V`qZ*_JTd$n_W-IUt*`+R|ph`ZNTxRx!hLlF=$pE=1Xk z?ZHOwfv@(ckn}9_+-}?oAj{2%u#xLU`xQ39#EdZD8e1v^8##)u$^N5gkQo|ZhW+*t zv8E4kCl}1TM(4){=qNTcw#Q9s|2UrWG9s2kYg4Wf%~N8F)s(wKg8`AlN3f~_03n;b z(}m)#P8(!d+1A#|WVqZ$*v;w_TV3S{#vP0e4UPF$gjycy>foO&Q5M%RP98vNU{XA0 z=}{J*MPy(TL~J3*d(~#1ohl;2{eN8d)D_?I5z%!l0hb zIzx=?1x9wb*xdEKcUCCS%E-DK-#DWNZo=EpYD<3q<7Sv{B-L>95NN$R7P zgxJXumJudlFp<~^$WE)d_ec4*5-2HC+QmwN_}{BwtL8CmeWCX+J26Nwg`;*y3KsXthd z@g!&?819Cs6&txwm~G^ygu}3ro81c=xkq+Jz14r)-V^rw=6n|(a|L=ON@ALbiRDO} zYtj{fkl4uec-lrT)H~EaWbT0zdc@0Z8u%V9&fWh)u!1f zQL_)NVv&$ERn$i50#Xr$fDlqrl9mdQs!%8*RaK!tqZTS5A<tUH{$jWL6J(vjD7PMhR6q}*hVf4S2oU5X${#7E+vrdAYPy?*`(r-4Zj0JY~+@biyN?! zYuMH*JzvAZBiG?ipHHh5`N%*sD>ib40=<76?DgQVaab;(x zxQ0VezLhTZa5u25e1ijLph1Kf@EgD0YqJ=X)rRBnB+%F>(o6B`^yUlgOT5Uit5L5!S0KztiVobBGCJCC&((8kVC*@~j z6@+cnYD8hhbpawUgHB#hB}>NukS&y2g;t4vpas~!iMW8?I+=`9;6O2W$q^DebVuEg z=nt#e)cK&oXtkA0B9|?Mg?u5+OJ2}w2~c-s6rttG!S-0ykmWKvy_U!asNv9y@c{r< z#00_zP;Yrc%esTIEG)81k-&2}c>}h4o*pZJ9l&eZ=bc)K$N^kkc0;Cr>~R=tX{lCh zsQXzOvQ$|Ep#%Y|Vr)G_n1Jk5Ro#ISB&2I*hc^=g1=-I${nU?MOQM&KCQCd+iY381 zMqS%yIaLC;ozdZ6k&_Guuw-KHQPr8MXlh_(z-u*Gc2=kqRPH9sv{*0zM`@8kI4W%t zahdAnK_8_K+QXvZwnO)DSGMiae~FGE8BrW@Pp~{X0lL}!HF|GN6G-Ssq)D`6l1XL{X@aYDe>eP?udbALF}->)KWj zyXhVsacCLo7pfln8g&N-&gyP+7?pU>nC4+jPwbW+jQ1FSwl7ZVPsuYSD=z z76r0ZUx~S;)Cy#06t6WgUC1G4j()?~@8;46rT~_8b+hj-?~s2hT$Eoln=4X(E!p8?{=P<9ILuY#N0(HyUNf=C87qP?7g(-K~wj znpNI01!W@_v!4^qtZH>xhGf{L^&{C2Mys_lCVR_6)cgN2i>{!Sw?<DgScQE98cyf%wFbN~f`mkg+o%TFugu5MH=x%%P zlC8T0ulj&NHwoGC^<7R&4B0x7S$sp72;5FM1zGv_!6?V$g+My5)3iX%ga`IckUjMN zQ-AnUQZEuL9Des)1CT9Vdg)vekX^X@hhIbt-RsXRG_uLV*OzWZM+;YdMGTbGHVaZ9 zLPN8v$}Flb*IrqpAtGy|-)V>$Co2v)5_g`r-s;_rBOx?j?twF)|LsmEc0B^EZMtn7 z5$2sXYO`bJOJE07X4Csltta7s)Yy0N$l`(9-(I)!?C>O-ZbT&Iq{?c@9{lcu53Llk z1=z@CwKhO(Z5>c#`xJgk75h=)qkB! z9=rD55B_*#-6qcJ3uI%;@T!8W+MH1z`*X{_@Y*V?0bom8k%bs5q~ljA#FNlTD>X`W z51j0F=c}deh4XdC4D0RrusaygeOlZ zAzWOlY(CcF5OhO-F2%gu08$pf>26hhzfdZ^O<^!=4QaH(R`7#u2 zi&^-n5HX047vy`mvZ{cP(KMaakj*9^ew`p&NwQO%arVk9$-iE^+ z@!X&9+5h1$7Eb^3x4-)PjlC5U*LoIwYtvbV>0~A_f9x&O&6fd~KvqshK&)Y{Y@FD9 zEF{F?5U`PZL^K8sLM&|LAc_$S0T2VFiQ$Vrj}nxPTv|e!RqmH224W*e47Osijhyo2 zl3g0ZU>iB;yFUF{wlcuyrT{itM-)+?R%=Z`R@=l(9=>M9a}!c7_7&h7%cZtFd6TIv z&RdZ5^yQjgX1>}NZ1Nk1FVR!f5N;K1z3^LfB+6W$qS9?3}r zU_J~-#6VTo7(>uXF76-%ww(%sZ80m4NyNA;2-nC?BqkgWcZBR009orSoZ?I0Tow*EShEx z4sDCP&dN4&HAC6R)mUSYH&!1xdg^mW;EbeHZuy*+2GTjn0A#g|T$&eoh=?x4AxpU4 z|Ko3?Rwx@eLqQhnYf58aaDp9Y+#dY-*9fw^GDydYwh_S%;{LjOrV!f`R?zCji>zV= z4An6}hZBH>*Bg2U?3k`Q17!tCg6X&r4|#`+@!B6oxb=P2>tbQ~tXRlavHs<=SQelq zO6ztc!rr^(mOgzDxMOMTO}$m-2xw6au%c)MqhJ!U6FwSKgdj1>RnqBLpa+g9)-+^I z-mq1WML^fxAHKD8_R2Hwzi>R6Z6Gu;Q_OUqduz$M^yZhp{+&<#wbJ3d3W6w;B54DXP6k$Do*H|yhXEO+7Ew+&>q${wI<6f6R1wkO2E3l0m z`(^75-+jyeL& zZdJwA%Gdr}nP~!jS#Voc3USsQ6nirw?<)4tqV3O#jXNOQX~Ghw+41N(G-TscHhMd5 zWDRV5IIwR*?9Px4LNGT1zv>ynN7=Tf2Mq+-8m3>F|1oxMF>c&d7@x`1uk6o^!|Dk&C21rrY!N199|S%w?3WMBO5(~GG{vTXNVf}T@9y>{OR^pzj&)WvH~x(sw>m&7^^ zr7YP?sIWZoQpvahs$FwDFzfoUWKBz}3Pz5kwutoH&ks0Bmpeh2qQ=N5n%QP&&zs_ zhnkhe7`a_|@Am@ARdvD0@lLoFNj47#2S~LCPn@`Lf+UMAnO0vp8&5+OjL#O}{aBT@ za+?-wbN%L8A~hi0&4TDQJ39DF7;VmqG@B~&4%Aq|Y$VrMvICKGOJd+;v*yD;ehAEd|$|7mQp$L9`d-8!Xw5BnDObtprA{+S~hh zl{>b>8b?_hh;+papl<<)$7o$K!pN~?tASwbQLmM?b0&Hr$Qp9~QW&{zjFE%iG7lem zUU~g_im^KcBZraL5k}6`cdS3}Ve64Ga-Lx1@UV}3n2ulNGVdY6N3on$p?0fkY-to? zXT~5#*ry#Ouq@d~Ya%^PXq(YGY&2vD;Wj7OTJ&s|>{>D#mM|-l6<-DlvtS|9e}E7> zpLZ3oz{NS<4QpzoJ5eu)$F-znK*z4INLd7u2rGhY4b3P?xP@fJQNb5Ftrgzlp_&cJ zQs$)}yYjt_J*n4j{_b0^ylejO@{dz5T{~I5@&1)(Z|qBb<;9aJ!!dty^Ys^QQq<*l z{MgZxCteIL8`xP{u62M#P;IY@9LzZU!cnQ&gySQtEf3(!TyZaBG&s?>~s$pIXKoIedM#xZKLFfb6Ivxm5CS%iX_=Q9qR0*dp~yPQbu9qs%8=+ z*EP9sYq^5%u+;Ej5+nER2qWi37`Z#1IpSftLMB7Y&M0dfpP9^0wsHkAlskF2x9COSEdq*Efiw0iS#yMGNKWLrm8T^PDoZ| z21(I2=lW{71~A)x2}Dld=jZ5}LTuU1CzvqUQbd$Z4!tA;B{EV>6c*b9N-Ns@K&9EZ z+I6caYblsA|ILTflU~)ZrPr_b_g5}`Ikozm%a8r(zSObre<}6Gn_s*5+newGYB5Hx zn!f+RQ;#0?)J8(cRTEcGME)2?jwE~6AzgogrY;z{jJk96 z3wM3=!fwws=vC&;t_Jt?kRWWG7xYV`Ae#)d{r+vLj#Y>ii&z@fu}HIHV3+8AE^18( zR^sqryz0MhPt#+82%3#zQbhqoJ5!T(3}Bpvhbe#d%h&6$~dYQ=_ae zJh{A;w|u!};vvJdmc{NDB&*B7lThGvSi_|7M@vQT>L%hui-0F9Kc+)nmM9#(XD~T|A?%?G>@O?V+zJ)p^EpbG41fx-!u$kluEfN zk+#y$ac_2$_S6wf3aiKylK0V_g)J{!+8VFzjwDOp#|&4wP)J|{J9?eOG&F|AVUtD% zUxS49ln#Mlkw(4sW;#c_?Nhkz~b`Q6#GXj*J^GGXcg$1T`Aq=yv8q{^3w$ ztt|}EwB{{2l5EFr+lH{{FudhKvmnQ58ZW;YY}LcN-(d)kG`6@+%cKk{TNd;09NyP< zTm{baMiZS%?Ocf1-~9MD$bW$vA;6CnZeUe z!Qmy&Lb03`3^z+QzMyR@m9XK|7(2bv#hUd=v!EnSO$q{$tRx05Pb=wcYN1|0maELk zD5~73_!>mmlL?rDybxg*}QTur#EZ^91VJ-Z#UZQ zXskfN9WaVP*R^?`dYkXG+eM6NL0_&Yj6SmEhAXzB9KX{fS*}fhr<7*%B_&zQS7gUA z5D`ysNo4`$V@7ds*TTo|MMS$}zh>aLOo;?iLsXd_w}bHtx6nUmlERt|c+U051v_#_ zP!0)D%H)7SlTE~9z2Y(}!jvQbi1U_Aa}x?JOo1D(O_3}ejKvivSK@UrZiO+I-eAp^ z^I`{Hj3qm+w@sQIqVYv3ttEx6|3|VEQ#AQO4sRvd5R#2@*)T+$@_is>Q9xHg$58>+ z5NaQt!BPfun%q^v}XN?C8<~#EUvWVjrTgzIgu##dyI1G^6Qdkv-aC1TW2Cx;i1o_2+ z7U?=hwkyuwJb}d(1U4SWXY`G_Kt5tcTyh8DFbRR4ei<;pJd~bon2}+xfHMOzEG%ym z$GDeNA&1ZYf!e+DgSBV?@MOCw2YmqA9-dxLSGn zY#q>8nMBN1%!^mM-pb48U-jIqzPhnk_mxc|m$zbrPed|TCa77mF@&DEE{O|=S#jKP z%Z5#7v#_>%X^17^;h}v)QYeVJB3TKulFG*ai(qDXw%e-jIy7UV$EEE)G?PAX;E-b? z%2G5oMX{W(@RJnWt+RgkbGGkzD}ccH$`;&PSwH+uCTil`Xm3Aq_{eV08?4h~D6}e! zoV;Q>Fmi1j&&OBD;F+G1?6$19Zuj-OH#YX@`EKv}#@U_2ta)SO)x~tnqg(H(M(KjL za*^)L%bm5``Ob8ybAz5afa1FAZ}0irne*p=aOU@WO#1o1eOABzuQTVbE*94kXD$_n zx050VP$mCc<-U9~S6Y+dSQOirN%0Ccb7%U%E^;2zhb@>w&F4k52(uXGN=Dh?RLKTB z+-=cg&Hr)uQp;ihv1;Z}suKBd+6j&86H2nm5u2iG6??N$D(ib_B|x&3IUwE*=Z?4j z(p~w^W0(K%v-;h4e*K+?ZtSsa+3$k!Tx?0}TI!?&x)1J^be0EenFXsH4&Z{MYSQp8 zL6srwoj%&5cOY)qBD6|kz`1M#eq^X`#>lOF{(*m< zBgt}9f@U$o#!TQThjG?_j{h-@68_s+XgVgt2qw8KJWK=e$VrH{wB-vP=M6YPY0^pwe%_0 z81mtcm_WlgUUYAe;i6cB7wye)`SQ?Qs@S!4M+Em?0r6X;(?Jf z6MwF%&@Ac-O|YdruBLrP)r^*+C?kQJDp~jiP|Lvoq!GwhUhebFE22r5&%`#}qC3E? zMjqKwu=jW?x`V&8s|Ish<* zFkVsKzdV9AWq6d;qgRMcsSM=m0L)AqODHuB=uL{k%uHIxj^$@x7+KN zM&CVDdP6uj(R<^agTYN7w$<hSJU}eL(;rrr?$m9wfit-WkKtyt}hibSe0p(E&G~5vRE6&;{(!gFCj-_RTj*7B3+3_vO#XyNp;!~ zABe0dy}y4&CCkvzE9S`B{zTLqo&6Cbvb=*{0qE4U7)h;w?)7Nu7fxMWLU zaxoid9Z>2jK!hC(rbEM-51EK2Tn@$!tc3{j6PqdO;F?za{ zL=K!k_TJXf&hYrhqnBe#M0R{&rnVprs)~gqD9tiAzyobDjIOdBU0@6<^@UWj>Vx0g zwff=jJH2@Nl~+=I_rB_d78NjZk_#|$l7^96uXw#U5Dp(64*=h+Fq)uebBbgUVB|y% zBZvL6Mv-CU+=${*fmz1eyV)XS4RC}QIYH%?8;f^dk%z{X9O-R{w~lpFp@!()*JP4FvUPIL z75UAv8^gV|aIrnn=r`BNL!r{rSq)!Y3s#f{sbr;DJ1_o&P{j$bVeQ1Zwqm5LdlNwkoLZAB0`UWu=C;}68Y#_ z&=}eMt0q`ed*a_uk9O9)JofR~U!N5@v>R4@rX*{j&Oq;B>jc^P7mcsEtbqnnGPJUl zxc^j3Xp@Ajx*TX?=nX9RuBzH3^Hk9q;D9RS48Rd6RJI}G^ok8>e|YNa zsFoSMtPLeAa>@1(!X!)Y`|TGx2&P{M>_QS(-E-TBjYiqQgI%MYgfu+eNJtWYoKfYZ zl68P&8Lg5x3i9IwzKKI`tE{9MrA664|0{-(tMYqjVg-`*!!tG?GK`$WF>)@dSU(Je zdA((RAint_$igXvYNS3qgUN-G%?UA#+)@MY?^Y3_U}p2%3?nCK7&*WsJ1jQV76Z#{ z9BjCD@jV;iRLd5A1dKt$>nk1f-$0iGv*2uptp&R-A; zD~i6UTr(t_nSrHg7LP9&E0p*40yeoE!z=_^kgbY`UsDNNOtP@PGEJSDj*Yh~_D%=5 zp*y8t8Bumx$%py8-W3WP>*t zWr1U8^FF-F<$Pkjf%VIJd>~n`-_N3~3ovr~z#9MzF53meNAR%HM63i%Ef%~WjdL@} z0{Ji{S*H##a`)Z0IvC;|Tqs!wE8_7^E}?Mw%3xs2vRs`*u%lyO3qjGoIygoSA5@+q zVB`c{2o7wGYEBMDS**vxD+wrB@EpM2Lec8YVtDXuG(mH&4zQ-RGJ4qv^|DHPtjbt( z{rY=V7ASHJf|nfvFB_&_R-|6mW2cfO6@lnzD~+{Gva=gLdOH|0y4*DVB1UksMc+cQ zX{Fn=9)qa|3we3C>4s`HkG>)5JIjZfg&0fy6_h1)s>Nd!bu%3%pyoo%;~I>&DVCRR zXVR?p6&}WwJ4*J*Q<`M^ItT${024I9I{JUR_7B^MYH}Z+Xly_$zS7nv#nn$DTK1p)1A{RP?`HxG| z{`a$`vg$%F^{zDY0w9Oq@Ap_?W|^j6Hlx8!eF3TdA(gC#k#i$P&dD%x5J2(Vg7Go% za4Q`nx1fP)&1kRtZFP>>;lOmuZVx{T$V0%$DMpcFrE9)gSGMAU`>1=rz_DB8IDy!#o&0NX=l8Z_{^ePEHwE`gW>U5 zV>r$(wkMjPoKS9}l2wYGyU#cJX*31NI%kWUPPY2Tt_ErPH5U&BzEzZ+#u=nNvQfV@ z52K34TLUMQ{p^heo} z#4&O-`+~Cs=yxvz$->z!97upAB7l*5|Er~Uag3Z;dG}*G5F@u{&Au#}ctH_^oe;Cu zN9qqWjNI~j9$E&&1%Qz=D;y&yAV$ug#K>)a=>8`K4I?Kuf3nhHbfjVAmTk2A7jORL z{%1DYZF)-~BXarlzCiOoWjWCyM!M*&|5T7n$_Y8vNNWDi+0_6?ahBm*_P)KnBxKp$ z+idP~M@V*#9LZq`A#Erz*k*G8C{wX>DdIrcoJY ztPRC>XyXqV87-sJ3Ct8LhLJK=hk~t+RYrGxf4;rDg!~Y8NG^BFPmX=^?(==`^FGgi zZa#T)rBCD`)6fCL;N}TCjVBK^r`OO)x8wSg=WhXkDps)y+o)Mhh_9s9r?_*8eL}17U zlWV&Ivh&tP8zOO)RqQpr%~yvydb{7gHaK`~xO+`+x46>VyzKhv!NJof&|_|RkLbAc zj-~_Plx2N`=j<4o7N`_d#gL`wy0H62>IN6JF@}LtRwR!h8Mw;L1XES1@R@=Cq0VP_ ztiInda2fWflX1{SuDs>rY$KOy>D-aZr*dQ?=bPwgW-??cGujavXk&GCc{IzI1(w5X78aJ2c@Cgoj zZeo!&0jjh=>(SOMDQL*CjQbzSKuNN19Od6?7@?HJTY_bf=1`ShOc-VAqFB&j@u8vz z777Va%gD?Xo@r=eq-nELT4{!@Vk3qy|1~43c%BJO*A&in^IINq~^3MsY!`ab_Yd+Tyl%WoTX#kf!7RPI=Z7ef21M8mp{HMv|2GD}B#( z9!4Z_EZK8~-4&c%nol*Bo5q%l(>&;;pa-FMqE(Dlb@h@Xj9Do8>wUpaSQ<%+Pz_`Y8no)v(lnwNBXMFtJ!H8< zOtb)gqY;pt*rIr4gfFYgT*FmDonb`huv(psIuX7kV5TMwPJ+gH?miwKm_crE_p5Tu zm?B0S7a=rqAj^=2MObzQZO+!g z+pCQDMnS(a31r9F%*xAGv^?A#r-E$2qUX_7HlGK`VyZUpuk$5|zzq*;0L4H$zYtXy z#SLSaT}7k~S0`FPtxasxSInRgP;7xQQ&ln4)*_`GTz|OHv2Or{B$Gg&AZwao9d<0n zEI<}b_u!;MCY`_&NG*%l1@K~2OjAv$qy@;DxDxX`j!!jA1S;_X8r&6Wh1r1~!%c-?W7;2}Dcj#PZaH(f-ot2O^j7h3& zFyRS;EUdi>^9sT39OOBOx&=+#wJ;rtNGDa=JZD}&G(neo=L%GOYwf%Dh)VJB`8`6W z+{&a{S!ba@U{6*&f1z6}J$CWJHetD~*ER_1l~UMI2EAZ$(9kg%v!>~&ycn|_oI;N_wL9MVhNM=H7J~`K{ha3zFKAiqvf+`fEeiM1)p3j5Q(9U99ns&IY?B- zI!lj6cryyTH-&8EfV85GoGbgauD|rD?GI2%#gF-9Bd2JkHgbz#Nr3x2zP;?*4}NKp zZ5WDn_lI}c%a(87{*ec4>JSlRY0g%~maLip`dS1mKT5QYA_joj>Oy@b$c|HDs|rIi zcM92_s;LkB=K-@>xkC%@qfV_P$X3SLA0sgQe0~yS7HaCPWHzR8(;*g)j7^DHpWAIv zMxn~4Ir0;*rL&@ot*>2vB3$}HQ^b#6J0QsC0AG{_pEkRAR#f00(V@`VU;V=q4IS_H z559h+yS4Al?;q_uA=qaC$2C#aPQ$Tgq0SmPSbv!gmerio+t{pAOJ~3K~z4CJu7J=N0VfM+xF1jS5_#LYiP;K@tNXv+y&G0W_Q&uXuH~Rjvn|H8q2xRCbHR?wdHk{OlRZqa1dh>Vo=%uoA?NB^U(bu zgKNHsWe{Y=t4I3=hXASrM+dIshF0I;(RpH^clWugy^Do_*S3kSz87x%Yw(oV+CQ@U z>=L20T^&5TSj@e8B0cx&kVp?)A3WQwR#%G`Up^on`txS-;>A9=BjprbyXy4t7=he;82-m zt2e*M48|Kv(5Hs1f18Mf8XIIX2w6QK$mZUA|1Ur2hZ=hF{qvXK*xYgK;^B*1#L2(! zf9Z{VTg1Z$U*6xpq3hb=zkTEKPsP@Kj~%|Tv!U%5`;MQv(2X84%l^AltlfY7@V^h} z)eT)gKhi9o|Lq2`_RJyC{=@I}pAs>Pl!j`ij1=xrA!j=bS=3gsjaI8AuiS?= zayhh-o11EpHgeCQjojxNfzNuh(Pi>{7}0_x$OA=UwEO6lZSxxo84ivPJ1ColiF-TV>WRc6VEJjzBZv6Cij1k}a)Yr>U z7h_r6{$j`ZFvGr%lQftTNW6~5El((xmmoGuzJ|9lgQ`1#Y){e5pqLRdIb;d5)KbVM zpvqJIOQ*!+ ze_Xl#H~;+Q=EsjTUpms<_3k@qAO@%4F1z){q2%Llb#FSeMcjRGbK9kzqU%@B5MB7| z617^}bnt5;y}rNivEJ9Ww7xKWdHCAT1ja_8X+as(S-grUWx>0-iR#ssg_)Xrzmr>Z z-zS`=N3#ao$a&PT^>UAV7QP@Gxwh|qw7CY!EV5azUT!6zV=qtEI7V{8T>#nDY$F#& z)dAjZX*%kd2%YaMpsN5oFWJq$R-~;crtuG(Kumwwnl@<-p|O`A&78i^`+nb<%g!!HorvsQ+}RzUdFT1w_j#Yk z%_kB?>?J}VYqE`;V`S5Vu#pQy$|bTG0`pVL39>7~5)~rDaGS^kkVSu%G27K80|iU9W(Bbm zKvsu>hSKk*^A{vu(dzX=)|Fga^lSpxmMZ%fj;Uia&K!o?_Jbe)e9Lote{f{WbDy0( zK011IjBX+{n)a^uAGXiGvikh{XGZ^gc#nqc=_?nHEwxh}J&=6a1lb?Ic;UF+zv}PX zmPDek4+#fPgxPlbmXlRZh>$>z_Kx=TtDY$Gbf{mPMX3ZVYAi6Oh*XK~Qc!dKIL_HKn1*MheYkHmtFUYe>3V^<}#Y>_^`~Vs`!2j{TSN>VweP#|tUY~j zbeSDRHq=nXg^7yCaUAU&$w8-lI*RqyY~=coi^iT@c|Si0$X3}#u2b2_5oAR#TP!Nf zf+1K*POq`7Ds1GU^-3<=?9n!IAg7`&h|6w*Brh>BP&RS~7Rz(dXpSM9Lv|u)0r-Fu zU$giKZ6jCp1+u=M;VSD7?mqPRx)Q6qN~K<3Mr7^0ngA}_mxOed$t;}(w2hoSQmeAc zMh@*+J-TC~S$1B`a+Ni=Ka@7N)A7q(bYKqpVgy;7*Ln}UM5u+0oa1n>b`3%HX10;5 zI{tx|(m|GwU+G29JpJ_6f5P?%M3*5ed(;_C51=;4Wa4cD9idrw*pn?c`F7Vblq20O zA$tQu1S!NUGAOV!t>CdX_o{oY2FNPh5@u&$hp~-kVDz@9x1_=0Q9-OFHE7elK`|3Y__qVghZ3Wo}&wl@tcix*XkUcT~=qvBO`RjLQ+BaYL zaC9k0E}#Es?S{)Ij(zgRPkWAzJ$&+o4 zFZWPoQD5obMaC-u7HGcdP#bLIl42v5WE;7>KRmo?-S7gRZRAR&JLcXsa{rGylX=kA zWRjy*G5w;$7tsR#eqM0_(bxquhaX>;+6^uX8@Z`DWg|z-lu_!%c>_!#R&3;mt8QF; z`%|Xj?6_rK&drI9TrRibhuibO#p7+{(r#94rvZy3si>DrY3=w)7D&)Cgli3G=w}GfgHa|zZtuH@Wc5;LQfE6O?&_0 zEBm(DZ(rQ|@{yAlSFd>e+`)Zk=us!nUD;!w-uI}zYu{RX%})+uT(IWyrN3U@X+LuK z;3fJ75FQhAvp>6xZ%_d`JTcBoxnKnC7;d$5{1KrQ{v*mpu3BXqxfw|>w2}MPJ?lEF z!<+ul*&AS8@ymA&Kwr?F_xm6^Y?q#aPz6GNRoTepM%YGZ%$fcb%-?(KXIKYnE39==zk#hvHOP+^u+*i|Uwmw#GBj+stB_Jy{a&a@A zUcPm6dV{#hLDpz#o0Wku01V?!_ybs7yjV33vUQ$Dx+mM+3bHjRR)2ruh7Mrjd)NTk z@Jh4)QOFHCSwPE>9l&(oixGTMo>9*X#tCEjmS{x>(pETUyVA6HP^k)I2quSYRztS# z_!ZbL#sdMytW{Qa*>i@5)I6conz%|xIq5&8IAPban77vw7EQ9w{10ObW89$%*@K=WQT)n>ETPh9qc>ycASQ66? z8jGaLJZG-MQLdQxRNQ*iGhrr|(@L(K>+#Q;bDS&-%i}CAV~JVHHB1?fIfK38v*myf zqO*hoxxh`&HWlWe; zsAP#LYj%Gk&(ag#5XAN(tTl?<-4e}KfQSPEou{lfu;K0d!tdlSpD#$G^w8L1qyn;e z1zq%KeG3`autmai!696JU>I%dtXW5QxauIw+1LCCr@~SfQPMDkbAnt)K^EUc?SY9y ziOXSibX?A6*+4F4@De^pEYcYoR%2FZ4AcNwlv(!Q>Jlnju2&aG6QK~PJAi3y6}rCw zGAqt8iAE%LN9r%IpY5KY%$8?xnN`cS^y?91jev@6(2Uu}WpTCt#n5EP)+4hbV6CF# z6`hB0GZ*A8Jq+KaC!yuqTV$q(0q$wt;Zz?91^)i8Ja#Vc#RFy0& zezG8n$=Ut=MGaYWKnb193oLFL@Q1m_(UF||86W_>IFLs!+O%o;;lKj*umkl@7JI+zsL4vGOOoAAA!mcZdca>_s!C7|fv@)3xvK<2*Z3A(TSy|@5ehTv8nkQggQzA_r z1C-f9_ZLxR`x_yvMTU{uL_wahp{G{pl=}*RZ0C#)v}Wn!3hUuiVGRh`u5sp9b{qs* zWPLgHRkp%-jRLW#!jqlEFiw->mkY?^GjuviladBZ#AOP}{M;}Cm+55Qy2G-EDRX0}RVUO=yOKpcbU0bf-K%=GKV*_)O72H>*n zU;%AO7h7|}33(i1i8Hi>Y=n{8V)~W%+*}rjjMTxl$sak+y5TW)G7dMNI!r>*ajkW?vs)1ASz~WMyq(}0Hd5S~N z@|Ldz-4=q=5qXMDu4%IqvxgTT(l76iEc5*kvob?}yTeY&&g5MrH`@S3Z_M$XipowdFJSK3UbZJ-SfESTMPsZm1n z_=_r8E66sU>;I1~7yd&fH;lC0M(Ae9Hi1^x*-lMoS&9+1zb(5t+#0< zX8{Qz*J^g5(M9!zARE>E&E9hE(!sH9bOOtkU>mcGuI`*w8C~-FnN_#hMp`GjqzJMp zE@*7ZX?Ys5i2KF_pV=@TsUeFE01HW7=tpI|VzD+9fEtS-3t%Stzq0$@UaZd!Zn}3c zk;3f2ERtQoxMH`$ zAkGmT7s(DpB-_gC?o_3#Cn8z54U$!EsLh(=k#2^*&5Et#en)}zDmpt~3UN40X%-~w zg_^1hT)O$bN3Q?XupAGVjfpE?8#!?8h5XN7{PT-n|B+#}agr9b))dq$CN(7sHe;1( zF9kldG(ifnT2o50bj)%yfyApM>mzgsSR5Axa>dCprp5Sf{@!tVpCNaE!U6u}Qn_{c zQOWx1_xK+Ni4%(g(o&kcUxJZSUWca@_yOirC2P^qco3}w!N}=KvUytIDj~B7&6@mhEhzImNctDmFThKoV3N zx|)*g;_k|5*K9LioH?w|AWp&^U^x!Ha*`}GD^vA$$XzhHE`)PPmOZOkmh5mt$p(la z%q!VpHT&gR#)fa6!Cnt~8~fKAUZTsm_>HHyhqdwgSB%wv|K*KWml-KdN;oAuMEDdK z3&r6^ONqy8(cVHRB;^RuwaPrUQ=v!}n$0EJ8LWjr*@BUa#~CB%o>LgPbMHTLG~3*?f<6fMLSphFqVvHQN)o$D}t;>{6svJJt`uVl{ zr%j}~CT6CSAs@3mOlR}jFC=1I?jtC{Mv2{XNfxB6xfCk|?}d~Mcwh6p;qH34!9X8Y zFAjiv#Go!5vqCT7#x04dZFaQjD!OZRp@{GqAGp7YfBOXVfRW|ki4knEUXgi!sOcp1cK_cQgWjfQ5gPbh-YSk*B;UVe*w!WUV|QUpQ?p$= zu;y^0SnC-NShDd(Yi0rgwZ?;R{*;X7Vm)?EJuw;DEDoLe_2mJW#3R8T_GH1&nXVA{`SEP_wxx~w-EK4>PBgrQE z`}=cz0i&mTernfwg^|NCnvY}*{5p)>Qe4ckc7HA+SvqgI2H`q!WDLCRE5_5?D|y+p z!pIr%LEORU+ged9T#c@hT#S(eR}yTms$}CPkA+t;a!E|zkSMwKMaQ%ylAU<`UY6{k z9S@y)8Ilb`uFTqU`2uSM<${)oWa*F{66Hn|+gTXujK;WHJ32b*ovhsY7l4kdG7o#3 z(rkmU0TYwy%fs5x&KPMH>&#qco8gqjii4o7QMDktf>GRTya9iU+qv^M6DpF8lVly^ z-+wss`kTwsRy@1+*4xXyv7f!29KBo*y)&yDwO0qoSo$W)|H6s|g{LUvwGRVVH5}hpH1lwF0NV-O2m8Y;8_kI(kZ*=G)vYFQY=~g)3qeFh@AmfxT>e@P|twWI;)CB zE;TAyg)6?>7%YfiAc~#rU4UY7)=oySUBDv_aQM8lCsuX_F>cH0KWUV7hn|QQS1GYNk2TAJ)#dSD zfp;UwP0xFWYoS&O$pTjOFnldnV|`nSR{e=Yw%A?F`o+gSn9qNPBzt5eZ)Yl!mGGep zjNHC_86yWN`+g#aX+#MLSw19(UIAqbXWyz9Ng_m{o zO4|#Pl`0BJcH_(`xC1@OK|{vK(Myo~VwR@DhY!tcxwB<@BYW9XkZfoH%w_Y?i5sII z?;>`yLrcmNtB`C*tz^j*(7Rg6l3WS{(JpFra|c%d7B)n)fb+GcpwK;8AjNmkQ=rh% zgVbyb`yHD#3(&0ZlVzhb59hqs?Ges}$QV>iFsI&tfd zBl)ksu{`dWd#`+H`NeB57!JzkSe`XZk3!@Khv@__(TPjXM>D7bD{!T81OtQikPK*B z9^Jg5Yb#6uP@wiBVX;iHn@-hS6(i>tPZV+-H0+nDgp4Z~xg0QZ#S_xU&2kU7pR~$1 zb8bPv69=SJlI#@8btijSBoGxwPGt$=hzip~+lHsL;mFsle}(Q~pB|;NlO($FwNbQb zNyA*9efAU?gNgkg)-(46_dlH-JGg!{1C!vStmM{bWtS}^8{EI=^o}hjQ}Dbnx;9I; z%Yl^zNC~i~SdC;+Z}&K*vHoNz93n(mbT8y)|lC5ggZCTs6M=fD_TviTrDN- zzy)lm2TAYh4UBGIP-~zuePs4?mS@1(AT-=G6K`@pL9-Ji*_^-h!0T^4f8!$?zVrLb zzxd%{<6B=ojM{Aa;+e~5e!D!)jRORp$ZV02g!0B7nuYf zAHoV_E0_|D+_1vP>8sW~xvz|oTPBhedhr^FoBWV^cpaUd$&v{gEcdc!|3v-=fW%&Tq5uo>vBc1EkhOl z3fq8)okazywf3z8CoHzkR{d;rBb^d!Q(c8-Z2>oJal%d(>Jl<&XmsF<9E$ZQbWBV% zOJWTJEftxpY3yoM4l!ta49{08DDPj0*^q28cl!cJap_ASlo{McK%fglv?E5C!ga%B znbHwUl9eqYmby37W0C{0=y;Xn6SEsIEl^j;)FNMvxI&1u0H_<7<|Y@4IxGF!yzA)H z(Si?*+5`0A0ak32?w)q+sN9bL-l*ufP&a>|TZU41+Vhu^rQN$&F&<7&r%vTrvra zTwtzdj9gN)ldE^rU*>kN-J^I2Dk#LZ86#g^O0p3%TU+NUG>~j7{3C)Y*uODQU*;;G zwarMjyGhAP#-NqAjTZ`&bzmigc`*nUTcVEH7;>BlR|R&e60n$c-dk<|Xm&!eUa;~( zvvc_si;Ii9bt7*W3CAcIX=5;d`x&p4BFD%4INM>~4=EEK7H?PtjRl5^s3MYeBu7J^ zxr8#kY;@D43ku1ipCEZd)P67p)80J;H~!&h!NV8N^ipZIE7Vfu_OITBcS;!6327 z;|Qe^3I-+qjiZVp9$N?yatbuH-!@fN9SGu~?{?|h9083Uh zJ5-Tuv|_;Zt$N8~xV8g_UEe@!y=3`0&-K}+3~jTLZ7nZQAjLwmlTpcHL31apffTwH zEm?%Hx2*+jDa(#56Q6ZHMnVP)K4s-INt8jeeUdENBE?*etYu8vu?Wp7yc%;YS+Xzy zBv$Blm<@sQ1*TA2IcdUC9G*n5%2X?4O<1zBs}?jO#>DVYOd^Zy7R)IVVY1AX$Jr|x z#J)a1`qrLpZ$~r1;Rsmbf23W1Y!mkt_r<>Rg(N=zh+{diV<$GT9UMj)!qO#mw6;ou zEQl&i%eF$9(v$&PP{;&gfR;pA7O86o%|yhI5DiJ2jgW~X3t zs?Zk7A4pV_cHVpM`#s0b4+fnGKkjqyKHv8~@AELQ17sC6^x&2={Kf{^Cz-)9 z%%bjvCQ7K`8R4c%Is}Og6UWSg%mp(DacV{`3iE_6>%rsdF4`3v2pUsoj+jaV#vDvz zV72F&v?xnqR-*uHu4eN#op>jpYh!-h4D7L&;MQ6(d*VXMZw zRXD3i(#;@i^aI*;E?#`_OEG@p;iynYOdzQ&e3h!mIC~ibF6rBJnvGnltmqwfyF;;S zLQE7r*;6=~g)8dfjQAh|CO4p9YnbQ87_5OMXA>4g2~I_GT)fS*M%J0V5B26`d9-LU zW(|~vjncg*QP>4hHZ6lN%jyZH6q5rR!O;2~rL1w-;<0%QbS{AHxFM~=9VW3|(T>Ex z2Y^+@a6SZCjH47`sah2`vI*CwOV4_-N?cm`Sc2A1K_4Z;i1dvR8=x5f@lgqs9*E$^!xn?S4R5g4@b zWYo0Y2wBZZj+lW)3~+9x%-v?OcFpYMSc`%Tr@XsRukcyU%u5kZD7cUkX0@6ZL+ryL ztMv>fxfGfo5@pRE$){n~442CwKvpk`PTvA$+B9^lb$ez(){qtuEm2&8MWdY2nmIA> z;4pCvvv3Ngnjum!%f5%d zgH@3<8#xt|awLP)kpvOJia&H1LMzY%8`;PKJkdrDoeOZHxI{K`#0(JM(u|GV3u{V* zxQ!etn=abbKdygf3o-RWIYHQ3qBjKJAG$g@4$gR{on zg;j(7-3ZwXINC;!Aq@|cIo_loQyjghg(owBpE(VyEn?J5XFo88BDrgOBjZ#Q8??)3YIFK<5-H4h+JcOhySk zyPPNA3RQo6U99}F_pi6cY{nuPrPj=cAUm7c$XQ}!Bc~?W$hk|_mFH$Jf5xDetb6Wh z72_*>fEja~V7re_h-|VXbtX`h zO@u5>(OR52OJ0DOol6epmi#>n7|dz}Hm$n<-Ov(G)q~d7GxjAp!G3_O*(25`Le@QU zVWjmyyQ`wF^+L#(hA$QxGF03qW!gqsTlbZ_4aPSv*A!$?IioOYs5&wDDQp%$>1#bB znW|2}-UB+Js&C&HQ_U4O%0=hMh2k(k)~+P4!M<^rl~slCn#w4FBc4Lz?TXos9Y(M~JEO0Rc8%_={NP$o*TGsgk*3+X2#=w-<#+>Cb&ET%96r6fSlsc> z=+vcK%@fxehflv7+Cc_%lDOgX!&AMJ#YWQC;PfSN@4srCZSUQitP#V&9u$ie)h)S} z+#uP=p~i5ojhy}U?>-+?xBWU)f;MtnjhJxYkd0xG)uW3&oPC6%?E8_-%Bl_%Rst*723Nl7a;dE3-aZuJkscpD-$*7W3?EW>QX;NI}NqLv|Ks18Z-N zsoumna*Vw%m8^u4Ls~*@se7@n%{<;r7bNyk@P${4L<)@4N+ODz4 zzQEqk?w@{5+;U}1jC_2tS@Z@b&iCzU62*F;0TXXFiW~lRy*OBI6-rND4~QSWx4(a~ z^I~n=_}!knlf|-J6s8iGk44!hvh%r(T+XgMMhtkt)*amTqm%+>BZs1{Yz(ppRks2J z0ajja4=Ee$dJ7N(QgW%>Mvg(&VMH6b-~BzH8J6MV%kP&|)*(!gb!j$o46;V<$pvB7 z$Px%-BPT^({J|zP;}U{oBgg)(1X)Q6u7CFDo0bWx!v+DFx)P{{NtA#=*3O*0^H}>A z{L4%%)oMA}g^58{GG-HqK{A=OZSFV{^m?iWy`}xTQky<)!`IHD#T?OTFh<31Hb(#6}u|tQ`FDZ*{oTh;xkd2&F`hB#Kqp8cwBrWgFAPWq4&FVkCic@M(VgTD6 zii~*z)6B@pcz*&*&ZYop(N1ti5M#*5c*yF@kT8-9b5e=rgoI{WvvEsHbAdOr;^?JI zdjO^kvgRbnW(DiJYl4|&o!!Oa#;<=HCddZvcMS~=_Ft~q-1YB$Pf7sUihT-?PhCVC@YvI2$)uhMY*g;YQ$9!>i-Z7u^`*r@8 zvFnd*;ylB4E_XiSkc-c8jFU44ToNa-(M&N4Bns-NAZnzd!D#-N5GsO+PJjYyJH)1@ z5sH8st**TPwK%|u{Q|1{MZgwL4PI>* zhy5Qr2CBN^R9FRMGkThfuF2V{rGNWH?TbV{gjx|nHdI!|kc||{$h82np&E*~5Qdpl zJAmY81ld{%*{51kE|Uv0Y*|JwMk~3`rtC3NVIIgfyN&@dy7Q3b>X*POWaN;~vKK$U zNYhwGj#LtS>=O5AqvH;ne?a5$n&w;FeGefpMQNQ_>-m$UX(e~y~ zUOU*mv8E#r*=mMtf4FJZ?eU?pv9XEv4c*sTjt^uBvNwb;@zL9ZU8++Nw!|f`s33UF zm=T?d*=YuVW15mZO?6g>OaxC(A$cDpKqX`i#bagF-2G2sG20|$JO6S7B3m>m{F{4W zwRz5*Qcc}3^wG=Xw^qSPh3YXuHVS>&-`(AjI`k@qlQCFV-Bj20^{Z(;_02hd^FJZ( zAx_H4ptToOg)}hh)Uk|Q3KVY$!VqMUN0=%jXH$aOVUZc~Wx1)B*pG(EkX`;%OKgp_ zvN2z5>1rzDf~F}Ic!|qp5`roGvPAeLLNF12S-HI+&AQ5msl7+h3Pv(=*zBhTWTlLp zzYZF60?BBkX+|f`vM0X>jkz$5`=G3(DO)wjp*4*nGmB2!l6>ZX6gwwDb~@F}qDJn@ zX);}vYESRRx`n$=zNt13GGx^xW;DN=P3KDj1ldID!a%!vrh8*Z>}*I^U}?8h4WqJl zjUS11)OW%$V1BuTY_Lrn)>5sN$BwA#o`Ec8Vu(9L%?;n^1>LXi-@C(@MHHfPpl_<3 zn`Pu0oDhF_$gl{sag|Bd2wejGTb#a{_<5 zwPGz~j?=cIi@cFL}H}w4dTF=2Pse}l>&c-C=Kti_KKHh!h{L5En z?zy?@KjT-ki^op49{a~`Roiyy)oefsx1K!EpeYs6kYPvj!G2NNApJ<0LrTNCZZx(+jpQQHGAhGpdZ7Rkt2mP(NI%E(!kl#%nZ zjGX4m$Vteuj9j?+mp^@S(@U<#Tv(2=lhk*aF_`Oa5ou;+@m8X?v1$@4=FyP#v?#d0 z%n7y)cQrJXFS|Z8F+7p2EbAN|xw#}6TzO$+;Ej}gQ{C~2_NM9}3JnuG?2f9o;gNyM zYU_oAL!Z47e(w6g-qCEb)H;51RUK<90kYRm*EdyH<-Qmjx^bnUb9m^pFDKelJ;*NX zj)iZ({-zp<|6JDsIf$u{jj-@r0COqTSZu*; zl8al{w}mPTlt<1eQQ~sRp*5QgPx5CzPUntR1Jhx^qkd zvvto{Fk5pa=kj%SIb*VdgReq+cpkDSD!6Hbs>YcQcV#C#wNr&S+`ss@5A04>Dtb&) zYnm!670q(u9UWDEJmqV&MqIoj7#1hy2t<}^mM@M+OEVhl@f1l^wH@nM8)eBj(OB-I zx0geP#}Ti=WHqDQZ;9*d4{O3ZhzU&j#kYkl2}H>Z$2VhA<<>Qz5AhEs@n1Z-EeC)t zI0hlg7=+}P>r%9N%dER}8m2WWE`wQHS!Qy*R_7~>SA?2s6+9arku@SC=t^yzH3Ueh z5p7f?aD!9IZhoWFz#Ocv&R=`Kmp0x^b^ z=WI9^6o+Xv;g3i%*eBJ3-La@N#8<2b(?iyi>MH#Xn4LzKC?AE1ZC2}-XKM>?ZU;69 zz+fx1%XU<9?KQz@@K9I14F%6A zjoMZs;*u6(C$DH3vjv=o$siXY7DhJ8Zw`?km=C`gvanop%M=8Qt7ZkubDtc}T9Fd8)kIl_3{6UgF{8MofUhP$@YitC z)3<;XLzdlwP+>watT*RnMX;c$4lZWKp_LPH3a#f%tkW?rQxWjg@h=t)o>X9d) zJ_Hh26u8Cpr{Zm7t`aqbYhXi`#xcc;<+EZj;YLN_%ZP6f{gOJe72@7Abqu4V)tv=l z{Ze~Wmo-}1wMckX<;*Zi`eF~l)sOIT)1ur7VHDzl8{(q*j6xfyB8v%AJcE+?-o}La zUdVozenOCFn;@X&VRp?D*QUwaZ8Kdfct;|Pnd9ZwH2kih(nxxTk%YWGkX0)uZUGqI z0;xf8Pm-X{HU<;HUhH+RVF0t53omKFFwK|J^FMWrzt$vx2}b)-1%Q$R)w#W`!FjIOuaSv zAq+6iR)DWMn5PU`UFM6?-U>SltL3LDJ0MRhq}Iv!6i{8Xa5ju?a!pIk?BqOGqf<%7 zBk?$oWQ4_ndk~+?BZ@F`+%zM`<7-NNVtF$CkFQynS-$>-a)Dyp6b1%)C?PVzW|?qs zxY%m@lY7@bYtpotwMX*;x?1iT$jC8bEtO>CG_4sja>6fwjGSgk$olKV&IQOk&`wAE zw)QARUo1@GwX#Yf0+Trdg6#Yv4Y@}~U(5^)il2m3hzU=m0V)Y3Dq^@$5L)X9S32lFo4eMz z)kCXRIfR|-a2#qbL#LG=cK+Ht5T;x~dlYwI$5hU)=jpMb6Q*-lWp=DO=eZwN-F8d% z`Fy_5^CSUk^GEK;lLRHNe7>Kb@6U~b3@)pYrW#rObN33fr)*eEOU8FKXO|PRdf(|M zw?_)K*=eXaJ_qlz9SNi?2j{aPk&uOh+#>C|;gYZ#MzsaOc{;$N&FC~}W84DOmnBa& z#0i$gRZ&I`VyYc?@eOri)M=>>BU1M$MoVJxr=Od=O}jt7JjhD#)lXF3D`aTmJvJ7FA%h|g!vAd^4;P-L+$;o7C?l5_EhC4> zMr7m=S9i-%&a4J{OkES`mZ*!vd$L%9-;skOVLGlOPHvx0mK2YCop}5e=CfqV zMkja$W)3JtVCJjp3^wQDB@2u;RYneP8F0L2;7|fpd&5c8*bT5cXov=7KOhP&z?BOMvh*PLlvHFxk0F3&=J<_vfx7S#}e~ruJm&O_dBLx#5)V4fx=W z_5lA;!lrv)XAKKao3)8qxdaczIJ6ctuV!jCAPY+|1R|Sfm9Fpo>(?G)UUo~%?(s^0 z-`TTwZ~nfrq-$*N8J?FtQqa9wgFpK{>1jto|;?-AxnE42w9P>X|H6D zMtkm_6s3yM;Lx!F<{gH2zgr8xx#vm&qogf7XJud8*r33Q`g(@CrXm|ww3L-?;j*`& z23r>RBO-mB0IA;P{zH^^2`P zJIH)Lx%Amc^_^}0`=fWpJ}F>uyn6uIbU-$Y&H)8llq$e^8%c_&9H7XJJdC5t5Q1C# z>UT&+&Zx-9y|8D=5{)enW#lpz#K_3a%AnzdB%_9QBWPxGSJq*K&@k0*Mj1J0yeuPU z6*#i5!7IPJhpU~V+_nYXgb)T}=+6?e5g9q`i9xR>f-Ht#V)5YyNg^3J+MuvunPO#m zTa4fq@#0QFtXSJ|SVh*LNmP;5$gNxvWF0dio2`GgnU$}lDVp)qrA~!P~Y6iaW<|bc3hp?Y?~N)UN^+M}K{~ z^9X}qJ$ds|S#f9kq5Hv;&ZhQ};XkxawX!h@1!_SEyQ5v&_%KJ7jI8`8j|&sB?o4tF zB=0|NG1h;gQtdIQVMRC99)nC@cY7K0p8w@9{gV^Fnh_=p(q*^rEElI+J)zQ7zUHS72iWanh- zpPe#@ED7cJQ#adkD_fq`4}gl2^*DT9;IOU-XQ8C)L!r2{IoB!__a0$Dos=W4CuF+@ zS^m|N%sYARTw5!X;6dv=C$@QQY1}O2w{2nqxD63x(>SvIPph_o5v`vXd=%Wr9-nRAZ|$w1cz*OJVycJFC5V831fZ? z4J{tZ=tAg{jHz~`+~t%Aj)Ay;(f@w-*6UW3kxS1=C1f*Z^X9{J8+fIPjNDs)DKHYT zv^-W#%;RoYjXe#JjYnj)vL+WH8%lI@8M#6$A&W^a%-2yAKu5U}|DkGi5ko z4lW6QhRAkG?4_w?uoT(KrkMbkj1;}MX}nO(5AN#^)?!^9`(a%<^XhMYz?|L9Qn{&` zkewJ{kFE}Qn}Tqz*DwM2cIy4z%`Q{*(|r=W+Krg9>Bw##J~MV~^v;LyF7SmwWUsi~ ziPDa%Lx8NasW}&X*|O?8W5*_1u3V=!a6mRrP9V%kt+K*Kb_^_X-7AbE=ZbR~qP#3v zSwfbH#TO1dIeK)&AKiTTDfP=T?3Z10VzV_#^<{Nhjfgc+c@dc#g5L`-03ZNKL_t&+D^~pJTMbDe zwP4FFEN!PT%z$jd^U29yW@Vp+Y!tNQ)|RWo3N9Jh#!73V#WxJL5}-quLy=Xn8HR{gXJ4Dmi2W?-ivE3h?U4D1UV8_kCtJ*&kseoB1_@c6xYGV;uqX9Dp#;`megKKQP%Ojm! zw{q8itWG81Jd9h%`X6rcpTCrArBqdzww8zZUPrL7yrw{UF<~CohxxW5SuPCCTxzOD z-be&~L7eBMH>^uvdR;3|B^co-=SuT{>;gN<$k}ZBAt1~7;j9dZxROxU2#8HkZ)j>~ z&z@~SWlyWLn9In4FS}^DWC(5jt;?FXRG|JX>^el;!yf#)xWzb8%3szYiL#8G#AW0} z47bqMdVjnVqOYRW4WiqlBt+O&<)NZS}6AOSHDiqygvvT6|xgpCEF z21O(-q%0aiXee5ULaM?x5v@VZ1Vfrswf(T(yK~O_+P=0kwMN8=lQ;-LIZ{^~3jD?1rz9&2sM{&L&umF@>Xq^2{LZDcMr@&64GnSaFYXfF}l9 z&t9w9J(hgytE;J*qdj{sp0W3jPBD^f705Ap_|a#~OU(gENcJ+s!2|CcWPz21NhYh8 zj_z+edA>V9lFj8Mo6AeK`SXj1qyvy|WXD=@eBrGRijsYo?Ywd$30Xzz@wUtly!?85liPaY>BegD{+#bSSv5W%{d`RgJctNh3y^q-~r8kEu3B2`R{iR z-22&o4(<8xy@lI_*)IyMrYUv(;o(OQr$D?SKh?Pvm9BVk6*ZN(+vJQxWO(S19f%?f zC95cY0cOFqZW3YSzH9K=uPVhrjNA()7`a5~J%N#P$6|g3lVQT#tCT{x4ih1U%%uO7&+_^V3ftZPo|$rKiy{M7&%E`mf;}34le{_%~w_i9hJZ0Z=0lxE^H~FKlK(ckYv_-PPt_$~;&o1>!T{9ctDV(ej6m)^{2lb&r8J(TVDP}EFmy*z65bOF~z|~0csV`ZBeoz!pOaj7`e@ak(0uNkuwa! z$l>ISL>Bn-NBi z7<05eDG>e6kz!xgD~@VOwQEG#V0BZlY=zR={elt@hvm~^?;`a}3sH7IOKZWl>As=a zSm4x1-&|{=I{Tz=uzi!3ot~|!t<{W)zQO4^Y2tZbU*BTS?k|tqPdz@)aNc%$)~AI& z9qGFo3h?pU=IxJrV!1l4+A3MNZ@4>WE}4ZNGS_O)P7i$vp}K8)t{MKr@Y%tMxn{V( zp-<*o)zk!hO$SS@z|Wjz_SDK?Ys7jW>#7uN>Bq=_*DdTWzTP9M=uVZ%j1iweM&Ds$ zhOx%I@BEZt1XPGLX2;qY;+8q>?2O4@oJ99Z45lN8o0IxJDh4ur@&Y~>R;)T*V)0hadM6L<`CUG1! zqSX)R}g$u<}?jJ#Gj2j|q zz4a0+dJyC8ghDi9bPzkRC5xpOUFZyq(}ehj95VZvd{s`q&@*Iz%pp@!i)A6Y9(29} zRMy3AMVv&+uLg}YqRoI=x3Xhz1ip$e2=unhI9GB^jy!%}zFpw+`_?GG)>SU0NvG56 zYpOgI5O}=uR7#e1)(FYcjh>BTW9>1m5;(Wf0_!Ndd@~fWrWWqim$sbj=IHDeFP^sk z<%KVLBT$=pf(=d7dTekMpQ`zl5tSE848q0m>RKyLKs%{!Rzz8dEOe#{YRkyt5i(32 zo+r$S@NRByqIHgvE(bk22h>{P76Ctxv#1un z7tB=nN+rZ{qH&fiU1aF8_z&X_Tpfx`S%hOZKtcd7ytweW+R;!=-2Sjk-78$j>E&EI zKSa8iNL>wFHzLb6Ll+)NlU%Q8j>R)(JV?-G-N~b@>|_xU6A^-`qum9%Ax76Xe|J;Ld|9=F(*oz8NKoJXsxq{tK( zD)0qio@z(TN`Tv4k8{t7@XUxI6Qxwx5;w`IdcRE&^p zMZ;hX$p(Xv8Prr+v2ImDMOxZJixDfcTo7|k$akGeAfmM-3$awQ>n&>u)+*Ux*b<~U z?kHDPjgNFpNY=9+(Q^jc4eTru<8JSoG~L+H6eJ#&FH9CyUns9x13r$xZw8GBw$j;y za3KRQEymcqj4jSu8rYDQOx=fVekG8sjX;kl=k&%e;_P6dM@B?=Jw9O#&(-E-*jMvNR~ z1TTJ%BpWaI4`V#a;-jif$_qlyL zjs*hQ)BE;`wk%54pXY8^HrbZ6WlItRPkvE2NVbf+k<-vesChVeBaf7;(@Mw1;r-yw znS~QKdlPF%*{ZJbGtGq*VeKf}^y$#?!nb>}BlDwY0$LL8cJ(S~m&e#Z=lH^d$?9BM z?LRRUXu+Gb8gJ*bi%achI+)DPobOfD&iREq-7K$JQ#w5VMXS?i@0vN^!_3n1D$H|# zcvxZ~LFzRq+=fdz2wbv0lB`3uV&w7{o!4E8n;m}i_9yLV&AHhfQ7`|KHrMEign;_U z53b+2@b~@f$>8(FCwEoFPqeJ4V(O$*2#;HBj!GYVt35#r+Zfq1gq5M)} z?huq;QMbUz#StU7DUKMq4Ms{KsyFQvrvY0KITl~IK?9>K$yV_>w|w0pLD8p@lj{Ww zM$Qyd;F8TG&`VyjuOLQFmGT%ldVP^NMh^7~f27o#Zy-ia=3sV>23NLA7?m z$VpPyA9rj!eJrr)&0X8JZQE?8`C6H1-hN^!AO`h>NWZ{ExEp0c!F-WQU2_T%&o(Kh!R;*RJ+6uCt< zbV_UjS;a=qw7jA7@!%fM`NtO;?1V`7E(~T6>3+wP;R{zu7X74+A-lXhLmMDBs!B-q z`=5h>5xF;7*VcVP#A+-C*<^5xO~9?lRN3N|S^4Ha6PGY1%+xaz5VVo=C#YjqzVwn} zBbSo6@=vmjoE2>3BxWP0H{iG;B1g5zc0>%nek1j{$x=sT)K#3`kZxg z;j^f4dCi(}VE{X649ZNnOss;eaaUc4Wl&x?IdJ1Q}-HSKUdsjHyMrnM)PLy zFLYpy%4Uf!xYd57{8DE_W`g_t)mfe8<(Cqo;yWA8mp9mBg}X=IIp2`U#O-X$-6LQv zmwTk6t-Jh$QGVt*Do@i6k)l~b(C`Q!Drhb+n=Nysma*nq1=;9G2zxQnkreZawb0st zCI?K##t{(6_0qZjEXryKDyu|qIFeutk>;TxDrtbazpgz1-JBS%jE`QzIkZ7%e+ zebm!u^Yrd*t7*)a9yUK{^Ij$e9Tz{%2V~#OsjAO6hrt0ZDZKa>=$Wy5S}vaHbD5Qe zGc*c;dn~1NCPkO(&IBk4%#_Cr)jethjsZKK=8cEhfFN z9*N=L0N1?X&Y-X4ukX29`bN9|(DqE@t~`W3Y`J1C}jDfK}B&QC7`s(Jf}>^KVFsjhr^%XEt(n zrvdA-LCiuMuR&f2%53CVXD>~_f{+Dj$?~OZL=kM{(!hgO0&f`Dw1BN(Y`fwQ*S+=n zej)wKb#EQtl&XSS4O{Tcdbt4E_#k8fSY%cg9A+7@C=N6Z&2+6Wnvi*#xX=@ah{To} zdao0tN*V`?>hn~^JtcN`W{&S9*;sKx(&e@uvPG$i%1S-0J4j1eX?D|lnGD$%V@EP( zK_Eq85Hr3k9FbLRsCcLUWb1&-$_{K>+r~!g4%yt5C0TNm1$Xa=1%Rw=XaAct!b-jM zyNAD`Sr1mEBT2eU8fCQ{re6kZiwW?!T9MF{ zs%GzlFY>pZ>1x0Cezl#znSxepkSY<`ix18m04taeudFo_1=+*W!^=WSm>gxDV5$)t z6_o_$@(Ho{BOZo7O2vW) zY~(m>mtBOF35>H0*@N3s1^NW(U#<}fV7p?t(qs^6Qu42$aYZAHe9dRO?k&+%Hrzv_ zw?m_u&fMt#?&i=*oukd?y0U%M?d@Cty%suKB!@1ya=;FzMk%>Xh-|%!R90i>OG~2? zW&QX1>*|I|2nU^9K_vqj*;~QLHeJuBz~^rq-jYq<3|6`Fg;AE%whX8?R+LU43mfeO zn)lJSkjvaMK#FN>^qWll*C30dGZf8mWgMgm;2~*;v~nYFp#J)m}efzP+@Hs{jy?cl!bjE6xAfE z@RMfhVZ;mlz$~zKhRt<@ww=59@4HgAQ)FLr&4snh{>4A=Q=kFa#2_2F7uK(TIWxv$ zF*2tZqbU;H#exKeVZufZ(=XMyjob_LE447q&iuIK8lC}^!Q63SkpA2Pw%nekTnt$# zZ$U*Cd$%aZk~w`_nus=XI7*9E1KCDylR?N?npU`Nk!l(2u$8@}{3fL>hLsEyWFx`$ z5Rr|xSY~|ilL@m5M>crJ&UqoGP0hx z>+PiIvn}+mMMG{P;SgDxdlr@D5kj?W@f~^xDIPjYl0{Gl&;zbFaM}R24?qT%oE(Eo z5U41yCO!KsMHg}}Rzra0Nw9Vn6+*nx`urPa>6feh(Bkd)8v$9#XknYet;R_RZHTvWl_D5hUj2n&VV(h6wA&1O4nkyt)5 z=n!b)C?Q@Qshh8pk&T}cWgXKZJMHGqDZ=1I4Sm5X>s_sfZ~)6jk)=r53U6PyeIPN4 z-qH^VNgP8Ky11oY1zFvOiUVZlP1by9wkU~RT%@~c2jQp?CSWTUk#u)Yv_*tlJQb3= zz24h3WnFgNvQIL2heL-|r>w_bZ}ZUbS|$Aw=tWLdIO_G*o$G6tFEV7|Bq2Opw&*a0 zD}&!g98WaK-bevH#HeG&JSQTnCdD80wP%QkteWOkYoGr2i_)Es${Ox>H;4>bvTUUF z`lS)ou{)ckw?8YTT)WK4^USBu47Of5U}jxgtb1#&e*9svf)51js)djWTW9dlAc5%v zNW}Du_syEHk<+ND`rNfE-pXv`jA$d5sMyHCn?P+;h5(^RD-#P%v$0?!mj*U+vD<(2 z9Vr}bJN&ITv&*W zTyn6DT$t71W;SwJufMzM_&NiP$FCfG4vgnzSr92V8OSkqT+C8w@XY+_k;N5Y-xOJ< zbTt}#R!85hhjk_7RK?&YM+WnRQxw_RQ4#Lep8C9`q>;N#1ML|s%GPtmb+z|zDq7Z_ z(_HKBrNTg1-rP5S+2xM1QpujxRGn$HrL!rUxelR#YFYSoiRjQR zJKu5i@+G@bht+}t-?gur2V72JW8Fz&;=*BCERS#;IYl|DWK*?zy^7h$!Sg!RTz2c;vVQv1IZbVoGreSr?m(T==bb-}>nr7kA$L z&0D|z@x@VWkcHl%_qb2$ja-$E!5){*O3#D?X2>t(1@OFm@cCztKKT3FEle9e|Hu8; zfBqbh?OpuoqhH)xedl+No;-QH#1uB$&)8f{`=S0-+cVh^S^|dLiUnVkncCsuFW(-W zg+F`#lS%l+(??(a;3OeryTd!-$;Y4G7n*e+-TiGb{KLDdX!0FAUr z&8}ACv3e#h)HF$+HC@;y*vsi29R&&JzEik&jh1ppXo6c#lY95%otHTsL8nt^TvpHk z5DvRcBe4mwdx|%3c9jH_o?~8`7M+DAOY__yTVSR@#o@vcm0--oRQs~RCX2JpTC>+{ z>q>DBrP`ySCL?#}&Yja!_5E^g53=*xR#QHdDBIr+vgZdyybpCG?gU)9==3j8H($=q zG1DESowH(zyz6W@8LfIV_yjc(Gghl08bA2=*S`Ds*?p}g3}(YHoWSerQeNtO&Gxd3 z_j4IE=JM?3_&S^{t*c;!mV@gHm)&ID$t216t54*{Om2nqGdyR~ZFJ?@;h>ctPh8SH zomjyZSry0s23gWrSBGrf#<_y*8jx+`1dF036Q)i(S7@ZHQdC20ZkpVkU`+btZc}cb zTwOKurYcp*8;&A*B@{Bof>7ZBirJ-$&>gT`AfsizpPKtZ;g*-wek=CD9BPK?yz}_8&z}F@)%E67rUS2=)!Sl9Ar2Lk zyHUvvdA5$+ssP7%mg?j3oODiKX8GI=O!zf4VFGp(4DlTu$>M4ovhrZ=D&C)0`bHdI zEOsHAN9z9?1Z^D#glcOXsJj-uVhc1a<`Y!j@19KVHrLIv7Z1%d8?<%9uLFQw$u`z7 ztL}+t9Ykv({K17dta?gqsrbU>6O*-Ajse9;fU(~o^<@WG*)8bBC~syh3jzm+>4LO3 zMzX#-<)Sc_=yi}d6TP6QXy39@y*Gz)7 z@G$Iuk6Q9IvoVRY?IA+CtS9hYpIWx2%Z}OYAnOaZglq=LW|iOlmd)ZmWRL3>^xG}8 z{$9rnJWUhsW=rO~>gkf(5B~h0f4<*cZHXlIwDI<4yOryvdOIElGgXr_X}X!+$7eY| z*Diz+voW30sh5d>N-GX!&{ zz0^;UwcUj`0~O2)a?^BaKI4#-Q^+F9o>`Q&PEEzH33%43Z17{;6qJ&~IRub(F^ASS z8+`DMO4%rC{lLZkmixA$s+y*?H18f1``uBv?v8%k4rCib3~E%iUy2x1#e*$W-eR7x z;~zTM7fq(w681~aKL+PeIc2X`gIgP9_BYk!ssxb~vw&=82FRw_EHlVn_UG5Bil)sQ z4PUUv)@2mUw>!HFS3|5&x})t@?>%Dh^*rF>Nuw-KLbv$9oajjd)gU}aloiM}OUSM{ z?1fesh3sOy!XdmGFPCblyrjAEf~BuEZX*mY(S`^xJ0%C`mtjF{?t^Ou*+ts+#5YYH z4<|Gj#6!#705M<3T0cX=&AX`m%9Un^59>VMnUMsVuLA}A-qt-i!zanI-w(eOS zvwA<9$-Y9cRmi4@v#H8X%o`vH&YYy=lG+3XtE3S#210I=ZoMTuua7ZqJ2-pD;%RZv zhRCpLW7qa|6d*yQmd!aOf9^JPx(o0C01d-QL_t)2Yj?A`DJ-3}<_=fL_Eu!G(?|v2 zG(oUrK9;2f+-_UrHgdFa9LX;=q2m&>b@)=uQws?WDxE=>O|Whl$2G6rc^P1L0gD4r zP8c>F;h@(Ek=vLf5{R+I$N)6A)!+V!0hv<$SkGr!i%`~0lY zfJvV^9=O`1f|?PxAR#Sljta6}m%HHsJ(+bKvXr$l6L}Kaa#!n-P?$5vI&T?dArc4O z*b=hQXuTOt$qazlX*A`AMAw4Ez#~*e3;|;L)k8cMi?24Y7^GUsO}97Vx1G8KG6p4N z3npe`qu~bG@{isHEyAoo7P{VrK^8hk784_*HuxM7ES`|NeO1U7raCr67d;gkKxqql zf~rvhbF#AIYLI27tKZN1{eZdI3_i@4w_r=$qoZ zjIix~sy;7VeJNsHY_q8nnI>0PgsiF?H#ej8S{-HAEFz2+D>?Nqms8^fkwSL5OuZF2 zvIT6}2FD%CC1x8JTrBx8J0>BhLzX{DzyN~B4H=yA&ZVKKkJ2+*UKSWa0b!_&tlNop&U;`Yl`7OIM##>9#sj>l(O{d zQ^UJY%$m$>Cp+)_-!Zlt!aWSx{gJP)0@<5g$YxcT1$qs#p3f4pnTAXy0&x@0ZaN( zgt{#Lqudn$vQr78i_}aH_*3v&t>&(Jf>~S!?I@90$xmoFo!201*@JdukPV<}5wn(1 zLDr|n2-o?+FpG*pd)$tPv{Ry^fd*M2w1!w=2Kma+o34yL2I2{eoZT!KyVSnnwpjU z7yB@)Dq98HNyAC2;0zZtVbsK+ff00Vz_lHZH46DK^Alo{Nn$5@tCQMn-Eb zweU{xX|8sO}i->D5 zzX`?h5^~LTR0D7c*;Whr*P|m3Tdn`1>!%C|ly)=~xj=)6oCPc&2fikc&keFd4(3Ar zt_j(fV)hjvd%QPBGdMI}JE$$p4$Xn>A@-)e`oglYV@WUO3^EI|S%j3Qpt^41SMpJ25wr+tRq{{^t#6za=?P-o|=V4 z#$Tf9bQzGqPE%f`I@racZ9CBB*(FP5a$t~u!WAND8)O&biWvmyTp>Hh&=(+!gliYN zTFfJb(l0T4oE2#JdP|*;i&`_XA z2+<%uB9Qn2w75W`^l;vD?&s{=uCNSL)a4UJ4JG+t~bwmab{4YRT5AV^6?ep-{&fOk#gujYNfIVyg@UrON)Ywmu%tiZn%8NTf8j3)2#KC> z_Au(Jm7$%%*?@latoqPeh7UN5&Oucw(4@mL>z3Y<75l{E8VIF2`m+d_9We{FFrybo zPnLmLvQi0#%-|9vy{Y02!1oQV!Q@T|u`Fn9AhuyeTl;3Ny;1*mR|nayV{mZ8Ya_KA zkmXqGmxeVm;9wb$ZP3GRf$Y*wSkrQb%)f*ykmbb))3rkjX_Vzvb;?lIB^O0nJBa~` zH@~RJEX;qNmU$+jXvPoE8QZcTmbV#HV##V3ca3+r5@wlV<83d|w=NPQ1Ro!VBy8vv zLGZ1ZON9nM_<3b?5UvyHa5LN-5?dvMF^S}hxe0e>9L z(?4h={W2~EgOWAPvJrUzWQ$!?7VKoRGH`CeG&vmBMYhb5g)R_ewYN9DGwY2pNsBdZ zFC&Zgf|*!cvIoh1f%$|41TpJ~^~@UCMR!_xj!$D-7e>e%oE0-g46$~YDN|;XxFce> zx29ROfW>T@caeg?fnM#}eegPzj60%t-R#UUd#bsbu$fq5HVd;mJ7~P12MHtV&X@Cq zx?mQxDo2);8yj5#S@~3tBeUYfhl2@ww@0?Wq5So_#7YSvTVCUfv(0>zMqT4;3Vh)O zOAh9cE!d^CcCwy@$#3aDkriRUd>o0vWqp*DbBBCx8@C#5OFP{5H06=;3uM+#6rggX zgw{$3*I3^P9ykp%yzKK7de&6lp*03IGB#bgQXnla2-C2~G=_1oIG~i!|44!^KmAF| zwwRn4YhNr4y4?k3NXHo20;y3e7StJ!v?--BjhtznSea7RCZ({;!6k{@g$A)c%5ohI zy1>sy)j6^Xdmi(CE|IbJP92aP)BTLKTVBTe8bS7dN4AfJN=?2s)K_QSXOC>a)u~zM z7&yzPu+BP|__0r^*`*R>uT8%$onb)8GO-#DGMwyYw^dA_St|qM7AVT&?zb4s$r-h~ zzn<8N+ZCKJsL;KI_5yTdRUBbW*!YQEio=5c7e!?}QVChZom(ed@UqYa!vd89?c^q# z0%$?ppO%B(y<~-9NV&2wOAqOZ?~6ePv67vlNRrN4U{~Uui3dlJ=Lrvm6-tdsH`Ah( z2$kLB@XaLA31-N)0o-D---$piaa3XXWT6K4l!|ILw!`F>Z06AN6NBR+-fVbfty2sh z%QV6cwq%O#<${+mKLDXf(pV!oWHC5t&`wDXm^S9A;rNUk2v3H^_-X>qEK&*`bO9l2 zY(#cc-z>~#(fF{Rnp|;NUAlw0d*%OTLy+zF=f@)qSnMJj<81PEitM;akhLCJG#vzF zlgrr%ge(VHNy669l{p5NrQb$3M{7lynyH!u#m0wOKh&Uv`&UF~t47h9*xwT6Qw z&xm{L8e}QT9?$thcEOAb+90TdgxPUjJB^-QG05Tc!7JNCG|4gLnRV^>E=I`S4s7iUsY07kp|;XbQ9Y__J3}=oa=q{Ppkm-_*XD zy8=Nz6LSz(6%U-%l5vI1>;C!oKN9T5^v*x|^x?wE3f>CJ)C#RZ1PwzcH=|jq{c_qv zzpE-!YgQNQjfZ*PtT5%;3PQ!UeDwLt)gRBk-cG_SFS})8ced~T@ZQJwvA@K1)%q>d zylbcBS)^D@o*`?{XgBdsy$o3)wzkbU2HCyN;)K2N(ON&^W@6#w?!{uQLw5V4m#fvq z?@ud7;-f#m`L0Q+l(o0-ezAJ-{EgJU-GuBKvB l(+5FGwQ*QiXV{!l{{q#Z1L({P7dQX_002ovPDHLkV1g)r4ygbD diff --git a/docs/html/_images/migrate-from-lma-to-cos-lite-1.png b/docs/html/_images/migrate-from-lma-to-cos-lite-1.png deleted file mode 100644 index 1bc5e54586f620865cd8cd66ac201569ea92f2a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71870 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 HU_ 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

Short

- */ - .o-tooltip--left { - position: relative; - } - - .o-tooltip--left:after { - opacity: 0; - visibility: hidden; - position: absolute; - content: attr(data-tooltip); - padding: .2em; - font-size: .8em; - left: -.2em; - background: grey; - color: white; - white-space: nowrap; - z-index: 2; - border-radius: 2px; - transform: translateX(-102%) translateY(0); - transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); -} - -.o-tooltip--left:hover:after { - display: block; - opacity: 1; - visibility: visible; - transform: translateX(-100%) translateY(0); - transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); - transition-delay: .5s; -} - -/* By default the copy button shouldn't show up when printing a page */ -@media print { - button.copybtn { - display: none; - } -} diff --git a/docs/html/_static/copybutton.js b/docs/html/_static/copybutton.js deleted file mode 100644 index 2ea7ff3e..00000000 --- a/docs/html/_static/copybutton.js +++ /dev/null @@ -1,248 +0,0 @@ -// Localization support -const messages = { - 'en': { - 'copy': 'Copy', - 'copy_to_clipboard': 'Copy to clipboard', - 'copy_success': 'Copied!', - 'copy_failure': 'Failed to copy', - }, - 'es' : { - 'copy': 'Copiar', - 'copy_to_clipboard': 'Copiar al portapapeles', - 'copy_success': '¡Copiado!', - 'copy_failure': 'Error al copiar', - }, - 'de' : { - 'copy': 'Kopieren', - 'copy_to_clipboard': 'In die Zwischenablage kopieren', - 'copy_success': 'Kopiert!', - 'copy_failure': 'Fehler beim Kopieren', - }, - 'fr' : { - 'copy': 'Copier', - 'copy_to_clipboard': 'Copier dans le presse-papier', - 'copy_success': 'Copié !', - 'copy_failure': 'Échec de la copie', - }, - 'ru': { - 'copy': 'Скопировать', - 'copy_to_clipboard': 'Скопировать в буфер', - 'copy_success': 'Скопировано!', - 'copy_failure': 'Не удалось скопировать', - }, - 'zh-CN': { - 'copy': '复制', - 'copy_to_clipboard': '复制到剪贴板', - 'copy_success': '复制成功!', - 'copy_failure': '复制失败', - }, - 'it' : { - 'copy': 'Copiare', - 'copy_to_clipboard': 'Copiato negli appunti', - 'copy_success': 'Copiato!', - 'copy_failure': 'Errore durante la copia', - } -} - -let locale = 'en' -if( document.documentElement.lang !== undefined - && messages[document.documentElement.lang] !== undefined ) { - locale = document.documentElement.lang -} - -let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; -if (doc_url_root == '#') { - doc_url_root = ''; -} - -/** - * SVG files for our copy buttons - */ -let iconCheck = ` - ${messages[locale]['copy_success']} - - -` - -// If the user specified their own SVG use that, otherwise use the default -let iconCopy = ``; -if (!iconCopy) { - iconCopy = ` - ${messages[locale]['copy_to_clipboard']} - - - -` -} - -/** - * Set up copy/paste for code blocks - */ - -const runWhenDOMLoaded = cb => { - if (document.readyState != 'loading') { - cb() - } else if (document.addEventListener) { - document.addEventListener('DOMContentLoaded', cb) - } else { - document.attachEvent('onreadystatechange', function() { - if (document.readyState == 'complete') cb() - }) - } -} - -const codeCellId = index => `codecell${index}` - -// Clears selected text since ClipboardJS will select the text when copying -const clearSelection = () => { - if (window.getSelection) { - window.getSelection().removeAllRanges() - } else if (document.selection) { - document.selection.empty() - } -} - -// Changes tooltip text for a moment, then changes it back -// We want the timeout of our `success` class to be a bit shorter than the -// tooltip and icon change, so that we can hide the icon before changing back. -var timeoutIcon = 2000; -var timeoutSuccessClass = 1500; - -const temporarilyChangeTooltip = (el, oldText, newText) => { - el.setAttribute('data-tooltip', newText) - el.classList.add('success') - // Remove success a little bit sooner than we change the tooltip - // So that we can use CSS to hide the copybutton first - setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) - setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) -} - -// Changes the copy button icon for two seconds, then changes it back -const temporarilyChangeIcon = (el) => { - el.innerHTML = iconCheck; - setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) -} - -const addCopyButtonToCodeCells = () => { - // If ClipboardJS hasn't loaded, wait a bit and try again. This - // happens because we load ClipboardJS asynchronously. - if (window.ClipboardJS === undefined) { - setTimeout(addCopyButtonToCodeCells, 250) - return - } - - // Add copybuttons to all of our code cells - const COPYBUTTON_SELECTOR = 'div.highlight pre'; - const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) - codeCells.forEach((codeCell, index) => { - const id = codeCellId(index) - codeCell.setAttribute('id', id) - - const clipboardButton = id => - `` - codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) - }) - -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} - -/** - * Removes excluded text from a Node. - * - * @param {Node} target Node to filter. - * @param {string} exclude CSS selector of nodes to exclude. - * @returns {DOMString} Text from `target` with text removed. - */ -function filterText(target, exclude) { - const clone = target.cloneNode(true); // clone as to not modify the live DOM - if (exclude) { - // remove excluded nodes - clone.querySelectorAll(exclude).forEach(node => node.remove()); - } - return clone.innerText; -} - -// Callback when a copy button is clicked. Will be passed the node that was clicked -// should then grab the text and replace pieces of text that shouldn't be used in output -function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { - var regexp; - var match; - - // Do we check for line continuation characters and "HERE-documents"? - var useLineCont = !!lineContinuationChar - var useHereDoc = !!hereDocDelim - - // create regexp to capture prompt and remaining line - if (isRegexp) { - regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') - } else { - regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') - } - - const outputLines = []; - var promptFound = false; - var gotLineCont = false; - var gotHereDoc = false; - const lineGotPrompt = []; - for (const line of textContent.split('\n')) { - match = line.match(regexp) - if (match || gotLineCont || gotHereDoc) { - promptFound = regexp.test(line) - lineGotPrompt.push(promptFound) - if (removePrompts && promptFound) { - outputLines.push(match[2]) - } else { - outputLines.push(line) - } - gotLineCont = line.endsWith(lineContinuationChar) & useLineCont - if (line.includes(hereDocDelim) & useHereDoc) - gotHereDoc = !gotHereDoc - } else if (!onlyCopyPromptLines) { - outputLines.push(line) - } else if (copyEmptyLines && line.trim() === '') { - outputLines.push(line) - } - } - - // If no lines with the prompt were found then just use original lines - if (lineGotPrompt.some(v => v === true)) { - textContent = outputLines.join('\n'); - } - - // Remove a trailing newline to avoid auto-running when pasting - if (textContent.endsWith("\n")) { - textContent = textContent.slice(0, -1) - } - return textContent -} - - -var copyTargetText = (trigger) => { - var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); - - // get filtered text - let exclude = '.linenos'; - - let text = filterText(target, exclude); - return formatCopyText(text, '', false, true, true, true, '', '') -} - - // Initialize with a callback so we can modify the text before copy - const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) - - // Update UI with error/success messages - clipboard.on('success', event => { - clearSelection() - temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) - temporarilyChangeIcon(event.trigger) - }) - - clipboard.on('error', event => { - temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) - }) -} - -runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/docs/html/_static/copybutton_funcs.js b/docs/html/_static/copybutton_funcs.js deleted file mode 100644 index dbe1aaad..00000000 --- a/docs/html/_static/copybutton_funcs.js +++ /dev/null @@ -1,73 +0,0 @@ -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string -} - -/** - * Removes excluded text from a Node. - * - * @param {Node} target Node to filter. - * @param {string} exclude CSS selector of nodes to exclude. - * @returns {DOMString} Text from `target` with text removed. - */ -export function filterText(target, exclude) { - const clone = target.cloneNode(true); // clone as to not modify the live DOM - if (exclude) { - // remove excluded nodes - clone.querySelectorAll(exclude).forEach(node => node.remove()); - } - return clone.innerText; -} - -// Callback when a copy button is clicked. Will be passed the node that was clicked -// should then grab the text and replace pieces of text that shouldn't be used in output -export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { - var regexp; - var match; - - // Do we check for line continuation characters and "HERE-documents"? - var useLineCont = !!lineContinuationChar - var useHereDoc = !!hereDocDelim - - // create regexp to capture prompt and remaining line - if (isRegexp) { - regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') - } else { - regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') - } - - const outputLines = []; - var promptFound = false; - var gotLineCont = false; - var gotHereDoc = false; - const lineGotPrompt = []; - for (const line of textContent.split('\n')) { - match = line.match(regexp) - if (match || gotLineCont || gotHereDoc) { - promptFound = regexp.test(line) - lineGotPrompt.push(promptFound) - if (removePrompts && promptFound) { - outputLines.push(match[2]) - } else { - outputLines.push(line) - } - gotLineCont = line.endsWith(lineContinuationChar) & useLineCont - if (line.includes(hereDocDelim) & useHereDoc) - gotHereDoc = !gotHereDoc - } else if (!onlyCopyPromptLines) { - outputLines.push(line) - } else if (copyEmptyLines && line.trim() === '') { - outputLines.push(line) - } - } - - // If no lines with the prompt were found then just use original lines - if (lineGotPrompt.some(v => v === true)) { - textContent = outputLines.join('\n'); - } - - // Remove a trailing newline to avoid auto-running when pasting - if (textContent.endsWith("\n")) { - textContent = textContent.slice(0, -1) - } - return textContent -} diff --git a/docs/html/_static/custom.css b/docs/html/_static/custom.css deleted file mode 100644 index 0ecc00c6..00000000 --- a/docs/html/_static/custom.css +++ /dev/null @@ -1,397 +0,0 @@ -/** - Ubuntu variable font definitions. - Based on https://github.com/canonical/vanilla-framework/blob/main/scss/_base_fontfaces.scss - - When font files are updated in Vanilla, the links to font files will need to be updated here as well. -*/ - -/* default font set */ -@font-face { - font-family: 'Ubuntu variable'; - font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ - font-style: normal; - font-weight: 100 800; /* min and max value for the weight axis */ - src: url('https://assets.ubuntu.com/v1/f1ea362b-Ubuntu%5Bwdth,wght%5D-latin-v0.896a.woff2') format('woff2-variations'); -} - -@font-face { - font-family: 'Ubuntu variable'; - font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ - font-style: italic; - font-weight: 100 800; /* min and max value for the weight axis */ - src: url('https://assets.ubuntu.com/v1/90b59210-Ubuntu-Italic%5Bwdth,wght%5D-latin-v0.896a.woff2') format('woff2-variations'); -} - -@font-face { - font-family: 'Ubuntu Mono variable'; - font-style: normal; - font-weight: 100 800; /* min and max value for the weight axis */ - src: url('https://assets.ubuntu.com/v1/d5fc1819-UbuntuMono%5Bwght%5D-latin-v0.869.woff2') format('woff2-variations'); -} - -/* cyrillic-ext */ -@font-face { - font-family: 'Ubuntu variable'; - font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ - font-style: normal; - font-weight: 100 800; /* min and max value for the weight axis */ - src: url('https://assets.ubuntu.com/v1/77cd6650-Ubuntu%5Bwdth,wght%5D-cyrillic-extended-v0.896a.woff2') format('woff2-variations'); - unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; -} - -/* cyrillic */ -@font-face { - font-family: 'Ubuntu variable'; - font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ - font-style: normal; - font-weight: 100 800; /* min and max value for the weight axis */ - src: url('https://assets.ubuntu.com/v1/2702fce5-Ubuntu%5Bwdth,wght%5D-cyrillic-v0.896a.woff2') format('woff2-variations'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} - -/* greek-ext */ -@font-face { - font-family: 'Ubuntu variable'; - font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ - font-style: normal; - font-weight: 100 800; /* min and max value for the weight axis */ - src: url('https://assets.ubuntu.com/v1/5c108b7d-Ubuntu%5Bwdth,wght%5D-greek-extended-v0.896a.woff2') format('woff2-variations'); - unicode-range: U+1F00-1FFF; -} - -/* greek */ -@font-face { - font-family: 'Ubuntu variable'; - font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ - font-style: normal; - font-weight: 100 800; /* min and max value for the weight axis */ - src: url('https://assets.ubuntu.com/v1/0a14c405-Ubuntu%5Bwdth,wght%5D-greek-v0.896a.woff2') format('woff2-variations'); - unicode-range: U+0370-03FF; -} - -/* latin-ext */ -@font-face { - font-family: 'Ubuntu variable'; - font-stretch: 100%; /* min and max value for the width axis, expressed as percentage */ - font-style: normal; - font-weight: 100 800; /* min and max value for the weight axis */ - src: url('https://assets.ubuntu.com/v1/19f68eeb-Ubuntu%5Bwdth,wght%5D-latin-extended-v0.896a.woff2') format('woff2-variations'); - unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; -} - - -/** Define font-weights as per Vanilla - Based on: https://github.com/canonical/vanilla-framework/blob/main/scss/_base_typography-definitions.scss - - regular text: 400, - bold: 550, - thin: 300, - - h1: bold, - h2: 180; - h3: bold, - h4: 275, - h5: bold, - h6: regular -*/ - -/* default regular text */ -html { - font-weight: 400; -} - -/* heading specific definitions */ -h1, h3, h5 { font-weight: 550; } -h2 { font-weight: 180; } -h4 { font-weight: 275; } - -/* bold */ -.toc-tree li.scroll-current>.reference, -dl.glossary dt, -dl.simple dt, -dl:not([class]) dt { - font-weight: 550; -} - - -/** Table styling **/ - -th.head { - text-transform: uppercase; - font-size: var(--font-size--small); - text-align: initial; -} - -table.align-center th.head { - text-align: center -} - -table.docutils { - border: 0; - box-shadow: none; - width:100%; -} - -table.docutils td, table.docutils th, table.docutils td:last-child, table.docutils th:last-child, table.docutils td:first-child, table.docutils th:first-child { - border-right: none; - border-left: none; -} - -/* Allow to centre text horizontally in table data cells */ -table.align-center { - text-align: center !important; -} - -/** No rounded corners **/ - -.admonition, code.literal, .sphinx-tabs-tab, .sphinx-tabs-panel, .highlight { - border-radius: 0; -} - -/** Admonition styling **/ - -.admonition { - border-top: 1px solid #d9d9d9; - border-right: 1px solid #d9d9d9; - border-bottom: 1px solid #d9d9d9; -} - -/** Color for the "copy link" symbol next to headings **/ - -a.headerlink { - color: var(--color-brand-primary); -} - -/** Line to the left of the current navigation entry **/ - -.sidebar-tree li.current-page { - border-left: 2px solid var(--color-brand-primary); -} - -/** Some tweaks for Sphinx tabs **/ - -[role="tablist"] { - border-bottom: 1px solid var(--color-sidebar-item-background--hover); -} - -.sphinx-tabs-tab[aria-selected="true"], .sd-tab-set>input:checked+label{ - border: 0; - border-bottom: 2px solid var(--color-brand-primary); - font-weight: 400; - font-size: 1rem; - color: var(--color-brand-primary); -} - -body[data-theme="dark"] .sphinx-tabs-tab[aria-selected="true"] { - background: var(--color-background-primary); - border-bottom: 2px solid var(--color-brand-primary); -} - -button.sphinx-tabs-tab[aria-selected="false"]:hover, .sd-tab-set>input:not(:checked)+label:hover { - border-bottom: 2px solid var(--color-foreground-border); -} - -button.sphinx-tabs-tab[aria-selected="false"]{ - border-bottom: 2px solid var(--color-background-primary); -} - -body[data-theme="dark"] .sphinx-tabs-tab { - background: var(--color-background-primary); -} - -.sphinx-tabs-tab, .sd-tab-set>label{ - color: var(--color-brand-primary); - font-family: var(--font-stack); - font-weight: 400; - font-size: 1rem; - padding: 1em 1.25em .5em -} - -.sphinx-tabs-panel { - border: 0; - border-bottom: 1px solid var(--color-sidebar-item-background--hover); - background: var(--color-background-primary); - padding: 0.75rem 0 0.75rem 0; -} - -body[data-theme="dark"] .sphinx-tabs-panel { - background: var(--color-background-primary); -} - -/** A tweak for issue #190 **/ - -.highlight .hll { - background-color: var(--color-highlighted-background); -} - - -/** Custom classes to fix scrolling in tables by decreasing the - font size or breaking certain columns. - Specify the classes in the Markdown file with, for example: - ```{rst-class} break-col-4 min-width-4-8 - ``` -**/ - -table.dec-font-size { - font-size: smaller; -} -table.break-col-1 td.text-left:first-child { - word-break: break-word; -} -table.break-col-4 td.text-left:nth-child(4) { - word-break: break-word; -} -table.min-width-1-15 td.text-left:first-child { - min-width: 15em; -} -table.min-width-4-8 td.text-left:nth-child(4) { - min-width: 8em; -} - -/** Underline for abbreviations **/ - -abbr[title] { - text-decoration: underline solid #cdcdcd; -} - -/** Use the same style for right-details as for left-details **/ -.bottom-of-page .right-details { - font-size: var(--font-size--small); - display: block; -} - -/** Version switcher */ -button.version_select { - color: var(--color-foreground-primary); - background-color: var(--color-toc-background); - padding: 5px 10px; - border: none; -} - -.version_select:hover, .version_select:focus { - background-color: var(--color-sidebar-item-background--hover); -} - -.version_dropdown { - position: relative; - display: inline-block; - text-align: right; - font-size: var(--sidebar-item-font-size); -} - -.available_versions { - display: none; - position: absolute; - right: 0px; - background-color: var(--color-toc-background); - box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); - z-index: 11; -} - -.available_versions a { - color: var(--color-foreground-primary); - padding: 12px 16px; - text-decoration: none; - display: block; -} - -.available_versions a:hover {background-color: var(--color-sidebar-item-background--current)} - -/** Suppress link underlines outside on-hover **/ -a { - text-decoration: none; -} - -a:hover, -a:visited:hover { - text-decoration: underline; -} - -.show {display:block;} - -/** Fix for nested numbered list - the nested list is lettered **/ -ol.arabic ol.arabic { - list-style: lower-alpha; -} - -/** Make expandable sections look like links **/ -details summary { - color: var(--color-link); -} - -/** Fix the styling of the version box for readthedocs **/ - -#furo-readthedocs-versions .rst-versions, #furo-readthedocs-versions .rst-current-version, #furo-readthedocs-versions:focus-within .rst-current-version, #furo-readthedocs-versions:hover .rst-current-version { - background: var(--color-sidebar-item-background--hover); -} - -.rst-versions .rst-other-versions dd a { - color: var(--color-link); -} - -#furo-readthedocs-versions:focus-within .rst-current-version .fa-book, #furo-readthedocs-versions:hover .rst-current-version .fa-book, .rst-versions .rst-other-versions { - color: var(--color-sidebar-link-text); -} - -.rst-versions .rst-current-version { - color: var(--color-version-popup); - font-weight: bolder; -} - -/* Code-block copybutton invisible by default - (overriding Furo config to achieve default copybutton setting). */ -.highlight button.copybtn { - opacity: 0; -} - -/* Mimicking the 'Give feedback' button for UX consistency */ -.sidebar-search-container input[type=submit] { - color: #FFFFFF; - border: 2px solid #D6410D; - padding: var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal); - background: #D6410D; - font-weight: bold; - font-size: var(--font-size--small); - cursor: pointer; -} - -.sidebar-search-container input[type=submit]:hover { - text-decoration: underline; -} - -/* Make inline code the same size as code blocks */ -p code.literal { - border: 0; - font-size: var(--code-font-size); -} - -/* Use the general admonition font size for inline code */ -.admonition p code.literal { - font-size: var(--admonition-font-size); -} - -.highlight .s, -.highlight .s1, -.highlight .s2 { - color: #3F8100; -} - -.highlight .o { - color: #BB5400; -} - -/* Only relevant for specific PDF generation issues */ - -.rubric>.hclass2 { - display: block; - font-size: 2em; - border-radius: .5rem; - font-weight: 300; - line-height: 1.25; - margin-top: 1.75rem; - margin-right: -0.5rem; - margin-bottom: 0.5rem; - margin-left: -0.5rem; - padding-left: .5rem; - padding-right: .5rem; -} diff --git a/docs/html/_static/debug.css b/docs/html/_static/debug.css deleted file mode 100644 index 74d4aec3..00000000 --- a/docs/html/_static/debug.css +++ /dev/null @@ -1,69 +0,0 @@ -/* - This CSS file should be overridden by the theme authors. It's - meant for debugging and developing the skeleton that this theme provides. -*/ -body { - font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, - "Apple Color Emoji", "Segoe UI Emoji"; - background: lavender; -} -.sb-announcement { - background: rgb(131, 131, 131); -} -.sb-announcement__inner { - background: black; - color: white; -} -.sb-header { - background: lightskyblue; -} -.sb-header__inner { - background: royalblue; - color: white; -} -.sb-header-secondary { - background: lightcyan; -} -.sb-header-secondary__inner { - background: cornflowerblue; - color: white; -} -.sb-sidebar-primary { - background: lightgreen; -} -.sb-main { - background: blanchedalmond; -} -.sb-main__inner { - background: antiquewhite; -} -.sb-header-article { - background: lightsteelblue; -} -.sb-article-container { - background: snow; -} -.sb-article-main { - background: white; -} -.sb-footer-article { - background: lightpink; -} -.sb-sidebar-secondary { - background: lightgoldenrodyellow; -} -.sb-footer-content { - background: plum; -} -.sb-footer-content__inner { - background: palevioletred; -} -.sb-footer { - background: pink; -} -.sb-footer__inner { - background: salmon; -} -.sb-article { - background: white; -} diff --git a/docs/html/_static/design-tabs.js b/docs/html/_static/design-tabs.js deleted file mode 100644 index b25bd6a4..00000000 --- a/docs/html/_static/design-tabs.js +++ /dev/null @@ -1,101 +0,0 @@ -// @ts-check - -// Extra JS capability for selected tabs to be synced -// The selection is stored in local storage so that it persists across page loads. - -/** - * @type {Record} - */ -let sd_id_to_elements = {}; -const storageKeyPrefix = "sphinx-design-tab-id-"; - -/** - * Create a key for a tab element. - * @param {HTMLElement} el - The tab element. - * @returns {[string, string, string] | null} - The key. - * - */ -function create_key(el) { - let syncId = el.getAttribute("data-sync-id"); - let syncGroup = el.getAttribute("data-sync-group"); - if (!syncId || !syncGroup) return null; - return [syncGroup, syncId, syncGroup + "--" + syncId]; -} - -/** - * Initialize the tab selection. - * - */ -function ready() { - // Find all tabs with sync data - - /** @type {string[]} */ - let groups = []; - - document.querySelectorAll(".sd-tab-label").forEach((label) => { - if (label instanceof HTMLElement) { - let data = create_key(label); - if (data) { - let [group, id, key] = data; - - // add click event listener - // @ts-ignore - label.onclick = onSDLabelClick; - - // store map of key to elements - if (!sd_id_to_elements[key]) { - sd_id_to_elements[key] = []; - } - sd_id_to_elements[key].push(label); - - if (groups.indexOf(group) === -1) { - groups.push(group); - // Check if a specific tab has been selected via URL parameter - const tabParam = new URLSearchParams(window.location.search).get( - group - ); - if (tabParam) { - console.log( - "sphinx-design: Selecting tab id for group '" + - group + - "' from URL parameter: " + - tabParam - ); - window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); - } - } - - // Check is a specific tab has been selected previously - let previousId = window.sessionStorage.getItem( - storageKeyPrefix + group - ); - if (previousId === id) { - // console.log( - // "sphinx-design: Selecting tab from session storage: " + id - // ); - // @ts-ignore - label.previousElementSibling.checked = true; - } - } - } - }); -} - -/** - * Activate other tabs with the same sync id. - * - * @this {HTMLElement} - The element that was clicked. - */ -function onSDLabelClick() { - let data = create_key(this); - if (!data) return; - let [group, id, key] = data; - for (const label of sd_id_to_elements[key]) { - if (label === this) continue; - // @ts-ignore - label.previousElementSibling.checked = true; - } - window.sessionStorage.setItem(storageKeyPrefix + group, id); -} - -document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs/html/_static/doctools.js b/docs/html/_static/doctools.js deleted file mode 100644 index 4d67807d..00000000 --- a/docs/html/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", -]); - -const _ready = (callback) => { - if (document.readyState !== "loading") { - callback(); - } else { - document.addEventListener("DOMContentLoaded", callback); - } -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS: {}, - PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), - LOCALE: "unknown", - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext: (string) => { - const translated = Documentation.TRANSLATIONS[string]; - switch (typeof translated) { - case "undefined": - return string; // no translation - case "string": - return translated; // translation exists - default: - return translated[0]; // (singular, plural) translation tuple exists - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - initDomainIndexTable: () => { - const toggler = (el) => { - const idNumber = el.id.substr(7); - const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); - if (el.src.substr(-9) === "minus.png") { - el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; - toggledRows.forEach((el) => (el.style.display = "none")); - } else { - el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; - toggledRows.forEach((el) => (el.style.display = "")); - } - }; - - const togglerElements = document.querySelectorAll("img.toggler"); - togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) - ); - togglerElements.forEach((el) => (el.style.display = "")); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); - }, - - initOnKeyListeners: () => { - // only install a listener if it is really needed - if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS - ) - return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.altKey || event.ctrlKey || event.metaKey) return; - - if (!event.shiftKey) { - switch (event.key) { - case "ArrowLeft": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const prevLink = document.querySelector('link[rel="prev"]'); - if (prevLink && prevLink.href) { - window.location.href = prevLink.href; - event.preventDefault(); - } - break; - case "ArrowRight": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const nextLink = document.querySelector('link[rel="next"]'); - if (nextLink && nextLink.href) { - window.location.href = nextLink.href; - event.preventDefault(); - } - break; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case "/": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.focusSearchBar(); - event.preventDefault(); - } - }); - }, -}; - -// quick alias for translations -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/docs/html/_static/documentation_options.js b/docs/html/_static/documentation_options.js deleted file mode 100644 index 9d8dea72..00000000 --- a/docs/html/_static/documentation_options.js +++ /dev/null @@ -1,13 +0,0 @@ -const DOCUMENTATION_OPTIONS = { - VERSION: '', - LANGUAGE: 'en', - COLLAPSE_INDEX: false, - BUILDER: 'dirhtml', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: false, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: true, -}; \ No newline at end of file diff --git a/docs/html/_static/favicon.png b/docs/html/_static/favicon.png deleted file mode 100644 index 7f175e4617695f752022d2671a0f97fa95bfd895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2258 zcmZ{lc|6mPAICp7%w3UVp(MxT*yhYVXRb*j4aLln#hep4H@+(7Oqin_QSKbckz;;B z%25eL%jE0IeMC8b`t$e4@9}=T-_OV6^?E%2e#hHbU*_dH!vz2Uueq5q=9m(HmxKNI z28D%f9fS3j0oninYE!uPUD^JYZe|!X0EEc^0QnyP*gcNO^8gTx0Dzx30MMcVfUtjF z%T=A@f*o&p*%&zbI|Xge(~lDf$sBD0nd27ak%L`%S$!-(M$L^4?66%KSzrCcXP`aN zLmELsaM@(>AiV4=0V@z1lT%|vHMT5vehCr;6=j57|8)XZZuje%@IL2(K-h2`rsQ^s z5=OohD2uC$d%*O$!!MhhGWKQew}Q&%7G5Tme63S)8~^^(_xVr!r$TGx`N1}oys`&wj8M&n(&&WLVzdBqI&`yc9DyG9PlV!A+XjRmLg z)kJk%>nP|5;j?C;{0cr4$L0(^JypO+g6hwiFE?yzI8(7U34%Fg6btl zqIgT8yJWU_O@DSh2^zqFh)GNem$Hg=`t+3|qO{4d9CqC0)!>JujE3KIz^)g3cyTtM z_&()A+hUYMni_G%Ss@n=!+OloskcL{ zt;rqW2=Ky5g#8E26M3LP&~=1xk`j3@?ySM*eW<-YTVbc981j?^{UT> zuYlV5!s-el%<$0Au~~S}D&@?(6XSIYR!4t)UIgI7j1X=#kbWyK8NCMW*R07t3Qy`+ z#Fu>hQ6DnJU=C~$b~VJ zxmpga*5D)d>hq?l_Z}GLVm>u1I=B5}dU~tnjdXk?n>4eWS%*8s?o^Z19Oa9$;G$B& zofYbUtl%VEBo#$pcc`Gu*>Sr)PDth`VKp_OG29zBPA zT0E!05#yVAzw)OtE24~I?c<{6^9-*fkd6`y6q>lF*YC=NeE>(A2@&7WS^ck{Z!zMJ zWXg<6PprCceEXImP6%#5dlXyRS>v9zplK$3gq)MU#YJERVNvmku4cV2ka13TTI{7Q zJSYWvP67DlR6HT`LqUdRAaUuY3tw7eowIZ>#&u(+dBO_*_{#~JFUOtg->hBWOZb;$lA^wCX|!_mx&ZR5u@9i)z+a{5I_Mb-Z)QDd$W3d|r4m5e6b4h3JvnV` zxo{{#gJY>S`*gLa5H1{e`l8?0yLJ6Qr^~Ri+E%Fk%^2@;OxpPZVJ^Q4)XM?rDVqky zE$zCbW%yFt)3eE8kMdhmn_5OxeFdlDQIQ3Qzzwi{phuK1kut_T6z=jRuog2n#^i>7 z>Qj-P7H|+jA?JD5Sep^MzMYdSLIx_P!l^kCoU1H(kASAFSp9pYYBseuuMOV5H*Ywa zOc_hi^TXxbC?VoFL*FCP?^#^njAaD2v`1FD&<+zlVpWuHeJL`w?@3G@;+)AtPXhK_ zKsz`*vo(Lm$p=)=q|)>3R;&+ZiEy3hovb7f&V7e-TXI?PUMAltzrR{fd%1#>L5nLE zWrcUI^)1UbXNVKJyoZ)umqwubo6iH>WOgD*F20iQH_mSEirHQ{``~fOsca)T%XH6@ zj_WI=itgsUw)HFCkx#?)k#^==guP)E-7ZAFP`N)|oxD6X<=J1vsg1gQsKP4Rc5 zJk~Agll(QcvhuPQuN;Tu=b+Rpd%>1Ty{X%=AruRl$`>o&)ga{@VKHoT4k2t!WQEMb~V8h@oyGcv`>& zIHqlWT^Cmo)jT@modF|kx8t{X)?oR3Qa~CGRTI}t&K7>cy>WNSLn1!pU`p&db?bK4 z;y|F^Ohg{>T4y-bhz}IJVIIPx%Jn3XBZ#`E0WUvwv+sR*FJ+4OuY=M?wCsNZwK|sK z2kOTA|9CkcMQ@B~+2fjmGZ!1ehY!C8UiQ3-M>kbQ6p1U5t;l?_D?|ANK3g{ZwBafu zq6W6m@o>=6RS`2TU)C#8(H%|MRGw5y3hbTjwbSZzJhMm=DkB1bNtS&t3`z)8X2lR=1 z!kf(_N%g+coYXpXvctxpgIuW#ix%CZ(xLK1YRJPYpV1ozvn@CW!phe*7kIQI>L`CI zZf=Kh2hKfH1j965G9;ttHi|9WxFZuj=^5G^u6U%46&cH^GZ>M^xt!A-T1WBgM=aTI zYBc4=>ygJ#Uz%isCAqtjJha>bJ&pk=Ba~GXkw`^l4LhW=mMT&UsVnulJ7yz}&>zxY`gG^IwYM0!IJ< diff --git a/docs/html/_static/file.png b/docs/html/_static/file.png deleted file mode 100644 index a858a410e4faa62ce324d814e4b816fff83a6fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( diff --git a/docs/html/_static/furo_colors.css b/docs/html/_static/furo_colors.css deleted file mode 100644 index fb31aacc..00000000 --- a/docs/html/_static/furo_colors.css +++ /dev/null @@ -1,89 +0,0 @@ -body { - --color-code-background: #f8f8f8; - --color-code-foreground: black; - --code-font-size: 1rem; - --font-stack: Ubuntu variable, Ubuntu, -apple-system, Segoe UI, Roboto, Oxygen, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; - --font-stack--monospace: Ubuntu Mono variable, Ubuntu Mono, Consolas, Monaco, Courier, monospace; - --color-foreground-primary: #111; - --color-foreground-secondary: var(--color-foreground-primary); - --color-foreground-muted: #333; - --color-background-secondary: #FFF; - --color-background-hover: #f2f2f2; - --color-brand-primary: #111; - --color-brand-content: #06C; - --color-api-background: var(--color-code-background); - --color-api-background--hover: var(--color-sidebar-item-background--hover); - --color-inline-code-background: rgba(0,0,0,.03); - --color-sidebar-link-text: #111; - --color-sidebar-item-background--current: #ebebeb; - --color-sidebar-item-background--hover: #f2f2f2; - --toc-font-size: var(--font-size--small); - --color-admonition-title-background--note: var(--color-background-primary); - --color-admonition-title-background--tip: var(--color-background-primary); - --color-admonition-title-background--important: var(--color-background-primary); - --color-admonition-title-background--caution: var(--color-background-primary); - --color-admonition-title--note: #24598F; - --color-admonition-title--tip: #24598F; - --color-admonition-title--important: #C7162B; - --color-admonition-title--caution: #F99B11; - --color-highlighted-background: #EBEBEB; - --color-link-underline: var(--color-link); - --color-link-underline--hover: var(--color-link); - --color-link-underline--visited: var(--color-link--visited); - --color-link-underline--visited--hover: var(--color-link--visited); - --color-version-popup: #772953; -} - -@media not print { - body[data-theme="dark"] { - --color-code-background: #202020; - --color-code-foreground: #d0d0d0; - --color-foreground-secondary: var(--color-foreground-primary); - --color-foreground-muted: #CDCDCD; - --color-background-secondary: var(--color-background-primary); - --color-background-hover: #666; - --color-brand-primary: #fff; - --color-brand-content: #69C; - --color-sidebar-link-text: #f7f7f7; - --color-sidebar-item-background--current: #666; - --color-sidebar-item-background--hover: #333; - --color-admonition-background: transparent; - --color-admonition-title-background--note: var(--color-background-primary); - --color-admonition-title-background--tip: var(--color-background-primary); - --color-admonition-title-background--important: var(--color-background-primary); - --color-admonition-title-background--caution: var(--color-background-primary); - --color-admonition-title--note: #24598F; - --color-admonition-title--tip: #24598F; - --color-admonition-title--important: #C7162B; - --color-admonition-title--caution: #F99B11; - --color-highlighted-background: #666; - --color-version-popup: #F29879; - } - @media (prefers-color-scheme: dark) { - body:not([data-theme="light"]) { - --color-code-background: #202020; - --color-code-foreground: #d0d0d0; - --color-foreground-secondary: var(--color-foreground-primary); - --color-foreground-muted: #CDCDCD; - --color-background-secondary: var(--color-background-primary); - --color-background-hover: #666; - --color-brand-primary: #fff; - --color-brand-content: #69C; - --color-sidebar-link-text: #f7f7f7; - --color-sidebar-item-background--current: #666; - --color-sidebar-item-background--hover: #333; - --color-admonition-background: transparent; - --color-admonition-title-background--note: var(--color-background-primary); - --color-admonition-title-background--tip: var(--color-background-primary); - --color-admonition-title-background--important: var(--color-background-primary); - --color-admonition-title-background--caution: var(--color-background-primary); - --color-admonition-title--note: #24598F; - --color-admonition-title--tip: #24598F; - --color-admonition-title--important: #C7162B; - --color-admonition-title--caution: #F99B11; - --color-highlighted-background: #666; - --color-link: #F9FCFF; - --color-version-popup: #F29879; - } - } -} diff --git a/docs/html/_static/github_issue_links.css b/docs/html/_static/github_issue_links.css deleted file mode 100644 index db166ed9..00000000 --- a/docs/html/_static/github_issue_links.css +++ /dev/null @@ -1,24 +0,0 @@ -.github-issue-link-container { - padding-right: 0.5rem; -} -.github-issue-link { - font-size: var(--font-size--small); - font-weight: bold; - background-color: #D6410D; - padding: 13px 23px; - text-decoration: none; -} -.github-issue-link:link { - color: #FFFFFF; -} -.github-issue-link:visited { - color: #FFFFFF -} -.muted-link.github-issue-link:hover { - color: #FFFFFF; - text-decoration: underline; -} -.github-issue-link:active { - color: #FFFFFF; - text-decoration: underline; -} diff --git a/docs/html/_static/github_issue_links.js b/docs/html/_static/github_issue_links.js deleted file mode 100644 index f0706038..00000000 --- a/docs/html/_static/github_issue_links.js +++ /dev/null @@ -1,34 +0,0 @@ -// if we already have an onload function, save that one -var prev_handler = window.onload; - -window.onload = function() { - // call the previous onload function - if (prev_handler) { - prev_handler(); - } - - const link = document.createElement("a"); - link.classList.add("muted-link"); - link.classList.add("github-issue-link"); - link.text = "Give feedback"; - link.href = ( - github_url - + "/issues/new?" - + "title=docs%3A+TYPE+YOUR+QUESTION+HERE" - + "&body=*Please describe the question or issue you're facing with " - + `"${document.title}"` - + ".*" - + "%0A%0A%0A%0A%0A" - + "---" - + "%0A" - + `*Reported+from%3A+${location.href}*` - ); - link.target = "_blank"; - - const div = document.createElement("div"); - div.classList.add("github-issue-link-container"); - div.append(link) - - const container = document.querySelector(".article-container > .content-icon-container"); - container.prepend(div); -}; diff --git a/docs/html/_static/header-nav.js b/docs/html/_static/header-nav.js deleted file mode 100644 index 3608576e..00000000 --- a/docs/html/_static/header-nav.js +++ /dev/null @@ -1,10 +0,0 @@ -$(document).ready(function() { - $(document).on("click", function () { - $(".more-links-dropdown").hide(); - }); - - $('.nav-more-links').click(function(event) { - $('.more-links-dropdown').toggle(); - event.stopPropagation(); - }); -}) diff --git a/docs/html/_static/header.css b/docs/html/_static/header.css deleted file mode 100644 index 0b944090..00000000 --- a/docs/html/_static/header.css +++ /dev/null @@ -1,167 +0,0 @@ -.p-navigation { - border-bottom: 1px solid var(--color-sidebar-background-border); -} - -.p-navigation__nav { - background: #333333; - display: flex; -} - -.p-logo { - display: flex !important; - padding-top: 0 !important; - text-decoration: none; -} - -.p-logo-image { - height: 44px; - padding-right: 10px; -} - -.p-logo-text { - margin-top: 18px; - color: white; - text-decoration: none; -} - -ul.p-navigation__links { - display: flex; - list-style: none; - margin-left: 0; - margin-top: auto; - margin-bottom: auto; - max-width: 800px; - width: 100%; -} - -ul.p-navigation__links li { - margin: 0 auto; - text-align: center; - width: 100%; -} - -ul.p-navigation__links li a { - background-color: rgba(0, 0, 0, 0); - border: none; - border-radius: 0; - color: var(--color-sidebar-link-text); - display: block; - font-weight: 400; - line-height: 1.5rem; - margin: 0; - overflow: hidden; - padding: 1rem 0; - position: relative; - text-align: left; - text-overflow: ellipsis; - transition-duration: .1s; - transition-property: background-color, color, opacity; - transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); - white-space: nowrap; - width: 100%; -} - -ul.p-navigation__links .p-navigation__link { - color: #ffffff; - font-weight: 300; - text-align: center; - text-decoration: none; -} - -ul.p-navigation__links .p-navigation__link:hover { - background-color: #2b2b2b; -} - -ul.p-navigation__links .p-dropdown__link:hover { - background-color: var(--color-sidebar-item-background--hover); -} - -ul.p-navigation__links .p-navigation__sub-link { - background: var(--color-background-primary); - padding: .5rem 0 .5rem .5rem; - font-weight: 300; -} - -ul.p-navigation__links .more-links-dropdown li a { - border-left: 1px solid var(--color-sidebar-background-border); - border-right: 1px solid var(--color-sidebar-background-border); -} - -ul.p-navigation__links .more-links-dropdown li:first-child a { - border-top: 1px solid var(--color-sidebar-background-border); -} - -ul.p-navigation__links .more-links-dropdown li:last-child a { - border-bottom: 1px solid var(--color-sidebar-background-border); -} - -ul.p-navigation__links .p-navigation__logo { - padding: 0.5rem; -} - -ul.p-navigation__links .p-navigation__logo img { - width: 40px; -} - -ul.more-links-dropdown { - display: none; - overflow-x: visible; - height: 0; - z-index: 55; - padding: 0; - position: relative; - list-style: none; - margin-bottom: 0; - margin-top: 0; -} - -.nav-more-links::after { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath fill='%23111' d='M8.187 11.748l6.187-6.187-1.06-1.061-5.127 5.127L3.061 4.5 2 5.561z'/%3E%3C/svg%3E"); - background-position: center; - background-repeat: no-repeat; - background-size: contain; - content: ""; - display: block; - filter: invert(100%); - height: 1rem; - pointer-events: none; - position: absolute; - right: 1rem; - text-indent: calc(100% + 10rem); - top: calc(1rem + 0.25rem); - width: 1rem; -} - -.nav-ubuntu-com { - display: none; -} - -@media only screen and (min-width: 480px) { - ul.p-navigation__links li { - width: 100%; - } - - .nav-ubuntu-com { - display: inherit; - } -} - -@media only screen and (max-width: 800px) { - .nav-more-links { - margin-left: auto !important; - padding-right: 2rem !important; - width: 8rem !important; - } -} - -@media only screen and (min-width: 800px) { - ul.p-navigation__links li { - width: 100% !important; - } -} - -@media only screen and (min-width: 1310px) { - ul.p-navigation__links { - margin-left: calc(50% - 41em); - } -} diff --git a/docs/html/_static/jquery.js b/docs/html/_static/jquery.js deleted file mode 100644 index c4c6022f..00000000 --- a/docs/html/_static/jquery.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 00 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - diff --git a/docs/html/_static/minus.png b/docs/html/_static/minus.png deleted file mode 100644 index d96755fdaf8bb2214971e0db9c1fd3077d7c419d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK diff --git a/docs/html/_static/plus.png b/docs/html/_static/plus.png deleted file mode 100644 index 7107cec93a979b9a5f64843235a16651d563ce2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2 m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz diff --git a/docs/html/_static/project_specific.css b/docs/html/_static/project_specific.css deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/html/_static/pygments.css b/docs/html/_static/pygments.css deleted file mode 100644 index f71bfbfc..00000000 --- a/docs/html/_static/pygments.css +++ /dev/null @@ -1,258 +0,0 @@ -.highlight pre { line-height: 125%; } -.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -.highlight .hll { background-color: #ffffcc } -.highlight { background: #f8f8f8; } -.highlight .c { color: #8F5902; font-style: italic } /* Comment */ -.highlight .err { color: #A40000; border: 1px solid #EF2929 } /* Error */ -.highlight .g { color: #000 } /* Generic */ -.highlight .k { color: #204A87; font-weight: bold } /* Keyword */ -.highlight .l { color: #000 } /* Literal */ -.highlight .n { color: #000 } /* Name */ -.highlight .o { color: #CE5C00; font-weight: bold } /* Operator */ -.highlight .x { color: #000 } /* Other */ -.highlight .p { color: #000; font-weight: bold } /* Punctuation */ -.highlight .ch { color: #8F5902; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #8F5902; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #8F5902; font-style: italic } /* Comment.Preproc */ -.highlight .cpf { color: #8F5902; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #8F5902; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #8F5902; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #A40000 } /* Generic.Deleted */ -.highlight .ge { color: #000; font-style: italic } /* Generic.Emph */ -.highlight .ges { color: #000; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -.highlight .gr { color: #EF2929 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #000; font-style: italic } /* Generic.Output */ -.highlight .gp { color: #8F5902 } /* Generic.Prompt */ -.highlight .gs { color: #000; font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #A40000; font-weight: bold } /* Generic.Traceback */ -.highlight .kc { color: #204A87; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #204A87; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #204A87; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #204A87; font-weight: bold } /* Keyword.Pseudo */ -.highlight .kr { color: #204A87; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #204A87; font-weight: bold } /* Keyword.Type */ -.highlight .ld { color: #000 } /* Literal.Date */ -.highlight .m { color: #0000CF; font-weight: bold } /* Literal.Number */ -.highlight .s { color: #4E9A06 } /* Literal.String */ -.highlight .na { color: #C4A000 } /* Name.Attribute */ -.highlight .nb { color: #204A87 } /* Name.Builtin */ -.highlight .nc { color: #000 } /* Name.Class */ -.highlight .no { color: #000 } /* Name.Constant */ -.highlight .nd { color: #5C35CC; font-weight: bold } /* Name.Decorator */ -.highlight .ni { color: #CE5C00 } /* Name.Entity */ -.highlight .ne { color: #C00; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #000 } /* Name.Function */ -.highlight .nl { color: #F57900 } /* Name.Label */ -.highlight .nn { color: #000 } /* Name.Namespace */ -.highlight .nx { color: #000 } /* Name.Other */ -.highlight .py { color: #000 } /* Name.Property */ -.highlight .nt { color: #204A87; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #000 } /* Name.Variable */ -.highlight .ow { color: #204A87; font-weight: bold } /* Operator.Word */ -.highlight .pm { color: #000; font-weight: bold } /* Punctuation.Marker */ -.highlight .w { color: #F8F8F8 } /* Text.Whitespace */ -.highlight .mb { color: #0000CF; font-weight: bold } /* Literal.Number.Bin */ -.highlight .mf { color: #0000CF; font-weight: bold } /* Literal.Number.Float */ -.highlight .mh { color: #0000CF; font-weight: bold } /* Literal.Number.Hex */ -.highlight .mi { color: #0000CF; font-weight: bold } /* Literal.Number.Integer */ -.highlight .mo { color: #0000CF; font-weight: bold } /* Literal.Number.Oct */ -.highlight .sa { color: #4E9A06 } /* Literal.String.Affix */ -.highlight .sb { color: #4E9A06 } /* Literal.String.Backtick */ -.highlight .sc { color: #4E9A06 } /* Literal.String.Char */ -.highlight .dl { color: #4E9A06 } /* Literal.String.Delimiter */ -.highlight .sd { color: #8F5902; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4E9A06 } /* Literal.String.Double */ -.highlight .se { color: #4E9A06 } /* Literal.String.Escape */ -.highlight .sh { color: #4E9A06 } /* Literal.String.Heredoc */ -.highlight .si { color: #4E9A06 } /* Literal.String.Interpol */ -.highlight .sx { color: #4E9A06 } /* Literal.String.Other */ -.highlight .sr { color: #4E9A06 } /* Literal.String.Regex */ -.highlight .s1 { color: #4E9A06 } /* Literal.String.Single */ -.highlight .ss { color: #4E9A06 } /* Literal.String.Symbol */ -.highlight .bp { color: #3465A4 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #000 } /* Name.Function.Magic */ -.highlight .vc { color: #000 } /* Name.Variable.Class */ -.highlight .vg { color: #000 } /* Name.Variable.Global */ -.highlight .vi { color: #000 } /* Name.Variable.Instance */ -.highlight .vm { color: #000 } /* Name.Variable.Magic */ -.highlight .il { color: #0000CF; font-weight: bold } /* Literal.Number.Integer.Long */ -@media not print { -body[data-theme="dark"] .highlight pre { line-height: 125%; } -body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } -body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } -body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -body[data-theme="dark"] .highlight .hll { background-color: #404040 } -body[data-theme="dark"] .highlight { background: #202020; color: #D0D0D0 } -body[data-theme="dark"] .highlight .c { color: #ABABAB; font-style: italic } /* Comment */ -body[data-theme="dark"] .highlight .err { color: #A61717; background-color: #E3D2D2 } /* Error */ -body[data-theme="dark"] .highlight .esc { color: #D0D0D0 } /* Escape */ -body[data-theme="dark"] .highlight .g { color: #D0D0D0 } /* Generic */ -body[data-theme="dark"] .highlight .k { color: #6EBF26; font-weight: bold } /* Keyword */ -body[data-theme="dark"] .highlight .l { color: #D0D0D0 } /* Literal */ -body[data-theme="dark"] .highlight .n { color: #D0D0D0 } /* Name */ -body[data-theme="dark"] .highlight .o { color: #D0D0D0 } /* Operator */ -body[data-theme="dark"] .highlight .x { color: #D0D0D0 } /* Other */ -body[data-theme="dark"] .highlight .p { color: #D0D0D0 } /* Punctuation */ -body[data-theme="dark"] .highlight .ch { color: #ABABAB; font-style: italic } /* Comment.Hashbang */ -body[data-theme="dark"] .highlight .cm { color: #ABABAB; font-style: italic } /* Comment.Multiline */ -body[data-theme="dark"] .highlight .cp { color: #FF3A3A; font-weight: bold } /* Comment.Preproc */ -body[data-theme="dark"] .highlight .cpf { color: #ABABAB; font-style: italic } /* Comment.PreprocFile */ -body[data-theme="dark"] .highlight .c1 { color: #ABABAB; font-style: italic } /* Comment.Single */ -body[data-theme="dark"] .highlight .cs { color: #E50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ -body[data-theme="dark"] .highlight .gd { color: #FF3A3A } /* Generic.Deleted */ -body[data-theme="dark"] .highlight .ge { color: #D0D0D0; font-style: italic } /* Generic.Emph */ -body[data-theme="dark"] .highlight .ges { color: #D0D0D0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -body[data-theme="dark"] .highlight .gr { color: #FF3A3A } /* Generic.Error */ -body[data-theme="dark"] .highlight .gh { color: #FFF; font-weight: bold } /* Generic.Heading */ -body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */ -body[data-theme="dark"] .highlight .go { color: #CCC } /* Generic.Output */ -body[data-theme="dark"] .highlight .gp { color: #AAA } /* Generic.Prompt */ -body[data-theme="dark"] .highlight .gs { color: #D0D0D0; font-weight: bold } /* Generic.Strong */ -body[data-theme="dark"] .highlight .gu { color: #FFF; text-decoration: underline } /* Generic.Subheading */ -body[data-theme="dark"] .highlight .gt { color: #FF3A3A } /* Generic.Traceback */ -body[data-theme="dark"] .highlight .kc { color: #6EBF26; font-weight: bold } /* Keyword.Constant */ -body[data-theme="dark"] .highlight .kd { color: #6EBF26; font-weight: bold } /* Keyword.Declaration */ -body[data-theme="dark"] .highlight .kn { color: #6EBF26; font-weight: bold } /* Keyword.Namespace */ -body[data-theme="dark"] .highlight .kp { color: #6EBF26 } /* Keyword.Pseudo */ -body[data-theme="dark"] .highlight .kr { color: #6EBF26; font-weight: bold } /* Keyword.Reserved */ -body[data-theme="dark"] .highlight .kt { color: #6EBF26; font-weight: bold } /* Keyword.Type */ -body[data-theme="dark"] .highlight .ld { color: #D0D0D0 } /* Literal.Date */ -body[data-theme="dark"] .highlight .m { color: #51B2FD } /* Literal.Number */ -body[data-theme="dark"] .highlight .s { color: #ED9D13 } /* Literal.String */ -body[data-theme="dark"] .highlight .na { color: #BBB } /* Name.Attribute */ -body[data-theme="dark"] .highlight .nb { color: #2FBCCD } /* Name.Builtin */ -body[data-theme="dark"] .highlight .nc { color: #71ADFF; text-decoration: underline } /* Name.Class */ -body[data-theme="dark"] .highlight .no { color: #40FFFF } /* Name.Constant */ -body[data-theme="dark"] .highlight .nd { color: #FFA500 } /* Name.Decorator */ -body[data-theme="dark"] .highlight .ni { color: #D0D0D0 } /* Name.Entity */ -body[data-theme="dark"] .highlight .ne { color: #BBB } /* Name.Exception */ -body[data-theme="dark"] .highlight .nf { color: #71ADFF } /* Name.Function */ -body[data-theme="dark"] .highlight .nl { color: #D0D0D0 } /* Name.Label */ -body[data-theme="dark"] .highlight .nn { color: #71ADFF; text-decoration: underline } /* Name.Namespace */ -body[data-theme="dark"] .highlight .nx { color: #D0D0D0 } /* Name.Other */ -body[data-theme="dark"] .highlight .py { color: #D0D0D0 } /* Name.Property */ -body[data-theme="dark"] .highlight .nt { color: #6EBF26; font-weight: bold } /* Name.Tag */ -body[data-theme="dark"] .highlight .nv { color: #40FFFF } /* Name.Variable */ -body[data-theme="dark"] .highlight .ow { color: #6EBF26; font-weight: bold } /* Operator.Word */ -body[data-theme="dark"] .highlight .pm { color: #D0D0D0 } /* Punctuation.Marker */ -body[data-theme="dark"] .highlight .w { color: #666 } /* Text.Whitespace */ -body[data-theme="dark"] .highlight .mb { color: #51B2FD } /* Literal.Number.Bin */ -body[data-theme="dark"] .highlight .mf { color: #51B2FD } /* Literal.Number.Float */ -body[data-theme="dark"] .highlight .mh { color: #51B2FD } /* Literal.Number.Hex */ -body[data-theme="dark"] .highlight .mi { color: #51B2FD } /* Literal.Number.Integer */ -body[data-theme="dark"] .highlight .mo { color: #51B2FD } /* Literal.Number.Oct */ -body[data-theme="dark"] .highlight .sa { color: #ED9D13 } /* Literal.String.Affix */ -body[data-theme="dark"] .highlight .sb { color: #ED9D13 } /* Literal.String.Backtick */ -body[data-theme="dark"] .highlight .sc { color: #ED9D13 } /* Literal.String.Char */ -body[data-theme="dark"] .highlight .dl { color: #ED9D13 } /* Literal.String.Delimiter */ -body[data-theme="dark"] .highlight .sd { color: #ED9D13 } /* Literal.String.Doc */ -body[data-theme="dark"] .highlight .s2 { color: #ED9D13 } /* Literal.String.Double */ -body[data-theme="dark"] .highlight .se { color: #ED9D13 } /* Literal.String.Escape */ -body[data-theme="dark"] .highlight .sh { color: #ED9D13 } /* Literal.String.Heredoc */ -body[data-theme="dark"] .highlight .si { color: #ED9D13 } /* Literal.String.Interpol */ -body[data-theme="dark"] .highlight .sx { color: #FFA500 } /* Literal.String.Other */ -body[data-theme="dark"] .highlight .sr { color: #ED9D13 } /* Literal.String.Regex */ -body[data-theme="dark"] .highlight .s1 { color: #ED9D13 } /* Literal.String.Single */ -body[data-theme="dark"] .highlight .ss { color: #ED9D13 } /* Literal.String.Symbol */ -body[data-theme="dark"] .highlight .bp { color: #2FBCCD } /* Name.Builtin.Pseudo */ -body[data-theme="dark"] .highlight .fm { color: #71ADFF } /* Name.Function.Magic */ -body[data-theme="dark"] .highlight .vc { color: #40FFFF } /* Name.Variable.Class */ -body[data-theme="dark"] .highlight .vg { color: #40FFFF } /* Name.Variable.Global */ -body[data-theme="dark"] .highlight .vi { color: #40FFFF } /* Name.Variable.Instance */ -body[data-theme="dark"] .highlight .vm { color: #40FFFF } /* Name.Variable.Magic */ -body[data-theme="dark"] .highlight .il { color: #51B2FD } /* Literal.Number.Integer.Long */ -@media (prefers-color-scheme: dark) { -body:not([data-theme="light"]) .highlight pre { line-height: 125%; } -body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -body:not([data-theme="light"]) .highlight .hll { background-color: #404040 } -body:not([data-theme="light"]) .highlight { background: #202020; color: #D0D0D0 } -body:not([data-theme="light"]) .highlight .c { color: #ABABAB; font-style: italic } /* Comment */ -body:not([data-theme="light"]) .highlight .err { color: #A61717; background-color: #E3D2D2 } /* Error */ -body:not([data-theme="light"]) .highlight .esc { color: #D0D0D0 } /* Escape */ -body:not([data-theme="light"]) .highlight .g { color: #D0D0D0 } /* Generic */ -body:not([data-theme="light"]) .highlight .k { color: #6EBF26; font-weight: bold } /* Keyword */ -body:not([data-theme="light"]) .highlight .l { color: #D0D0D0 } /* Literal */ -body:not([data-theme="light"]) .highlight .n { color: #D0D0D0 } /* Name */ -body:not([data-theme="light"]) .highlight .o { color: #D0D0D0 } /* Operator */ -body:not([data-theme="light"]) .highlight .x { color: #D0D0D0 } /* Other */ -body:not([data-theme="light"]) .highlight .p { color: #D0D0D0 } /* Punctuation */ -body:not([data-theme="light"]) .highlight .ch { color: #ABABAB; font-style: italic } /* Comment.Hashbang */ -body:not([data-theme="light"]) .highlight .cm { color: #ABABAB; font-style: italic } /* Comment.Multiline */ -body:not([data-theme="light"]) .highlight .cp { color: #FF3A3A; font-weight: bold } /* Comment.Preproc */ -body:not([data-theme="light"]) .highlight .cpf { color: #ABABAB; font-style: italic } /* Comment.PreprocFile */ -body:not([data-theme="light"]) .highlight .c1 { color: #ABABAB; font-style: italic } /* Comment.Single */ -body:not([data-theme="light"]) .highlight .cs { color: #E50808; font-weight: bold; background-color: #520000 } /* Comment.Special */ -body:not([data-theme="light"]) .highlight .gd { color: #FF3A3A } /* Generic.Deleted */ -body:not([data-theme="light"]) .highlight .ge { color: #D0D0D0; font-style: italic } /* Generic.Emph */ -body:not([data-theme="light"]) .highlight .ges { color: #D0D0D0; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -body:not([data-theme="light"]) .highlight .gr { color: #FF3A3A } /* Generic.Error */ -body:not([data-theme="light"]) .highlight .gh { color: #FFF; font-weight: bold } /* Generic.Heading */ -body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */ -body:not([data-theme="light"]) .highlight .go { color: #CCC } /* Generic.Output */ -body:not([data-theme="light"]) .highlight .gp { color: #AAA } /* Generic.Prompt */ -body:not([data-theme="light"]) .highlight .gs { color: #D0D0D0; font-weight: bold } /* Generic.Strong */ -body:not([data-theme="light"]) .highlight .gu { color: #FFF; text-decoration: underline } /* Generic.Subheading */ -body:not([data-theme="light"]) .highlight .gt { color: #FF3A3A } /* Generic.Traceback */ -body:not([data-theme="light"]) .highlight .kc { color: #6EBF26; font-weight: bold } /* Keyword.Constant */ -body:not([data-theme="light"]) .highlight .kd { color: #6EBF26; font-weight: bold } /* Keyword.Declaration */ -body:not([data-theme="light"]) .highlight .kn { color: #6EBF26; font-weight: bold } /* Keyword.Namespace */ -body:not([data-theme="light"]) .highlight .kp { color: #6EBF26 } /* Keyword.Pseudo */ -body:not([data-theme="light"]) .highlight .kr { color: #6EBF26; font-weight: bold } /* Keyword.Reserved */ -body:not([data-theme="light"]) .highlight .kt { color: #6EBF26; font-weight: bold } /* Keyword.Type */ -body:not([data-theme="light"]) .highlight .ld { color: #D0D0D0 } /* Literal.Date */ -body:not([data-theme="light"]) .highlight .m { color: #51B2FD } /* Literal.Number */ -body:not([data-theme="light"]) .highlight .s { color: #ED9D13 } /* Literal.String */ -body:not([data-theme="light"]) .highlight .na { color: #BBB } /* Name.Attribute */ -body:not([data-theme="light"]) .highlight .nb { color: #2FBCCD } /* Name.Builtin */ -body:not([data-theme="light"]) .highlight .nc { color: #71ADFF; text-decoration: underline } /* Name.Class */ -body:not([data-theme="light"]) .highlight .no { color: #40FFFF } /* Name.Constant */ -body:not([data-theme="light"]) .highlight .nd { color: #FFA500 } /* Name.Decorator */ -body:not([data-theme="light"]) .highlight .ni { color: #D0D0D0 } /* Name.Entity */ -body:not([data-theme="light"]) .highlight .ne { color: #BBB } /* Name.Exception */ -body:not([data-theme="light"]) .highlight .nf { color: #71ADFF } /* Name.Function */ -body:not([data-theme="light"]) .highlight .nl { color: #D0D0D0 } /* Name.Label */ -body:not([data-theme="light"]) .highlight .nn { color: #71ADFF; text-decoration: underline } /* Name.Namespace */ -body:not([data-theme="light"]) .highlight .nx { color: #D0D0D0 } /* Name.Other */ -body:not([data-theme="light"]) .highlight .py { color: #D0D0D0 } /* Name.Property */ -body:not([data-theme="light"]) .highlight .nt { color: #6EBF26; font-weight: bold } /* Name.Tag */ -body:not([data-theme="light"]) .highlight .nv { color: #40FFFF } /* Name.Variable */ -body:not([data-theme="light"]) .highlight .ow { color: #6EBF26; font-weight: bold } /* Operator.Word */ -body:not([data-theme="light"]) .highlight .pm { color: #D0D0D0 } /* Punctuation.Marker */ -body:not([data-theme="light"]) .highlight .w { color: #666 } /* Text.Whitespace */ -body:not([data-theme="light"]) .highlight .mb { color: #51B2FD } /* Literal.Number.Bin */ -body:not([data-theme="light"]) .highlight .mf { color: #51B2FD } /* Literal.Number.Float */ -body:not([data-theme="light"]) .highlight .mh { color: #51B2FD } /* Literal.Number.Hex */ -body:not([data-theme="light"]) .highlight .mi { color: #51B2FD } /* Literal.Number.Integer */ -body:not([data-theme="light"]) .highlight .mo { color: #51B2FD } /* Literal.Number.Oct */ -body:not([data-theme="light"]) .highlight .sa { color: #ED9D13 } /* Literal.String.Affix */ -body:not([data-theme="light"]) .highlight .sb { color: #ED9D13 } /* Literal.String.Backtick */ -body:not([data-theme="light"]) .highlight .sc { color: #ED9D13 } /* Literal.String.Char */ -body:not([data-theme="light"]) .highlight .dl { color: #ED9D13 } /* Literal.String.Delimiter */ -body:not([data-theme="light"]) .highlight .sd { color: #ED9D13 } /* Literal.String.Doc */ -body:not([data-theme="light"]) .highlight .s2 { color: #ED9D13 } /* Literal.String.Double */ -body:not([data-theme="light"]) .highlight .se { color: #ED9D13 } /* Literal.String.Escape */ -body:not([data-theme="light"]) .highlight .sh { color: #ED9D13 } /* Literal.String.Heredoc */ -body:not([data-theme="light"]) .highlight .si { color: #ED9D13 } /* Literal.String.Interpol */ -body:not([data-theme="light"]) .highlight .sx { color: #FFA500 } /* Literal.String.Other */ -body:not([data-theme="light"]) .highlight .sr { color: #ED9D13 } /* Literal.String.Regex */ -body:not([data-theme="light"]) .highlight .s1 { color: #ED9D13 } /* Literal.String.Single */ -body:not([data-theme="light"]) .highlight .ss { color: #ED9D13 } /* Literal.String.Symbol */ -body:not([data-theme="light"]) .highlight .bp { color: #2FBCCD } /* Name.Builtin.Pseudo */ -body:not([data-theme="light"]) .highlight .fm { color: #71ADFF } /* Name.Function.Magic */ -body:not([data-theme="light"]) .highlight .vc { color: #40FFFF } /* Name.Variable.Class */ -body:not([data-theme="light"]) .highlight .vg { color: #40FFFF } /* Name.Variable.Global */ -body:not([data-theme="light"]) .highlight .vi { color: #40FFFF } /* Name.Variable.Instance */ -body:not([data-theme="light"]) .highlight .vm { color: #40FFFF } /* Name.Variable.Magic */ -body:not([data-theme="light"]) .highlight .il { color: #51B2FD } /* Literal.Number.Integer.Long */ -} -} \ No newline at end of file diff --git a/docs/html/_static/related-links.css b/docs/html/_static/related-links.css deleted file mode 100644 index 86adbe24..00000000 --- a/docs/html/_static/related-links.css +++ /dev/null @@ -1,39 +0,0 @@ -/** Related links **/ - -.relatedlinks-title { - color: var(--color-toc-title-text); - font-size: var(--toc-title-font-size); - padding-left: var(--toc-spacing-horizontal); - text-transform: uppercase; -} - -.relatedlinks { - font-size: var(--font-size--small--2); - padding-left: calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal)); - padding-bottom: 1em; -} - -.relatedlinks ul { - list-style-type: none; - margin-bottom: 0; - margin-top: 0; - padding-left: var(--toc-item-spacing-horizontal); -} - -.relatedlinks li { - padding-top: var(--toc-item-spacing-vertical); -} - -.relatedlinks a { - overflow-wrap: anywhere; - text-decoration: none; -} - -.relatedlinks a::before { - content: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='12' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23607D8B' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M0 0h24v24H0z' stroke='none'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E"); - margin-right: 0.25rem; -} - -.relatedlinks-title-container { - padding-top: 2em; -} diff --git a/docs/html/_static/scripts/furo-extensions.js b/docs/html/_static/scripts/furo-extensions.js deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/html/_static/scripts/furo.js b/docs/html/_static/scripts/furo.js deleted file mode 100644 index 0abb2afa..00000000 --- a/docs/html/_static/scripts/furo.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see furo.js.LICENSE.txt */ -(()=>{var t={856:function(t,e,n){var o,r;r=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(t){"use strict";var e={navClass:"active",contentClass:"active",nested:!1,nestedClass:"active",offset:0,reflow:!1,events:!0},n=function(t,e,n){if(n.settings.events){var o=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e.dispatchEvent(o)}},o=function(t){var e=0;if(t.offsetParent)for(;t;)e+=t.offsetTop,t=t.offsetParent;return e>=0?e:0},r=function(t){t&&t.sort((function(t,e){return o(t.content)=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},l=function(t,e){var n=t[t.length-1];if(function(t,e){return!(!s()||!c(t.content,e,!0))}(n,e))return n;for(var o=t.length-1;o>=0;o--)if(c(t[o].content,e))return t[o]},a=function(t,e){if(e.nested&&t.parentNode){var n=t.parentNode.closest("li");n&&(n.classList.remove(e.nestedClass),a(n,e))}},i=function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.remove(e.navClass),t.content.classList.remove(e.contentClass),a(o,e),n("gumshoeDeactivate",o,{link:t.nav,content:t.content,settings:e}))}},u=function(t,e){if(e.nested){var n=t.parentNode.closest("li");n&&(n.classList.add(e.nestedClass),u(n,e))}};return function(o,c){var s,a,d,f,m,v={setup:function(){s=document.querySelectorAll(o),a=[],Array.prototype.forEach.call(s,(function(t){var e=document.getElementById(decodeURIComponent(t.hash.substr(1)));e&&a.push({nav:t,content:e})})),r(a)},detect:function(){var t=l(a,m);t?d&&t.content===d.content||(i(d,m),function(t,e){if(t){var o=t.nav.closest("li");o&&(o.classList.add(e.navClass),t.content.classList.add(e.contentClass),u(o,e),n("gumshoeActivate",o,{link:t.nav,content:t.content,settings:e}))}}(t,m),d=t):d&&(i(d,m),d=null)}},h=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame(v.detect)},g=function(e){f&&t.cancelAnimationFrame(f),f=t.requestAnimationFrame((function(){r(a),v.detect()}))};return v.destroy=function(){d&&i(d,m),t.removeEventListener("scroll",h,!1),m.reflow&&t.removeEventListener("resize",g,!1),a=null,s=null,d=null,f=null,m=null},m=function(){var t={};return Array.prototype.forEach.call(arguments,(function(e){for(var n in e){if(!e.hasOwnProperty(n))return;t[n]=e[n]}})),t}(e,c||{}),v.setup(),v.detect(),t.addEventListener("scroll",h,!1),m.reflow&&t.addEventListener("resize",g,!1),v}}(r)}.apply(e,[]),void 0===o||(t.exports=o)}},e={};function n(o){var r=e[o];if(void 0!==r)return r.exports;var c=e[o]={exports:{}};return t[o].call(c.exports,c,c.exports,n),c.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var o in e)n.o(e,o)&&!n.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";var t=n(856),e=n.n(t),o=null,r=null,c=document.documentElement.scrollTop;const s=64;function l(){const t=localStorage.getItem("theme")||"auto";var e;"light"!==(e=window.matchMedia("(prefers-color-scheme: dark)").matches?"auto"===t?"light":"light"==t?"dark":"auto":"auto"===t?"dark":"dark"==t?"light":"auto")&&"dark"!==e&&"auto"!==e&&(console.error(`Got invalid theme mode: ${e}. Resetting to auto.`),e="auto"),document.body.dataset.theme=e,localStorage.setItem("theme",e),console.log(`Changed to ${e} mode.`)}function a(){!function(){const t=document.getElementsByClassName("theme-toggle");Array.from(t).forEach((t=>{t.addEventListener("click",l)}))}(),function(){let t=0,e=!1;window.addEventListener("scroll",(function(n){t=window.scrollY,e||(window.requestAnimationFrame((function(){var n;(function(t){const e=Math.floor(r.getBoundingClientRect().top);console.log(`headerTop: ${e}`),0==e&&t!=e?r.classList.add("scrolled"):r.classList.remove("scrolled")})(n=t),function(t){tc&&document.documentElement.classList.remove("show-back-to-top"),c=t}(n),function(t){null!==o&&(0==t?o.scrollTo(0,0):Math.ceil(t)>=Math.floor(document.documentElement.scrollHeight-window.innerHeight)?o.scrollTo(0,o.scrollHeight):document.querySelector(".scroll-current"))}(n),e=!1})),e=!0)})),window.scroll()}(),null!==o&&new(e())(".toc-tree a",{reflow:!0,recursive:!0,navClass:"scroll-current",offset:()=>{let t=parseFloat(getComputedStyle(document.documentElement).fontSize);return r.getBoundingClientRect().height+2.5*t+1}})}document.addEventListener("DOMContentLoaded",(function(){document.body.parentNode.classList.remove("no-js"),r=document.querySelector("header"),o=document.querySelector(".toc-scroll"),a()}))})()})(); -//# sourceMappingURL=furo.js.map \ No newline at end of file diff --git a/docs/html/_static/scripts/furo.js.LICENSE.txt b/docs/html/_static/scripts/furo.js.LICENSE.txt deleted file mode 100644 index 1632189c..00000000 --- a/docs/html/_static/scripts/furo.js.LICENSE.txt +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * gumshoejs v5.1.2 (patched by @pradyunsg) - * A simple, framework-agnostic scrollspy script. - * (c) 2019 Chris Ferdinandi - * MIT License - * http://github.com/cferdinandi/gumshoe - */ diff --git a/docs/html/_static/scripts/furo.js.map b/docs/html/_static/scripts/furo.js.map deleted file mode 100644 index 80ea12b8..00000000 --- a/docs/html/_static/scripts/furo.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"scripts/furo.js","mappings":"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","sources":["webpack:///./src/furo/assets/scripts/gumshoe-patched.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./src/furo/assets/scripts/furo.js"],"sourcesContent":["/*!\n * gumshoejs v5.1.2 (patched by @pradyunsg)\n * A simple, framework-agnostic scrollspy script.\n * (c) 2019 Chris Ferdinandi\n * MIT License\n * http://github.com/cferdinandi/gumshoe\n */\n\n(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], function () {\n return factory(root);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(root);\n } else {\n root.Gumshoe = factory(root);\n }\n})(\n typeof global !== \"undefined\"\n ? global\n : typeof window !== \"undefined\"\n ? window\n : this,\n function (window) {\n \"use strict\";\n\n //\n // Defaults\n //\n\n var defaults = {\n // Active classes\n navClass: \"active\",\n contentClass: \"active\",\n\n // Nested navigation\n nested: false,\n nestedClass: \"active\",\n\n // Offset & reflow\n offset: 0,\n reflow: false,\n\n // Event support\n events: true,\n };\n\n //\n // Methods\n //\n\n /**\n * Merge two or more objects together.\n * @param {Object} objects The objects to merge together\n * @returns {Object} Merged values of defaults and options\n */\n var extend = function () {\n var merged = {};\n Array.prototype.forEach.call(arguments, function (obj) {\n for (var key in obj) {\n if (!obj.hasOwnProperty(key)) return;\n merged[key] = obj[key];\n }\n });\n return merged;\n };\n\n /**\n * Emit a custom event\n * @param {String} type The event type\n * @param {Node} elem The element to attach the event to\n * @param {Object} detail Any details to pass along with the event\n */\n var emitEvent = function (type, elem, detail) {\n // Make sure events are enabled\n if (!detail.settings.events) return;\n\n // Create a new event\n var event = new CustomEvent(type, {\n bubbles: true,\n cancelable: true,\n detail: detail,\n });\n\n // Dispatch the event\n elem.dispatchEvent(event);\n };\n\n /**\n * Get an element's distance from the top of the Document.\n * @param {Node} elem The element\n * @return {Number} Distance from the top in pixels\n */\n var getOffsetTop = function (elem) {\n var location = 0;\n if (elem.offsetParent) {\n while (elem) {\n location += elem.offsetTop;\n elem = elem.offsetParent;\n }\n }\n return location >= 0 ? location : 0;\n };\n\n /**\n * Sort content from first to last in the DOM\n * @param {Array} contents The content areas\n */\n var sortContents = function (contents) {\n if (contents) {\n contents.sort(function (item1, item2) {\n var offset1 = getOffsetTop(item1.content);\n var offset2 = getOffsetTop(item2.content);\n if (offset1 < offset2) return -1;\n return 1;\n });\n }\n };\n\n /**\n * Get the offset to use for calculating position\n * @param {Object} settings The settings for this instantiation\n * @return {Float} The number of pixels to offset the calculations\n */\n var getOffset = function (settings) {\n // if the offset is a function run it\n if (typeof settings.offset === \"function\") {\n return parseFloat(settings.offset());\n }\n\n // Otherwise, return it as-is\n return parseFloat(settings.offset);\n };\n\n /**\n * Get the document element's height\n * @private\n * @returns {Number}\n */\n var getDocumentHeight = function () {\n return Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight,\n document.body.offsetHeight,\n document.documentElement.offsetHeight,\n document.body.clientHeight,\n document.documentElement.clientHeight,\n );\n };\n\n /**\n * Determine if an element is in view\n * @param {Node} elem The element\n * @param {Object} settings The settings for this instantiation\n * @param {Boolean} bottom If true, check if element is above bottom of viewport instead\n * @return {Boolean} Returns true if element is in the viewport\n */\n var isInView = function (elem, settings, bottom) {\n var bounds = elem.getBoundingClientRect();\n var offset = getOffset(settings);\n if (bottom) {\n return (\n parseInt(bounds.bottom, 10) <\n (window.innerHeight || document.documentElement.clientHeight)\n );\n }\n return parseInt(bounds.top, 10) <= offset;\n };\n\n /**\n * Check if at the bottom of the viewport\n * @return {Boolean} If true, page is at the bottom of the viewport\n */\n var isAtBottom = function () {\n if (\n Math.ceil(window.innerHeight + window.pageYOffset) >=\n getDocumentHeight()\n )\n return true;\n return false;\n };\n\n /**\n * Check if the last item should be used (even if not at the top of the page)\n * @param {Object} item The last item\n * @param {Object} settings The settings for this instantiation\n * @return {Boolean} If true, use the last item\n */\n var useLastItem = function (item, settings) {\n if (isAtBottom() && isInView(item.content, settings, true)) return true;\n return false;\n };\n\n /**\n * Get the active content\n * @param {Array} contents The content areas\n * @param {Object} settings The settings for this instantiation\n * @return {Object} The content area and matching navigation link\n */\n var getActive = function (contents, settings) {\n var last = contents[contents.length - 1];\n if (useLastItem(last, settings)) return last;\n for (var i = contents.length - 1; i >= 0; i--) {\n if (isInView(contents[i].content, settings)) return contents[i];\n }\n };\n\n /**\n * Deactivate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var deactivateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested || !nav.parentNode) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Remove the active class\n li.classList.remove(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n deactivateNested(li, settings);\n };\n\n /**\n * Deactivate a nav and content area\n * @param {Object} items The nav item and content to deactivate\n * @param {Object} settings The settings for this instantiation\n */\n var deactivate = function (items, settings) {\n // Make sure there are items to deactivate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Remove the active class from the nav and content\n li.classList.remove(settings.navClass);\n items.content.classList.remove(settings.contentClass);\n\n // Deactivate any parent navs in a nested navigation\n deactivateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeDeactivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Activate parent navs in a nested navigation\n * @param {Node} nav The starting navigation element\n * @param {Object} settings The settings for this instantiation\n */\n var activateNested = function (nav, settings) {\n // If nesting isn't activated, bail\n if (!settings.nested) return;\n\n // Get the parent navigation\n var li = nav.parentNode.closest(\"li\");\n if (!li) return;\n\n // Add the active class\n li.classList.add(settings.nestedClass);\n\n // Apply recursively to any parent navigation elements\n activateNested(li, settings);\n };\n\n /**\n * Activate a nav and content area\n * @param {Object} items The nav item and content to activate\n * @param {Object} settings The settings for this instantiation\n */\n var activate = function (items, settings) {\n // Make sure there are items to activate\n if (!items) return;\n\n // Get the parent list item\n var li = items.nav.closest(\"li\");\n if (!li) return;\n\n // Add the active class to the nav and content\n li.classList.add(settings.navClass);\n items.content.classList.add(settings.contentClass);\n\n // Activate any parent navs in a nested navigation\n activateNested(li, settings);\n\n // Emit a custom event\n emitEvent(\"gumshoeActivate\", li, {\n link: items.nav,\n content: items.content,\n settings: settings,\n });\n };\n\n /**\n * Create the Constructor object\n * @param {String} selector The selector to use for navigation items\n * @param {Object} options User options and settings\n */\n var Constructor = function (selector, options) {\n //\n // Variables\n //\n\n var publicAPIs = {};\n var navItems, contents, current, timeout, settings;\n\n //\n // Methods\n //\n\n /**\n * Set variables from DOM elements\n */\n publicAPIs.setup = function () {\n // Get all nav items\n navItems = document.querySelectorAll(selector);\n\n // Create contents array\n contents = [];\n\n // Loop through each item, get it's matching content, and push to the array\n Array.prototype.forEach.call(navItems, function (item) {\n // Get the content for the nav item\n var content = document.getElementById(\n decodeURIComponent(item.hash.substr(1)),\n );\n if (!content) return;\n\n // Push to the contents array\n contents.push({\n nav: item,\n content: content,\n });\n });\n\n // Sort contents by the order they appear in the DOM\n sortContents(contents);\n };\n\n /**\n * Detect which content is currently active\n */\n publicAPIs.detect = function () {\n // Get the active content\n var active = getActive(contents, settings);\n\n // if there's no active content, deactivate and bail\n if (!active) {\n if (current) {\n deactivate(current, settings);\n current = null;\n }\n return;\n }\n\n // If the active content is the one currently active, do nothing\n if (current && active.content === current.content) return;\n\n // Deactivate the current content and activate the new content\n deactivate(current, settings);\n activate(active, settings);\n\n // Update the currently active content\n current = active;\n };\n\n /**\n * Detect the active content on scroll\n * Debounced for performance\n */\n var scrollHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(publicAPIs.detect);\n };\n\n /**\n * Update content sorting on resize\n * Debounced for performance\n */\n var resizeHandler = function (event) {\n // If there's a timer, cancel it\n if (timeout) {\n window.cancelAnimationFrame(timeout);\n }\n\n // Setup debounce callback\n timeout = window.requestAnimationFrame(function () {\n sortContents(contents);\n publicAPIs.detect();\n });\n };\n\n /**\n * Destroy the current instantiation\n */\n publicAPIs.destroy = function () {\n // Undo DOM changes\n if (current) {\n deactivate(current, settings);\n }\n\n // Remove event listeners\n window.removeEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.removeEventListener(\"resize\", resizeHandler, false);\n }\n\n // Reset variables\n contents = null;\n navItems = null;\n current = null;\n timeout = null;\n settings = null;\n };\n\n /**\n * Initialize the current instantiation\n */\n var init = function () {\n // Merge user options into defaults\n settings = extend(defaults, options || {});\n\n // Setup variables based on the current DOM\n publicAPIs.setup();\n\n // Find the currently active content\n publicAPIs.detect();\n\n // Setup event listeners\n window.addEventListener(\"scroll\", scrollHandler, false);\n if (settings.reflow) {\n window.addEventListener(\"resize\", resizeHandler, false);\n }\n };\n\n //\n // Initialize and return the public APIs\n //\n\n init();\n return publicAPIs;\n };\n\n //\n // Return the Constructor\n //\n\n return Constructor;\n },\n);\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","import Gumshoe from \"./gumshoe-patched.js\";\n\n////////////////////////////////////////////////////////////////////////////////\n// Scroll Handling\n////////////////////////////////////////////////////////////////////////////////\nvar tocScroll = null;\nvar header = null;\nvar lastScrollTop = document.documentElement.scrollTop;\nconst GO_TO_TOP_OFFSET = 64;\n\nfunction scrollHandlerForHeader(positionY) {\n const headerTop = Math.floor(header.getBoundingClientRect().top);\n\n console.log(`headerTop: ${headerTop}`);\n if (headerTop == 0 && positionY != headerTop) {\n header.classList.add(\"scrolled\");\n } else {\n header.classList.remove(\"scrolled\");\n }\n}\n\nfunction scrollHandlerForBackToTop(positionY) {\n if (positionY < GO_TO_TOP_OFFSET) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n } else {\n if (positionY < lastScrollTop) {\n document.documentElement.classList.add(\"show-back-to-top\");\n } else if (positionY > lastScrollTop) {\n document.documentElement.classList.remove(\"show-back-to-top\");\n }\n }\n lastScrollTop = positionY;\n}\n\nfunction scrollHandlerForTOC(positionY) {\n if (tocScroll === null) {\n return;\n }\n\n // top of page.\n if (positionY == 0) {\n tocScroll.scrollTo(0, 0);\n } else if (\n // bottom of page.\n Math.ceil(positionY) >=\n Math.floor(document.documentElement.scrollHeight - window.innerHeight)\n ) {\n tocScroll.scrollTo(0, tocScroll.scrollHeight);\n } else {\n // somewhere in the middle.\n const current = document.querySelector(\".scroll-current\");\n if (current == null) {\n return;\n }\n\n // https://github.com/pypa/pip/issues/9159 This breaks scroll behaviours.\n // // scroll the currently \"active\" heading in toc, into view.\n // const rect = current.getBoundingClientRect();\n // if (0 > rect.top) {\n // current.scrollIntoView(true); // the argument is \"alignTop\"\n // } else if (rect.bottom > window.innerHeight) {\n // current.scrollIntoView(false);\n // }\n }\n}\n\nfunction scrollHandler(positionY) {\n scrollHandlerForHeader(positionY);\n scrollHandlerForBackToTop(positionY);\n scrollHandlerForTOC(positionY);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Theme Toggle\n////////////////////////////////////////////////////////////////////////////////\nfunction setTheme(mode) {\n if (mode !== \"light\" && mode !== \"dark\" && mode !== \"auto\") {\n console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`);\n mode = \"auto\";\n }\n\n document.body.dataset.theme = mode;\n localStorage.setItem(\"theme\", mode);\n console.log(`Changed to ${mode} mode.`);\n}\n\nfunction cycleThemeOnce() {\n const currentTheme = localStorage.getItem(\"theme\") || \"auto\";\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\").matches;\n\n if (prefersDark) {\n // Auto (dark) -> Light -> Dark\n if (currentTheme === \"auto\") {\n setTheme(\"light\");\n } else if (currentTheme == \"light\") {\n setTheme(\"dark\");\n } else {\n setTheme(\"auto\");\n }\n } else {\n // Auto (light) -> Dark -> Light\n if (currentTheme === \"auto\") {\n setTheme(\"dark\");\n } else if (currentTheme == \"dark\") {\n setTheme(\"light\");\n } else {\n setTheme(\"auto\");\n }\n }\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Setup\n////////////////////////////////////////////////////////////////////////////////\nfunction setupScrollHandler() {\n // Taken from https://developer.mozilla.org/en-US/docs/Web/API/Document/scroll_event\n let last_known_scroll_position = 0;\n let ticking = false;\n\n window.addEventListener(\"scroll\", function (e) {\n last_known_scroll_position = window.scrollY;\n\n if (!ticking) {\n window.requestAnimationFrame(function () {\n scrollHandler(last_known_scroll_position);\n ticking = false;\n });\n\n ticking = true;\n }\n });\n window.scroll();\n}\n\nfunction setupScrollSpy() {\n if (tocScroll === null) {\n return;\n }\n\n // Scrollspy -- highlight table on contents, based on scroll\n new Gumshoe(\".toc-tree a\", {\n reflow: true,\n recursive: true,\n navClass: \"scroll-current\",\n offset: () => {\n let rem = parseFloat(getComputedStyle(document.documentElement).fontSize);\n return header.getBoundingClientRect().height + 2.5 * rem + 1;\n },\n });\n}\n\nfunction setupTheme() {\n // Attach event handlers for toggling themes\n const buttons = document.getElementsByClassName(\"theme-toggle\");\n Array.from(buttons).forEach((btn) => {\n btn.addEventListener(\"click\", cycleThemeOnce);\n });\n}\n\nfunction setup() {\n setupTheme();\n setupScrollHandler();\n setupScrollSpy();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Main entrypoint\n////////////////////////////////////////////////////////////////////////////////\nfunction main() {\n document.body.parentNode.classList.remove(\"no-js\");\n\n header = document.querySelector(\"header\");\n tocScroll = document.querySelector(\".toc-scroll\");\n\n setup();\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", main);\n"],"names":["root","g","window","this","defaults","navClass","contentClass","nested","nestedClass","offset","reflow","events","emitEvent","type","elem","detail","settings","event","CustomEvent","bubbles","cancelable","dispatchEvent","getOffsetTop","location","offsetParent","offsetTop","sortContents","contents","sort","item1","item2","content","isInView","bottom","bounds","getBoundingClientRect","parseFloat","getOffset","parseInt","innerHeight","document","documentElement","clientHeight","top","isAtBottom","Math","ceil","pageYOffset","max","body","scrollHeight","offsetHeight","getActive","last","length","item","useLastItem","i","deactivateNested","nav","parentNode","li","closest","classList","remove","deactivate","items","link","activateNested","add","selector","options","navItems","current","timeout","publicAPIs","querySelectorAll","Array","prototype","forEach","call","getElementById","decodeURIComponent","hash","substr","push","active","activate","scrollHandler","cancelAnimationFrame","requestAnimationFrame","detect","resizeHandler","destroy","removeEventListener","merged","arguments","obj","key","hasOwnProperty","extend","setup","addEventListener","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","globalThis","Function","e","prop","tocScroll","header","lastScrollTop","scrollTop","GO_TO_TOP_OFFSET","cycleThemeOnce","currentTheme","localStorage","getItem","mode","matchMedia","matches","console","error","dataset","theme","setItem","log","buttons","getElementsByClassName","from","btn","setupTheme","last_known_scroll_position","ticking","scrollY","positionY","headerTop","floor","scrollHandlerForHeader","scrollHandlerForBackToTop","scrollTo","querySelector","scrollHandlerForTOC","scroll","setupScrollHandler","recursive","rem","getComputedStyle","fontSize","height"],"sourceRoot":""} \ No newline at end of file diff --git a/docs/html/_static/searchtools.js b/docs/html/_static/searchtools.js deleted file mode 100644 index b08d58c9..00000000 --- a/docs/html/_static/searchtools.js +++ /dev/null @@ -1,620 +0,0 @@ -/* - * searchtools.js - * ~~~~~~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for the full-text search. - * - * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -/** - * Simple result scoring code. - */ -if (typeof Scorer === "undefined") { - var Scorer = { - // Implement the following function to further tweak the score for each result - // The function takes a result array [docname, title, anchor, descr, score, filename] - // and returns the new score. - /* - score: result => { - const [docname, title, anchor, descr, score, filename] = result - return score - }, - */ - - // query matches the full name of an object - objNameMatch: 11, - // or matches in the last dotted part of the object name - objPartialMatch: 6, - // Additive scores depending on the priority of the object - objPrio: { - 0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5, // used to be unimportantResults - }, - // Used when the priority is not in the mapping. - objPrioDefault: 0, - - // query found in title - title: 15, - partialTitle: 7, - // query found in terms - term: 5, - partialTerm: 2, - }; -} - -const _removeChildren = (element) => { - while (element && element.lastChild) element.removeChild(element.lastChild); -}; - -/** - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping - */ -const _escapeRegExp = (string) => - string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string - -const _displayItem = (item, searchTerms, highlightTerms) => { - const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; - const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; - const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; - const contentRoot = document.documentElement.dataset.content_root; - - const [docName, title, anchor, descr, score, _filename] = item; - - let listItem = document.createElement("li"); - let requestUrl; - let linkUrl; - if (docBuilder === "dirhtml") { - // dirhtml builder - let dirname = docName + "/"; - if (dirname.match(/\/index\/$/)) - dirname = dirname.substring(0, dirname.length - 6); - else if (dirname === "index/") dirname = ""; - requestUrl = contentRoot + dirname; - linkUrl = requestUrl; - } else { - // normal html builders - requestUrl = contentRoot + docName + docFileSuffix; - linkUrl = docName + docLinkSuffix; - } - let linkEl = listItem.appendChild(document.createElement("a")); - linkEl.href = linkUrl + anchor; - linkEl.dataset.score = score; - linkEl.innerHTML = title; - if (descr) { - listItem.appendChild(document.createElement("span")).innerHTML = - " (" + descr + ")"; - // highlight search terms in the description - if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js - highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); - } - else if (showSearchSummary) - fetch(requestUrl) - .then((responseData) => responseData.text()) - .then((data) => { - if (data) - listItem.appendChild( - Search.makeSearchSummary(data, searchTerms, anchor) - ); - // highlight search terms in the summary - if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js - highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); - }); - Search.output.appendChild(listItem); -}; -const _finishSearch = (resultCount) => { - Search.stopPulse(); - Search.title.innerText = _("Search Results"); - if (!resultCount) - Search.status.innerText = Documentation.gettext( - "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." - ); - else - Search.status.innerText = _( - "Search finished, found ${resultCount} page(s) matching the search query." - ).replace('${resultCount}', resultCount); -}; -const _displayNextItem = ( - results, - resultCount, - searchTerms, - highlightTerms, -) => { - // results left, load the summary and display it - // this is intended to be dynamic (don't sub resultsCount) - if (results.length) { - _displayItem(results.pop(), searchTerms, highlightTerms); - setTimeout( - () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), - 5 - ); - } - // search finished, update title and status message - else _finishSearch(resultCount); -}; -// Helper function used by query() to order search results. -// Each input is an array of [docname, title, anchor, descr, score, filename]. -// Order the results by score (in opposite order of appearance, since the -// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. -const _orderResultsByScoreThenName = (a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; -}; - -/** - * Default splitQuery function. Can be overridden in ``sphinx.search`` with a - * custom function per language. - * - * The regular expression works by splitting the string on consecutive characters - * that are not Unicode letters, numbers, underscores, or emoji characters. - * This is the same as ``\W+`` in Python, preserving the surrogate pair area. - */ -if (typeof splitQuery === "undefined") { - var splitQuery = (query) => query - .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) - .filter(term => term) // remove remaining empty strings -} - -/** - * Search Module - */ -const Search = { - _index: null, - _queued_query: null, - _pulse_status: -1, - - htmlToText: (htmlString, anchor) => { - const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - for (const removalQuery of [".headerlink", "script", "style"]) { - htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); - } - if (anchor) { - const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); - if (anchorContent) return anchorContent.textContent; - - console.warn( - `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` - ); - } - - // if anchor not specified or not found, fall back to main content - const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent) return docContent.textContent; - - console.warn( - "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." - ); - return ""; - }, - - init: () => { - const query = new URLSearchParams(window.location.search).get("q"); - document - .querySelectorAll('input[name="q"]') - .forEach((el) => (el.value = query)); - if (query) Search.performSearch(query); - }, - - loadIndex: (url) => - (document.body.appendChild(document.createElement("script")).src = url), - - setIndex: (index) => { - Search._index = index; - if (Search._queued_query !== null) { - const query = Search._queued_query; - Search._queued_query = null; - Search.query(query); - } - }, - - hasIndex: () => Search._index !== null, - - deferQuery: (query) => (Search._queued_query = query), - - stopPulse: () => (Search._pulse_status = -1), - - startPulse: () => { - if (Search._pulse_status >= 0) return; - - const pulse = () => { - Search._pulse_status = (Search._pulse_status + 1) % 4; - Search.dots.innerText = ".".repeat(Search._pulse_status); - if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); - }; - pulse(); - }, - - /** - * perform a search for something (or wait until index is loaded) - */ - performSearch: (query) => { - // create the required interface elements - const searchText = document.createElement("h2"); - searchText.textContent = _("Searching"); - const searchSummary = document.createElement("p"); - searchSummary.classList.add("search-summary"); - searchSummary.innerText = ""; - const searchList = document.createElement("ul"); - searchList.classList.add("search"); - - const out = document.getElementById("search-results"); - Search.title = out.appendChild(searchText); - Search.dots = Search.title.appendChild(document.createElement("span")); - Search.status = out.appendChild(searchSummary); - Search.output = out.appendChild(searchList); - - const searchProgress = document.getElementById("search-progress"); - // Some themes don't use the search progress node - if (searchProgress) { - searchProgress.innerText = _("Preparing search..."); - } - Search.startPulse(); - - // index already loaded, the browser was quick! - if (Search.hasIndex()) Search.query(query); - else Search.deferQuery(query); - }, - - _parseQuery: (query) => { - // stem the search terms and add them to the correct list - const stemmer = new Stemmer(); - const searchTerms = new Set(); - const excludedTerms = new Set(); - const highlightTerms = new Set(); - const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); - splitQuery(query.trim()).forEach((queryTerm) => { - const queryTermLower = queryTerm.toLowerCase(); - - // maybe skip this "word" - // stopwords array is from language_data.js - if ( - stopwords.indexOf(queryTermLower) !== -1 || - queryTerm.match(/^\d+$/) - ) - return; - - // stem the word - let word = stemmer.stemWord(queryTermLower); - // select the correct list - if (word[0] === "-") excludedTerms.add(word.substr(1)); - else { - searchTerms.add(word); - highlightTerms.add(queryTermLower); - } - }); - - if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js - localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) - } - - // console.debug("SEARCH: searching for:"); - // console.info("required: ", [...searchTerms]); - // console.info("excluded: ", [...excludedTerms]); - - return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; - }, - - /** - * execute search (requires search index to be loaded) - */ - _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - - // Collect multiple result groups to be sorted separately and then ordered. - // Each is an array of [docname, title, anchor, descr, score, filename]. - const normalResults = []; - const nonMainIndexResults = []; - - _removeChildren(document.getElementById("search-progress")); - - const queryLower = query.toLowerCase().trim(); - for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { - for (const [file, id] of foundTitles) { - const score = Math.round(Scorer.title * queryLower.length / title.length); - const boost = titles[file] === title ? 1 : 0; // add a boost for document titles - normalResults.push([ - docNames[file], - titles[file] !== title ? `${titles[file]} > ${title}` : title, - id !== null ? "#" + id : "", - null, - score + boost, - filenames[file], - ]); - } - } - } - - // search for explicit entries in index directives - for (const [entry, foundEntries] of Object.entries(indexEntries)) { - if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id, isMain] of foundEntries) { - const score = Math.round(100 * queryLower.length / entry.length); - const result = [ - docNames[file], - titles[file], - id ? "#" + id : "", - null, - score, - filenames[file], - ]; - if (isMain) { - normalResults.push(result); - } else { - nonMainIndexResults.push(result); - } - } - } - } - - // lookup as object - objectTerms.forEach((term) => - normalResults.push(...Search.performObjectSearch(term, objectTerms)) - ); - - // lookup as search terms in fulltext - normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); - - // let the scorer override scores with a custom scoring function - if (Scorer.score) { - normalResults.forEach((item) => (item[4] = Scorer.score(item))); - nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); - } - - // Sort each group of results by score and then alphabetically by name. - normalResults.sort(_orderResultsByScoreThenName); - nonMainIndexResults.sort(_orderResultsByScoreThenName); - - // Combine the result groups in (reverse) order. - // Non-main index entries are typically arbitrary cross-references, - // so display them after other results. - let results = [...nonMainIndexResults, ...normalResults]; - - // remove duplicate search results - // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept - let seen = new Set(); - results = results.reverse().reduce((acc, result) => { - let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); - if (!seen.has(resultStr)) { - acc.push(result); - seen.add(resultStr); - } - return acc; - }, []); - - return results.reverse(); - }, - - query: (query) => { - const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); - const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); - - // for debugging - //Search.lastresults = results.slice(); // a copy - // console.info("search results:", Search.lastresults); - - // print the results - _displayNextItem(results, results.length, searchTerms, highlightTerms); - }, - - /** - * search for object names - */ - performObjectSearch: (object, objectTerms) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const objects = Search._index.objects; - const objNames = Search._index.objnames; - const titles = Search._index.titles; - - const results = []; - - const objectSearchCallback = (prefix, match) => { - const name = match[4] - const fullname = (prefix ? prefix + "." : "") + name; - const fullnameLower = fullname.toLowerCase(); - if (fullnameLower.indexOf(object) < 0) return; - - let score = 0; - const parts = fullnameLower.split("."); - - // check for different match types: exact matches of full name or - // "last name" (i.e. last dotted part) - if (fullnameLower === object || parts.slice(-1)[0] === object) - score += Scorer.objNameMatch; - else if (parts.slice(-1)[0].indexOf(object) > -1) - score += Scorer.objPartialMatch; // matches in last name - - const objName = objNames[match[1]][2]; - const title = titles[match[0]]; - - // If more than one term searched for, we require other words to be - // found in the name/title/description - const otherTerms = new Set(objectTerms); - otherTerms.delete(object); - if (otherTerms.size > 0) { - const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); - if ( - [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) - ) - return; - } - - let anchor = match[3]; - if (anchor === "") anchor = fullname; - else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; - - const descr = objName + _(", in ") + title; - - // add custom score for some objects according to scorer - if (Scorer.objPrio.hasOwnProperty(match[2])) - score += Scorer.objPrio[match[2]]; - else score += Scorer.objPrioDefault; - - results.push([ - docNames[match[0]], - fullname, - "#" + anchor, - descr, - score, - filenames[match[0]], - ]); - }; - Object.keys(objects).forEach((prefix) => - objects[prefix].forEach((array) => - objectSearchCallback(prefix, array) - ) - ); - return results; - }, - - /** - * search for full-text terms in the index - */ - performTermsSearch: (searchTerms, excludedTerms) => { - // prepare search - const terms = Search._index.terms; - const titleTerms = Search._index.titleterms; - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - - const scoreMap = new Map(); - const fileMap = new Map(); - - // perform the search on the required terms - searchTerms.forEach((word) => { - const files = []; - const arr = [ - { files: terms[word], score: Scorer.term }, - { files: titleTerms[word], score: Scorer.title }, - ]; - // add support for partial matches - if (word.length > 2) { - const escapedWord = _escapeRegExp(word); - if (!terms.hasOwnProperty(word)) { - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord)) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - } - if (!titleTerms.hasOwnProperty(word)) { - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord)) - arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); - }); - } - } - - // no match but word was a required one - if (arr.every((record) => record.files === undefined)) return; - - // found search word in contents - arr.forEach((record) => { - if (record.files === undefined) return; - - let recordFiles = record.files; - if (recordFiles.length === undefined) recordFiles = [recordFiles]; - files.push(...recordFiles); - - // set score for the word in each file - recordFiles.forEach((file) => { - if (!scoreMap.has(file)) scoreMap.set(file, {}); - scoreMap.get(file)[word] = record.score; - }); - }); - - // create the mapping - files.forEach((file) => { - if (!fileMap.has(file)) fileMap.set(file, [word]); - else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); - }); - }); - - // now check if the files don't contain excluded terms - const results = []; - for (const [file, wordList] of fileMap) { - // check if all requirements are matched - - // as search terms with length < 3 are discarded - const filteredTermCount = [...searchTerms].filter( - (term) => term.length > 2 - ).length; - if ( - wordList.length !== searchTerms.size && - wordList.length !== filteredTermCount - ) - continue; - - // ensure that none of the excluded terms is in the search result - if ( - [...excludedTerms].some( - (term) => - terms[term] === file || - titleTerms[term] === file || - (terms[term] || []).includes(file) || - (titleTerms[term] || []).includes(file) - ) - ) - break; - - // select one (max) score for the file. - const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); - // add result to the result list - results.push([ - docNames[file], - titles[file], - "", - null, - score, - filenames[file], - ]); - } - return results; - }, - - /** - * helper function to return a node containing the - * search summary for a given text. keywords is a list - * of stemmed words. - */ - makeSearchSummary: (htmlText, keywords, anchor) => { - const text = Search.htmlToText(htmlText, anchor); - if (text === "") return null; - - const textLower = text.toLowerCase(); - const actualStartPosition = [...keywords] - .map((k) => textLower.indexOf(k.toLowerCase())) - .filter((i) => i > -1) - .slice(-1)[0]; - const startWithContext = Math.max(actualStartPosition - 120, 0); - - const top = startWithContext === 0 ? "" : "..."; - const tail = startWithContext + 240 < text.length ? "..." : ""; - - let summary = document.createElement("p"); - summary.classList.add("context"); - summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; - - return summary; - }, -}; - -_ready(Search.init); diff --git a/docs/html/_static/skeleton.css b/docs/html/_static/skeleton.css deleted file mode 100644 index 467c878c..00000000 --- a/docs/html/_static/skeleton.css +++ /dev/null @@ -1,296 +0,0 @@ -/* Some sane resets. */ -html { - height: 100%; -} - -body { - margin: 0; - min-height: 100%; -} - -/* All the flexbox magic! */ -body, -.sb-announcement, -.sb-content, -.sb-main, -.sb-container, -.sb-container__inner, -.sb-article-container, -.sb-footer-content, -.sb-header, -.sb-header-secondary, -.sb-footer { - display: flex; -} - -/* These order things vertically */ -body, -.sb-main, -.sb-article-container { - flex-direction: column; -} - -/* Put elements in the center */ -.sb-header, -.sb-header-secondary, -.sb-container, -.sb-content, -.sb-footer, -.sb-footer-content { - justify-content: center; -} -/* Put elements at the ends */ -.sb-article-container { - justify-content: space-between; -} - -/* These elements grow. */ -.sb-main, -.sb-content, -.sb-container, -article { - flex-grow: 1; -} - -/* Because padding making this wider is not fun */ -article { - box-sizing: border-box; -} - -/* The announcements element should never be wider than the page. */ -.sb-announcement { - max-width: 100%; -} - -.sb-sidebar-primary, -.sb-sidebar-secondary { - flex-shrink: 0; - width: 17rem; -} - -.sb-announcement__inner { - justify-content: center; - - box-sizing: border-box; - height: 3rem; - - overflow-x: auto; - white-space: nowrap; -} - -/* Sidebars, with checkbox-based toggle */ -.sb-sidebar-primary, -.sb-sidebar-secondary { - position: fixed; - height: 100%; - top: 0; -} - -.sb-sidebar-primary { - left: -17rem; - transition: left 250ms ease-in-out; -} -.sb-sidebar-secondary { - right: -17rem; - transition: right 250ms ease-in-out; -} - -.sb-sidebar-toggle { - display: none; -} -.sb-sidebar-overlay { - position: fixed; - top: 0; - width: 0; - height: 0; - - transition: width 0ms ease 250ms, height 0ms ease 250ms, opacity 250ms ease; - - opacity: 0; - background-color: rgba(0, 0, 0, 0.54); -} - -#sb-sidebar-toggle--primary:checked - ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--primary"], -#sb-sidebar-toggle--secondary:checked - ~ .sb-sidebar-overlay[for="sb-sidebar-toggle--secondary"] { - width: 100%; - height: 100%; - opacity: 1; - transition: width 0ms ease, height 0ms ease, opacity 250ms ease; -} - -#sb-sidebar-toggle--primary:checked ~ .sb-container .sb-sidebar-primary { - left: 0; -} -#sb-sidebar-toggle--secondary:checked ~ .sb-container .sb-sidebar-secondary { - right: 0; -} - -/* Full-width mode */ -.drop-secondary-sidebar-for-full-width-content - .hide-when-secondary-sidebar-shown { - display: none !important; -} -.drop-secondary-sidebar-for-full-width-content .sb-sidebar-secondary { - display: none !important; -} - -/* Mobile views */ -.sb-page-width { - width: 100%; -} - -.sb-article-container, -.sb-footer-content__inner, -.drop-secondary-sidebar-for-full-width-content .sb-article, -.drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 100vw; -} - -.sb-article, -.match-content-width { - padding: 0 1rem; - box-sizing: border-box; -} - -@media (min-width: 32rem) { - .sb-article, - .match-content-width { - padding: 0 2rem; - } -} - -/* Tablet views */ -@media (min-width: 42rem) { - .sb-article-container { - width: auto; - } - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 42rem; - } - .sb-article, - .match-content-width { - width: 42rem; - } -} -@media (min-width: 46rem) { - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 46rem; - } - .sb-article, - .match-content-width { - width: 46rem; - } -} -@media (min-width: 50rem) { - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 50rem; - } - .sb-article, - .match-content-width { - width: 50rem; - } -} - -/* Tablet views */ -@media (min-width: 59rem) { - .sb-sidebar-secondary { - position: static; - } - .hide-when-secondary-sidebar-shown { - display: none !important; - } - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 59rem; - } - .sb-article, - .match-content-width { - width: 42rem; - } -} -@media (min-width: 63rem) { - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 63rem; - } - .sb-article, - .match-content-width { - width: 46rem; - } -} -@media (min-width: 67rem) { - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 67rem; - } - .sb-article, - .match-content-width { - width: 50rem; - } -} - -/* Desktop views */ -@media (min-width: 76rem) { - .sb-sidebar-primary { - position: static; - } - .hide-when-primary-sidebar-shown { - display: none !important; - } - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 59rem; - } - .sb-article, - .match-content-width { - width: 42rem; - } -} - -/* Full desktop views */ -@media (min-width: 80rem) { - .sb-article, - .match-content-width { - width: 46rem; - } - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 63rem; - } -} - -@media (min-width: 84rem) { - .sb-article, - .match-content-width { - width: 50rem; - } - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 67rem; - } -} - -@media (min-width: 88rem) { - .sb-footer-content__inner, - .drop-secondary-sidebar-for-full-width-content .sb-article, - .drop-secondary-sidebar-for-full-width-content .match-content-width { - width: 67rem; - } - .sb-page-width { - width: 88rem; - } -} diff --git a/docs/html/_static/sphinx-design.min.css b/docs/html/_static/sphinx-design.min.css deleted file mode 100644 index 860c36da..00000000 --- a/docs/html/_static/sphinx-design.min.css +++ /dev/null @@ -1 +0,0 @@ -.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative;font-size:var(--sd-fontsize-dropdown)}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary.sd-summary-title{padding:.5em .6em .5em 1em;font-size:var(--sd-fontsize-dropdown-title);font-weight:var(--sd-fontweight-dropdown-title);user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;list-style:none;display:inline-flex;justify-content:space-between}details.sd-dropdown summary.sd-summary-title::-webkit-details-marker{display:none}details.sd-dropdown summary.sd-summary-title:focus{outline:none}details.sd-dropdown summary.sd-summary-title .sd-summary-icon{margin-right:.6em;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary.sd-summary-title .sd-summary-text{flex-grow:1;line-height:1.5;padding-right:.5rem}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker{pointer-events:none;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker svg{opacity:.6}details.sd-dropdown summary.sd-summary-title:hover .sd-summary-state-marker svg{opacity:1;transform:scale(1.1)}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown .sd-summary-chevron-right{transition:.25s}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-right{transform:rotate(90deg)}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-down{transform:rotate(180deg)}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-bg: rgba(0, 113, 188, 0.2);--sd-color-secondary-bg: rgba(108, 117, 125, 0.2);--sd-color-success-bg: rgba(40, 167, 69, 0.2);--sd-color-info-bg: rgba(23, 162, 184, 0.2);--sd-color-warning-bg: rgba(240, 179, 126, 0.2);--sd-color-danger-bg: rgba(220, 53, 69, 0.2);--sd-color-light-bg: rgba(248, 249, 250, 0.2);--sd-color-muted-bg: rgba(108, 117, 125, 0.2);--sd-color-dark-bg: rgba(33, 37, 41, 0.2);--sd-color-black-bg: rgba(0, 0, 0, 0.2);--sd-color-white-bg: rgba(255, 255, 255, 0.2);--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem;--sd-fontsize-dropdown: inherit;--sd-fontsize-dropdown-title: 1rem;--sd-fontweight-dropdown-title: 700} diff --git a/docs/html/_static/sphinx_highlight.js b/docs/html/_static/sphinx_highlight.js deleted file mode 100644 index 8a96c69a..00000000 --- a/docs/html/_static/sphinx_highlight.js +++ /dev/null @@ -1,154 +0,0 @@ -/* Highlighting utilities for Sphinx HTML documentation. */ -"use strict"; - -const SPHINX_HIGHLIGHT_ENABLED = true - -/** - * highlight a given string on a node by wrapping it in - * span elements with the given class name. - */ -const _highlight = (node, addItems, text, className) => { - if (node.nodeType === Node.TEXT_NODE) { - const val = node.nodeValue; - const parent = node.parentNode; - const pos = val.toLowerCase().indexOf(text); - if ( - pos >= 0 && - !parent.classList.contains(className) && - !parent.classList.contains("nohighlight") - ) { - let span; - - const closestNode = parent.closest("body, svg, foreignObject"); - const isInSVG = closestNode && closestNode.matches("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.classList.add(className); - } - - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - const rest = document.createTextNode(val.substr(pos + text.length)); - parent.insertBefore( - span, - parent.insertBefore( - rest, - node.nextSibling - ) - ); - node.nodeValue = val.substr(0, pos); - /* There may be more occurrences of search term in this node. So call this - * function recursively on the remaining fragment. - */ - _highlight(rest, addItems, text, className); - - if (isInSVG) { - const rect = document.createElementNS( - "http://www.w3.org/2000/svg", - "rect" - ); - const bbox = parent.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute("class", className); - addItems.push({ parent: parent, target: rect }); - } - } - } else if (node.matches && !node.matches("button, select, textarea")) { - node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); - } -}; -const _highlightText = (thisNode, text, className) => { - let addItems = []; - _highlight(thisNode, addItems, text, className); - addItems.forEach((obj) => - obj.parent.insertAdjacentElement("beforebegin", obj.target) - ); -}; - -/** - * Small JavaScript module for the documentation. - */ -const SphinxHighlight = { - - /** - * highlight the search words provided in localstorage in the text - */ - highlightSearchWords: () => { - if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight - - // get and clear terms from localstorage - const url = new URL(window.location); - const highlight = - localStorage.getItem("sphinx_highlight_terms") - || url.searchParams.get("highlight") - || ""; - localStorage.removeItem("sphinx_highlight_terms") - url.searchParams.delete("highlight"); - window.history.replaceState({}, "", url); - - // get individual terms from highlight string - const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); - if (terms.length === 0) return; // nothing to do - - // There should never be more than one element matching "div.body" - const divBody = document.querySelectorAll("div.body"); - const body = divBody.length ? divBody[0] : document.querySelector("body"); - window.setTimeout(() => { - terms.forEach((term) => _highlightText(body, term, "highlighted")); - }, 10); - - const searchBox = document.getElementById("searchbox"); - if (searchBox === null) return; - searchBox.appendChild( - document - .createRange() - .createContextualFragment( - '" - ) - ); - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords: () => { - document - .querySelectorAll("#searchbox .highlight-link") - .forEach((el) => el.remove()); - document - .querySelectorAll("span.highlighted") - .forEach((el) => el.classList.remove("highlighted")); - localStorage.removeItem("sphinx_highlight_terms") - }, - - initEscapeListener: () => { - // only install a listener if it is really needed - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; - if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { - SphinxHighlight.hideSearchWords(); - event.preventDefault(); - } - }); - }, -}; - -_ready(() => { - /* Do not call highlightSearchWords() when we are on the search page. - * It will highlight words from the *previous* search query. - */ - if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); - SphinxHighlight.initEscapeListener(); -}); diff --git a/docs/html/_static/styles/furo-extensions.css b/docs/html/_static/styles/furo-extensions.css deleted file mode 100644 index 82295876..00000000 --- a/docs/html/_static/styles/furo-extensions.css +++ /dev/null @@ -1,2 +0,0 @@ -#furo-sidebar-ad-placement{padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)}#furo-sidebar-ad-placement .ethical-sidebar{background:var(--color-background-secondary);border:none;box-shadow:none}#furo-sidebar-ad-placement .ethical-sidebar:hover{background:var(--color-background-hover)}#furo-sidebar-ad-placement .ethical-sidebar a{color:var(--color-foreground-primary)}#furo-sidebar-ad-placement .ethical-callout a{color:var(--color-foreground-secondary)!important}#furo-readthedocs-versions{background:transparent;display:block;position:static;width:100%}#furo-readthedocs-versions .rst-versions{background:#1a1c1e}#furo-readthedocs-versions .rst-current-version{background:var(--color-sidebar-item-background);cursor:unset}#furo-readthedocs-versions .rst-current-version:hover{background:var(--color-sidebar-item-background)}#furo-readthedocs-versions .rst-current-version .fa-book{color:var(--color-foreground-primary)}#furo-readthedocs-versions>.rst-other-versions{padding:0}#furo-readthedocs-versions>.rst-other-versions small{opacity:1}#furo-readthedocs-versions .injected .rst-versions{position:unset}#furo-readthedocs-versions:focus-within,#furo-readthedocs-versions:hover{box-shadow:0 0 0 1px var(--color-sidebar-background-border)}#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:hover .rst-current-version{background:#1a1c1e;font-size:inherit;height:auto;line-height:inherit;padding:12px;text-align:right}#furo-readthedocs-versions:focus-within .rst-current-version .fa-book,#furo-readthedocs-versions:hover .rst-current-version .fa-book{color:#fff;float:left}#furo-readthedocs-versions:focus-within .fa-caret-down,#furo-readthedocs-versions:hover .fa-caret-down{display:none}#furo-readthedocs-versions:focus-within .injected,#furo-readthedocs-versions:focus-within .rst-current-version,#furo-readthedocs-versions:focus-within .rst-other-versions,#furo-readthedocs-versions:hover .injected,#furo-readthedocs-versions:hover .rst-current-version,#furo-readthedocs-versions:hover .rst-other-versions{display:block}#furo-readthedocs-versions:focus-within>.rst-current-version,#furo-readthedocs-versions:hover>.rst-current-version{display:none}.highlight:hover button.copybtn{color:var(--color-code-foreground)}.highlight button.copybtn{align-items:center;background-color:var(--color-code-background);border:none;color:var(--color-background-item);cursor:pointer;height:1.25em;right:.5rem;top:.625rem;transition:color .3s,opacity .3s;width:1.25em}.highlight button.copybtn:hover{background-color:var(--color-code-background);color:var(--color-brand-content)}.highlight button.copybtn:after{background-color:transparent;color:var(--color-code-foreground);display:none}.highlight button.copybtn.success{color:#22863a;transition:color 0ms}.highlight button.copybtn.success:after{display:block}.highlight button.copybtn svg{padding:0}body{--sd-color-primary:var(--color-brand-primary);--sd-color-primary-highlight:var(--color-brand-content);--sd-color-primary-text:var(--color-background-primary);--sd-color-shadow:rgba(0,0,0,.05);--sd-color-card-border:var(--color-card-border);--sd-color-card-border-hover:var(--color-brand-content);--sd-color-card-background:var(--color-card-background);--sd-color-card-text:var(--color-foreground-primary);--sd-color-card-header:var(--color-card-marginals-background);--sd-color-card-footer:var(--color-card-marginals-background);--sd-color-tabs-label-active:var(--color-brand-content);--sd-color-tabs-label-hover:var(--color-foreground-muted);--sd-color-tabs-label-inactive:var(--color-foreground-muted);--sd-color-tabs-underline-active:var(--color-brand-content);--sd-color-tabs-underline-hover:var(--color-foreground-border);--sd-color-tabs-underline-inactive:var(--color-background-border);--sd-color-tabs-overline:var(--color-background-border);--sd-color-tabs-underline:var(--color-background-border)}.sd-tab-content{box-shadow:0 -2px var(--sd-color-tabs-overline),0 1px var(--sd-color-tabs-underline)}.sd-card{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)}.sd-shadow-sm{box-shadow:0 .1rem .25rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-md{box-shadow:0 .3rem .75rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-shadow-lg{box-shadow:0 .6rem 1.5rem var(--sd-color-shadow),0 0 .0625rem rgba(0,0,0,.1)!important}.sd-card-hover:hover{transform:none}.sd-cards-carousel{gap:.25rem;padding:.25rem}body{--tabs--label-text:var(--color-foreground-muted);--tabs--label-text--hover:var(--color-foreground-muted);--tabs--label-text--active:var(--color-brand-content);--tabs--label-text--active--hover:var(--color-brand-content);--tabs--label-background:transparent;--tabs--label-background--hover:transparent;--tabs--label-background--active:transparent;--tabs--label-background--active--hover:transparent;--tabs--padding-x:0.25em;--tabs--margin-x:1em;--tabs--border:var(--color-background-border);--tabs--label-border:transparent;--tabs--label-border--hover:var(--color-foreground-muted);--tabs--label-border--active:var(--color-brand-content);--tabs--label-border--active--hover:var(--color-brand-content)}[role=main] .container{max-width:none;padding-left:0;padding-right:0}.shadow.docutils{border:none;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)!important}.sphinx-bs .card{background-color:var(--color-background-secondary);color:var(--color-foreground)} -/*# sourceMappingURL=furo-extensions.css.map*/ \ No newline at end of file diff --git a/docs/html/_static/styles/furo-extensions.css.map b/docs/html/_static/styles/furo-extensions.css.map deleted file mode 100644 index c26eac7f..00000000 --- a/docs/html/_static/styles/furo-extensions.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"styles/furo-extensions.css","mappings":"AAGA,2BACE,oFACA,4CAKE,6CAHA,YACA,eAEA,CACA,kDACE,yCAEF,8CACE,sCAEJ,8CACE,kDAEJ,2BAGE,uBACA,cAHA,gBACA,UAEA,CAGA,yCACE,mBAEF,gDAEE,gDADA,YACA,CACA,sDACE,gDACF,yDACE,sCAEJ,+CACE,UACA,qDACE,UAGF,mDACE,eAEJ,yEAEE,4DAEA,mHASE,mBAPA,kBAEA,YADA,oBAGA,aADA,gBAIA,CAEA,qIAEE,WADA,UACA,CAEJ,uGACE,aAEF,iUAGE,cAEF,mHACE,aC1EJ,gCACE,mCAEF,0BAEE,mBAUA,8CACA,YAFA,mCAKA,eAZA,cAIA,YADA,YAYA,iCAdA,YAcA,CAEA,gCAEE,8CADA,gCACA,CAEF,gCAGE,6BADA,mCADA,YAEA,CAEF,kCAEE,cADA,oBACA,CACA,wCACE,cAEJ,8BACE,UCzCN,KAEE,6CAA8C,CAC9C,uDAAwD,CACxD,uDAAwD,CAGxD,iCAAsC,CAGtC,+CAAgD,CAChD,uDAAwD,CACxD,uDAAwD,CACxD,oDAAqD,CACrD,6DAA8D,CAC9D,6DAA8D,CAG9D,uDAAwD,CACxD,yDAA0D,CAC1D,4DAA6D,CAC7D,2DAA4D,CAC5D,8DAA+D,CAC/D,iEAAkE,CAClE,uDAAwD,CACxD,wDAAyD,CAG3D,gBACE,qFAGF,SACE,6EAEF,cACE,uFAEF,cACE,uFAEF,cACE,uFAGF,qBACE,eAEF,mBACE,WACA,eChDF,KACE,gDAAiD,CACjD,uDAAwD,CACxD,qDAAsD,CACtD,4DAA6D,CAC7D,oCAAqC,CACrC,2CAA4C,CAC5C,4CAA6C,CAC7C,mDAAoD,CACpD,wBAAyB,CACzB,oBAAqB,CACrB,6CAA8C,CAC9C,gCAAiC,CACjC,yDAA0D,CAC1D,uDAAwD,CACxD,8DAA+D,CCbjE,uBACE,eACA,eACA,gBAGF,iBACE,YACA,+EAGF,iBACE,mDACA","sources":["webpack:///./src/furo/assets/styles/extensions/_readthedocs.sass","webpack:///./src/furo/assets/styles/extensions/_copybutton.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-design.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-inline-tabs.sass","webpack:///./src/furo/assets/styles/extensions/_sphinx-panels.sass"],"sourcesContent":["// This file contains the styles used for tweaking how ReadTheDoc's embedded\n// contents would show up inside the theme.\n\n#furo-sidebar-ad-placement\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n .ethical-sidebar\n // Remove the border and box-shadow.\n border: none\n box-shadow: none\n // Manage the background colors.\n background: var(--color-background-secondary)\n &:hover\n background: var(--color-background-hover)\n // Ensure the text is legible.\n a\n color: var(--color-foreground-primary)\n\n .ethical-callout a\n color: var(--color-foreground-secondary) !important\n\n#furo-readthedocs-versions\n position: static\n width: 100%\n background: transparent\n display: block\n\n // Make the background color fit with the theme's aesthetic.\n .rst-versions\n background: rgb(26, 28, 30)\n\n .rst-current-version\n cursor: unset\n background: var(--color-sidebar-item-background)\n &:hover\n background: var(--color-sidebar-item-background)\n .fa-book\n color: var(--color-foreground-primary)\n\n > .rst-other-versions\n padding: 0\n small\n opacity: 1\n\n .injected\n .rst-versions\n position: unset\n\n &:hover,\n &:focus-within\n box-shadow: 0 0 0 1px var(--color-sidebar-background-border)\n\n .rst-current-version\n // Undo the tweaks done in RTD's CSS\n font-size: inherit\n line-height: inherit\n height: auto\n text-align: right\n padding: 12px\n\n // Match the rest of the body\n background: #1a1c1e\n\n .fa-book\n float: left\n color: white\n\n .fa-caret-down\n display: none\n\n .rst-current-version,\n .rst-other-versions,\n .injected\n display: block\n\n > .rst-current-version\n display: none\n",".highlight\n &:hover button.copybtn\n color: var(--color-code-foreground)\n\n button.copybtn\n // Align things correctly\n align-items: center\n\n height: 1.25em\n width: 1.25em\n\n top: 0.625rem // $code-spacing-vertical\n right: 0.5rem\n\n // Make it look better\n color: var(--color-background-item)\n background-color: var(--color-code-background)\n border: none\n\n // Change to cursor to make it obvious that you can click on it\n cursor: pointer\n\n // Transition smoothly, for aesthetics\n transition: color 300ms, opacity 300ms\n\n &:hover\n color: var(--color-brand-content)\n background-color: var(--color-code-background)\n\n &::after\n display: none\n color: var(--color-code-foreground)\n background-color: transparent\n\n &.success\n transition: color 0ms\n color: #22863a\n &::after\n display: block\n\n svg\n padding: 0\n","body\n // Colors\n --sd-color-primary: var(--color-brand-primary)\n --sd-color-primary-highlight: var(--color-brand-content)\n --sd-color-primary-text: var(--color-background-primary)\n\n // Shadows\n --sd-color-shadow: rgba(0, 0, 0, 0.05)\n\n // Cards\n --sd-color-card-border: var(--color-card-border)\n --sd-color-card-border-hover: var(--color-brand-content)\n --sd-color-card-background: var(--color-card-background)\n --sd-color-card-text: var(--color-foreground-primary)\n --sd-color-card-header: var(--color-card-marginals-background)\n --sd-color-card-footer: var(--color-card-marginals-background)\n\n // Tabs\n --sd-color-tabs-label-active: var(--color-brand-content)\n --sd-color-tabs-label-hover: var(--color-foreground-muted)\n --sd-color-tabs-label-inactive: var(--color-foreground-muted)\n --sd-color-tabs-underline-active: var(--color-brand-content)\n --sd-color-tabs-underline-hover: var(--color-foreground-border)\n --sd-color-tabs-underline-inactive: var(--color-background-border)\n --sd-color-tabs-overline: var(--color-background-border)\n --sd-color-tabs-underline: var(--color-background-border)\n\n// Tabs\n.sd-tab-content\n box-shadow: 0 -2px var(--sd-color-tabs-overline), 0 1px var(--sd-color-tabs-underline)\n\n// Shadows\n.sd-card // Have a shadow by default\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n.sd-shadow-sm\n box-shadow: 0 0.1rem 0.25rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-md\n box-shadow: 0 0.3rem 0.75rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n.sd-shadow-lg\n box-shadow: 0 0.6rem 1.5rem var(--sd-color-shadow), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Cards\n.sd-card-hover:hover // Don't change scale on hover\n transform: none\n\n.sd-cards-carousel // Have a bit of gap in the carousel by default\n gap: 0.25rem\n padding: 0.25rem\n","// This file contains styles to tweak sphinx-inline-tabs to work well with Furo.\n\nbody\n --tabs--label-text: var(--color-foreground-muted)\n --tabs--label-text--hover: var(--color-foreground-muted)\n --tabs--label-text--active: var(--color-brand-content)\n --tabs--label-text--active--hover: var(--color-brand-content)\n --tabs--label-background: transparent\n --tabs--label-background--hover: transparent\n --tabs--label-background--active: transparent\n --tabs--label-background--active--hover: transparent\n --tabs--padding-x: 0.25em\n --tabs--margin-x: 1em\n --tabs--border: var(--color-background-border)\n --tabs--label-border: transparent\n --tabs--label-border--hover: var(--color-foreground-muted)\n --tabs--label-border--active: var(--color-brand-content)\n --tabs--label-border--active--hover: var(--color-brand-content)\n","// This file contains styles to tweak sphinx-panels to work well with Furo.\n\n// sphinx-panels includes Bootstrap 4, which uses .container which can conflict\n// with docutils' `.. container::` directive.\n[role=\"main\"] .container\n max-width: initial\n padding-left: initial\n padding-right: initial\n\n// Make the panels look nicer!\n.shadow.docutils\n border: none\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1) !important\n\n// Make panel colors respond to dark mode\n.sphinx-bs .card\n background-color: var(--color-background-secondary)\n color: var(--color-foreground)\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/docs/html/_static/styles/furo.css b/docs/html/_static/styles/furo.css deleted file mode 100644 index 05a56b17..00000000 --- a/docs/html/_static/styles/furo.css +++ /dev/null @@ -1,2 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}@media print{.content-icon-container,.headerlink,.mobile-header,.related-pages{display:none!important}.highlight{border:.1pt solid var(--color-foreground-border)}a,blockquote,dl,ol,p,pre,table,ul{page-break-inside:avoid}caption,figure,h1,h2,h3,h4,h5,h6,img{page-break-after:avoid;page-break-inside:avoid}dl,ol,ul{page-break-before:avoid}}.visually-hidden{height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;clip:rect(0,0,0,0)!important;background:var(--color-background-primary);border:0!important;color:var(--color-foreground-primary);white-space:nowrap!important}:-moz-focusring{outline:auto}body{--font-stack:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;--font-stack--monospace:"SFMono-Regular",Menlo,Consolas,Monaco,Liberation Mono,Lucida Console,monospace;--font-stack--headings:var(--font-stack);--font-size--normal:100%;--font-size--small:87.5%;--font-size--small--2:81.25%;--font-size--small--3:75%;--font-size--small--4:62.5%;--sidebar-caption-font-size:var(--font-size--small--2);--sidebar-item-font-size:var(--font-size--small);--sidebar-search-input-font-size:var(--font-size--small);--toc-font-size:var(--font-size--small--3);--toc-font-size--mobile:var(--font-size--normal);--toc-title-font-size:var(--font-size--small--4);--admonition-font-size:0.8125rem;--admonition-title-font-size:0.8125rem;--code-font-size:var(--font-size--small--2);--api-font-size:var(--font-size--small);--header-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*4);--header-padding:0.5rem;--sidebar-tree-space-above:1.5rem;--sidebar-caption-space-above:1rem;--sidebar-item-line-height:1rem;--sidebar-item-spacing-vertical:0.5rem;--sidebar-item-spacing-horizontal:1rem;--sidebar-item-height:calc(var(--sidebar-item-line-height) + var(--sidebar-item-spacing-vertical)*2);--sidebar-expander-width:var(--sidebar-item-height);--sidebar-search-space-above:0.5rem;--sidebar-search-input-spacing-vertical:0.5rem;--sidebar-search-input-spacing-horizontal:0.5rem;--sidebar-search-input-height:1rem;--sidebar-search-icon-size:var(--sidebar-search-input-height);--toc-title-padding:0.25rem 0;--toc-spacing-vertical:1.5rem;--toc-spacing-horizontal:1.5rem;--toc-item-spacing-vertical:0.4rem;--toc-item-spacing-horizontal:1rem;--icon-search:url('data:image/svg+xml;charset=utf-8,');--icon-pencil:url('data:image/svg+xml;charset=utf-8,');--icon-abstract:url('data:image/svg+xml;charset=utf-8,');--icon-info:url('data:image/svg+xml;charset=utf-8,');--icon-flame:url('data:image/svg+xml;charset=utf-8,');--icon-question:url('data:image/svg+xml;charset=utf-8,');--icon-warning:url('data:image/svg+xml;charset=utf-8,');--icon-failure:url('data:image/svg+xml;charset=utf-8,');--icon-spark:url('data:image/svg+xml;charset=utf-8,');--color-admonition-title--caution:#ff9100;--color-admonition-title-background--caution:rgba(255,145,0,.2);--color-admonition-title--warning:#ff9100;--color-admonition-title-background--warning:rgba(255,145,0,.2);--color-admonition-title--danger:#ff5252;--color-admonition-title-background--danger:rgba(255,82,82,.2);--color-admonition-title--attention:#ff5252;--color-admonition-title-background--attention:rgba(255,82,82,.2);--color-admonition-title--error:#ff5252;--color-admonition-title-background--error:rgba(255,82,82,.2);--color-admonition-title--hint:#00c852;--color-admonition-title-background--hint:rgba(0,200,82,.2);--color-admonition-title--tip:#00c852;--color-admonition-title-background--tip:rgba(0,200,82,.2);--color-admonition-title--important:#00bfa5;--color-admonition-title-background--important:rgba(0,191,165,.2);--color-admonition-title--note:#00b0ff;--color-admonition-title-background--note:rgba(0,176,255,.2);--color-admonition-title--seealso:#448aff;--color-admonition-title-background--seealso:rgba(68,138,255,.2);--color-admonition-title--admonition-todo:grey;--color-admonition-title-background--admonition-todo:hsla(0,0%,50%,.2);--color-admonition-title:#651fff;--color-admonition-title-background:rgba(101,31,255,.2);--icon-admonition-default:var(--icon-abstract);--color-topic-title:#14b8a6;--color-topic-title-background:rgba(20,184,166,.2);--icon-topic-default:var(--icon-pencil);--color-problematic:#b30000;--color-foreground-primary:#000;--color-foreground-secondary:#5a5c63;--color-foreground-muted:#6b6f76;--color-foreground-border:#878787;--color-background-primary:#fff;--color-background-secondary:#f8f9fb;--color-background-hover:#efeff4;--color-background-hover--transparent:#efeff400;--color-background-border:#eeebee;--color-background-item:#ccc;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#0a4bff;--color-brand-content:#2757dd;--color-brand-visited:#872ee0;--color-api-background:var(--color-background-hover--transparent);--color-api-background-hover:var(--color-background-hover);--color-api-overall:var(--color-foreground-secondary);--color-api-name:var(--color-problematic);--color-api-pre-name:var(--color-problematic);--color-api-paren:var(--color-foreground-secondary);--color-api-keyword:var(--color-foreground-primary);--color-api-added:#21632c;--color-api-added-border:#38a84d;--color-api-changed:#046172;--color-api-changed-border:#06a1bc;--color-api-deprecated:#605706;--color-api-deprecated-border:#f0d90f;--color-api-removed:#b30000;--color-api-removed-border:#ff5c5c;--color-highlight-on-target:#ffc;--color-inline-code-background:var(--color-background-secondary);--color-highlighted-background:#def;--color-highlighted-text:var(--color-foreground-primary);--color-guilabel-background:#ddeeff80;--color-guilabel-border:#bedaf580;--color-guilabel-text:var(--color-foreground-primary);--color-admonition-background:transparent;--color-table-header-background:var(--color-background-secondary);--color-table-border:var(--color-background-border);--color-card-border:var(--color-background-secondary);--color-card-background:transparent;--color-card-marginals-background:var(--color-background-secondary);--color-header-background:var(--color-background-primary);--color-header-border:var(--color-background-border);--color-header-text:var(--color-foreground-primary);--color-sidebar-background:var(--color-background-secondary);--color-sidebar-background-border:var(--color-background-border);--color-sidebar-brand-text:var(--color-foreground-primary);--color-sidebar-caption-text:var(--color-foreground-muted);--color-sidebar-link-text:var(--color-foreground-secondary);--color-sidebar-link-text--top-level:var(--color-brand-primary);--color-sidebar-item-background:var(--color-sidebar-background);--color-sidebar-item-background--current:var( --color-sidebar-item-background );--color-sidebar-item-background--hover:linear-gradient(90deg,var(--color-background-hover--transparent) 0%,var(--color-background-hover) var(--sidebar-item-spacing-horizontal),var(--color-background-hover) 100%);--color-sidebar-item-expander-background:transparent;--color-sidebar-item-expander-background--hover:var( --color-background-hover );--color-sidebar-search-text:var(--color-foreground-primary);--color-sidebar-search-background:var(--color-background-secondary);--color-sidebar-search-background--focus:var(--color-background-primary);--color-sidebar-search-border:var(--color-background-border);--color-sidebar-search-icon:var(--color-foreground-muted);--color-toc-background:var(--color-background-primary);--color-toc-title-text:var(--color-foreground-muted);--color-toc-item-text:var(--color-foreground-secondary);--color-toc-item-text--hover:var(--color-foreground-primary);--color-toc-item-text--active:var(--color-brand-primary);--color-content-foreground:var(--color-foreground-primary);--color-content-background:transparent;--color-link:var(--color-brand-content);--color-link-underline:var(--color-background-border);--color-link--hover:var(--color-brand-content);--color-link-underline--hover:var(--color-foreground-border);--color-link--visited:var(--color-brand-visited);--color-link-underline--visited:var(--color-background-border);--color-link--visited--hover:var(--color-brand-visited);--color-link-underline--visited--hover:var(--color-foreground-border)}.only-light{display:block!important}html body .only-dark{display:none!important}@media not print{body[data-theme=dark]{--color-problematic:#ee5151;--color-foreground-primary:#cfd0d0;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body[data-theme=dark] .only-light{display:none!important}body[data-theme=dark] .only-dark{display:block!important}@media(prefers-color-scheme:dark){body:not([data-theme=light]){--color-problematic:#ee5151;--color-foreground-primary:#cfd0d0;--color-foreground-secondary:#9ca0a5;--color-foreground-muted:#81868d;--color-foreground-border:#666;--color-background-primary:#131416;--color-background-secondary:#1a1c1e;--color-background-hover:#1e2124;--color-background-hover--transparent:#1e212400;--color-background-border:#303335;--color-background-item:#444;--color-announcement-background:#000000dd;--color-announcement-text:#eeebee;--color-brand-primary:#3d94ff;--color-brand-content:#5ca5ff;--color-brand-visited:#b27aeb;--color-highlighted-background:#083563;--color-guilabel-background:#08356380;--color-guilabel-border:#13395f80;--color-api-keyword:var(--color-foreground-secondary);--color-highlight-on-target:#330;--color-api-added:#3db854;--color-api-added-border:#267334;--color-api-changed:#09b0ce;--color-api-changed-border:#056d80;--color-api-deprecated:#b1a10b;--color-api-deprecated-border:#6e6407;--color-api-removed:#ff7575;--color-api-removed-border:#b03b3b;--color-admonition-background:#18181a;--color-card-border:var(--color-background-secondary);--color-card-background:#18181a;--color-card-marginals-background:var(--color-background-hover)}html body:not([data-theme=light]) .only-light{display:none!important}body:not([data-theme=light]) .only-dark{display:block!important}}}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:block}@media(prefers-color-scheme:dark){body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-dark{display:block}body[data-theme=auto] .theme-toggle svg.theme-icon-when-auto-light{display:none}}body[data-theme=dark] .theme-toggle svg.theme-icon-when-dark,body[data-theme=light] .theme-toggle svg.theme-icon-when-light{display:block}body{font-family:var(--font-stack)}code,kbd,pre,samp{font-family:var(--font-stack--monospace)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}article{line-height:1.5}h1,h2,h3,h4,h5,h6{border-radius:.5rem;font-family:var(--font-stack--headings);font-weight:700;line-height:1.25;margin:.5rem -.5rem;padding-left:.5rem;padding-right:.5rem}h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0}h1{font-size:2.5em;margin-bottom:1rem}h1,h2{margin-top:1.75rem}h2{font-size:2em}h3{font-size:1.5em}h4{font-size:1.25em}h5{font-size:1.125em}h6{font-size:1em}small{font-size:80%;opacity:75%}p{margin-bottom:.75rem;margin-top:.5rem}hr.docutils{background-color:var(--color-background-border);border:0;height:1px;margin:2rem 0;padding:0}.centered{text-align:center}a{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}a:visited{color:var(--color-link--visited);text-decoration-color:var(--color-link-underline--visited)}a:visited:hover{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}a:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link{color:inherit}a.muted-link:hover{color:var(--color-link--hover);text-decoration-color:var(--color-link-underline--hover)}a.muted-link:hover:visited{color:var(--color-link--visited--hover);text-decoration-color:var(--color-link-underline--visited--hover)}html{overflow-x:hidden;overflow-y:scroll;scroll-behavior:smooth}.sidebar-scroll,.toc-scroll,article[role=main] *{scrollbar-color:var(--color-foreground-border) transparent;scrollbar-width:thin}.sidebar-scroll::-webkit-scrollbar,.toc-scroll::-webkit-scrollbar,article[role=main] ::-webkit-scrollbar{height:.25rem;width:.25rem}.sidebar-scroll::-webkit-scrollbar-thumb,.toc-scroll::-webkit-scrollbar-thumb,article[role=main] ::-webkit-scrollbar-thumb{background-color:var(--color-foreground-border);border-radius:.125rem}body,html{height:100%}.skip-to-content,body,html{background:var(--color-background-primary);color:var(--color-foreground-primary)}.skip-to-content{border-radius:1rem;left:.25rem;padding:1rem;position:fixed;top:.25rem;transform:translateY(-200%);transition:transform .3s ease-in-out;z-index:40}.skip-to-content:focus-within{transform:translateY(0)}article{background:var(--color-content-background);color:var(--color-content-foreground);overflow-wrap:break-word}.page{display:flex;min-height:100%}.mobile-header{background-color:var(--color-header-background);border-bottom:1px solid var(--color-header-border);color:var(--color-header-text);display:none;height:var(--header-height);width:100%;z-index:10}.mobile-header.scrolled{border-bottom:none;box-shadow:0 0 .2rem rgba(0,0,0,.1),0 .2rem .4rem rgba(0,0,0,.2)}.mobile-header .header-center a{color:var(--color-header-text);text-decoration:none}.main{display:flex;flex:1}.sidebar-drawer{background:var(--color-sidebar-background);border-right:1px solid var(--color-sidebar-background-border);box-sizing:border-box;display:flex;justify-content:flex-end;min-width:15em;width:calc(50% - 26em)}.sidebar-container,.toc-drawer{box-sizing:border-box;width:15em}.toc-drawer{background:var(--color-toc-background);padding-right:1rem}.sidebar-sticky,.toc-sticky{display:flex;flex-direction:column;height:min(100%,100vh);height:100vh;position:sticky;top:0}.sidebar-scroll,.toc-scroll{flex-grow:1;flex-shrink:1;overflow:auto;scroll-behavior:smooth}.content{display:flex;flex-direction:column;justify-content:space-between;padding:0 3em;width:46em}.icon{display:inline-block;height:1rem;width:1rem}.icon svg{height:100%;width:100%}.announcement{align-items:center;background-color:var(--color-announcement-background);color:var(--color-announcement-text);display:flex;height:var(--header-height);overflow-x:auto}.announcement+.page{min-height:calc(100% - var(--header-height))}.announcement-content{box-sizing:border-box;min-width:100%;padding:.5rem;text-align:center;white-space:nowrap}.announcement-content a{color:var(--color-announcement-text);text-decoration-color:var(--color-announcement-text)}.announcement-content a:hover{color:var(--color-announcement-text);text-decoration-color:var(--color-link--hover)}.no-js .theme-toggle-container{display:none}.theme-toggle-container{display:flex}.theme-toggle{background:transparent;border:none;cursor:pointer;display:flex;padding:0}.theme-toggle svg{color:var(--color-foreground-primary);display:none;height:1.25rem;width:1.25rem}.theme-toggle-header{align-items:center;display:flex;justify-content:center}.nav-overlay-icon,.toc-overlay-icon{cursor:pointer;display:none}.nav-overlay-icon .icon,.toc-overlay-icon .icon{color:var(--color-foreground-secondary);height:1.5rem;width:1.5rem}.nav-overlay-icon,.toc-header-icon{align-items:center;justify-content:center}.toc-content-icon{height:1.5rem;width:1.5rem}.content-icon-container{display:flex;float:right;gap:.5rem;margin-bottom:1rem;margin-left:1rem;margin-top:1.5rem}.content-icon-container .edit-this-page svg,.content-icon-container .view-this-page svg{color:inherit;height:1.25rem;width:1.25rem}.sidebar-toggle{display:none;position:absolute}.sidebar-toggle[name=__toc]{left:20px}.sidebar-toggle:checked{left:40px}.overlay{background-color:rgba(0,0,0,.54);height:0;opacity:0;position:fixed;top:0;transition:width 0ms,height 0ms,opacity .25s ease-out;width:0}.sidebar-overlay{z-index:20}.toc-overlay{z-index:40}.sidebar-drawer{transition:left .25s ease-in-out;z-index:30}.toc-drawer{transition:right .25s ease-in-out;z-index:50}#__navigation:checked~.sidebar-overlay{height:100%;opacity:1;width:100%}#__navigation:checked~.page .sidebar-drawer{left:0;top:0}#__toc:checked~.toc-overlay{height:100%;opacity:1;width:100%}#__toc:checked~.page .toc-drawer{right:0;top:0}.back-to-top{background:var(--color-background-primary);border-radius:1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 1px 0 hsla(220,9%,46%,.502);display:none;font-size:.8125rem;left:0;margin-left:50%;padding:.5rem .75rem .5rem .5rem;position:fixed;text-decoration:none;top:1rem;transform:translateX(-50%);z-index:10}.back-to-top svg{height:1rem;width:1rem;fill:currentColor;display:inline-block}.back-to-top span{margin-left:.25rem}.show-back-to-top .back-to-top{align-items:center;display:flex}@media(min-width:97em){html{font-size:110%}}@media(max-width:82em){.toc-content-icon{display:flex}.toc-drawer{border-left:1px solid var(--color-background-muted);height:100vh;position:fixed;right:-15em;top:0}.toc-tree{border-left:none;font-size:var(--toc-font-size--mobile)}.sidebar-drawer{width:calc(50% - 18.5em)}}@media(max-width:67em){.content{margin-left:auto;margin-right:auto;padding:0 1em}}@media(max-width:63em){.nav-overlay-icon{display:flex}.sidebar-drawer{height:100vh;left:-15em;position:fixed;top:0;width:15em}.theme-toggle-header,.toc-header-icon{display:flex}.theme-toggle-content,.toc-content-icon{display:none}.mobile-header{align-items:center;display:flex;justify-content:space-between;position:sticky;top:0}.mobile-header .header-left,.mobile-header .header-right{display:flex;height:var(--header-height);padding:0 var(--header-padding)}.mobile-header .header-left label,.mobile-header .header-right label{height:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.nav-overlay-icon .icon,.theme-toggle svg{height:1.5rem;width:1.5rem}:target{scroll-margin-top:calc(var(--header-height) + 2.5rem)}.back-to-top{top:calc(var(--header-height) + .5rem)}.page{flex-direction:column;justify-content:center}}@media(max-width:48em){.content{overflow-x:auto;width:100%}}@media(max-width:46em){article[role=main] aside.sidebar{float:none;margin:1rem 0;width:100%}}.admonition,.topic{background:var(--color-admonition-background);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);font-size:var(--admonition-font-size);margin:1rem auto;overflow:hidden;padding:0 .5rem .5rem;page-break-inside:avoid}.admonition>:nth-child(2),.topic>:nth-child(2){margin-top:0}.admonition>:last-child,.topic>:last-child{margin-bottom:0}.admonition p.admonition-title,p.topic-title{font-size:var(--admonition-title-font-size);font-weight:500;line-height:1.3;margin:0 -.5rem .5rem;padding:.4rem .5rem .4rem 2rem;position:relative}.admonition p.admonition-title:before,p.topic-title:before{content:"";height:1rem;left:.5rem;position:absolute;width:1rem}p.admonition-title{background-color:var(--color-admonition-title-background)}p.admonition-title:before{background-color:var(--color-admonition-title);-webkit-mask-image:var(--icon-admonition-default);mask-image:var(--icon-admonition-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}p.topic-title{background-color:var(--color-topic-title-background)}p.topic-title:before{background-color:var(--color-topic-title);-webkit-mask-image:var(--icon-topic-default);mask-image:var(--icon-topic-default);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.admonition{border-left:.2rem solid var(--color-admonition-title)}.admonition.caution{border-left-color:var(--color-admonition-title--caution)}.admonition.caution>.admonition-title{background-color:var(--color-admonition-title-background--caution)}.admonition.caution>.admonition-title:before{background-color:var(--color-admonition-title--caution);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.warning{border-left-color:var(--color-admonition-title--warning)}.admonition.warning>.admonition-title{background-color:var(--color-admonition-title-background--warning)}.admonition.warning>.admonition-title:before{background-color:var(--color-admonition-title--warning);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.danger{border-left-color:var(--color-admonition-title--danger)}.admonition.danger>.admonition-title{background-color:var(--color-admonition-title-background--danger)}.admonition.danger>.admonition-title:before{background-color:var(--color-admonition-title--danger);-webkit-mask-image:var(--icon-spark);mask-image:var(--icon-spark)}.admonition.attention{border-left-color:var(--color-admonition-title--attention)}.admonition.attention>.admonition-title{background-color:var(--color-admonition-title-background--attention)}.admonition.attention>.admonition-title:before{background-color:var(--color-admonition-title--attention);-webkit-mask-image:var(--icon-warning);mask-image:var(--icon-warning)}.admonition.error{border-left-color:var(--color-admonition-title--error)}.admonition.error>.admonition-title{background-color:var(--color-admonition-title-background--error)}.admonition.error>.admonition-title:before{background-color:var(--color-admonition-title--error);-webkit-mask-image:var(--icon-failure);mask-image:var(--icon-failure)}.admonition.hint{border-left-color:var(--color-admonition-title--hint)}.admonition.hint>.admonition-title{background-color:var(--color-admonition-title-background--hint)}.admonition.hint>.admonition-title:before{background-color:var(--color-admonition-title--hint);-webkit-mask-image:var(--icon-question);mask-image:var(--icon-question)}.admonition.tip{border-left-color:var(--color-admonition-title--tip)}.admonition.tip>.admonition-title{background-color:var(--color-admonition-title-background--tip)}.admonition.tip>.admonition-title:before{background-color:var(--color-admonition-title--tip);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.important{border-left-color:var(--color-admonition-title--important)}.admonition.important>.admonition-title{background-color:var(--color-admonition-title-background--important)}.admonition.important>.admonition-title:before{background-color:var(--color-admonition-title--important);-webkit-mask-image:var(--icon-flame);mask-image:var(--icon-flame)}.admonition.note{border-left-color:var(--color-admonition-title--note)}.admonition.note>.admonition-title{background-color:var(--color-admonition-title-background--note)}.admonition.note>.admonition-title:before{background-color:var(--color-admonition-title--note);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition.seealso{border-left-color:var(--color-admonition-title--seealso)}.admonition.seealso>.admonition-title{background-color:var(--color-admonition-title-background--seealso)}.admonition.seealso>.admonition-title:before{background-color:var(--color-admonition-title--seealso);-webkit-mask-image:var(--icon-info);mask-image:var(--icon-info)}.admonition.admonition-todo{border-left-color:var(--color-admonition-title--admonition-todo)}.admonition.admonition-todo>.admonition-title{background-color:var(--color-admonition-title-background--admonition-todo)}.admonition.admonition-todo>.admonition-title:before{background-color:var(--color-admonition-title--admonition-todo);-webkit-mask-image:var(--icon-pencil);mask-image:var(--icon-pencil)}.admonition-todo>.admonition-title{text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd{margin-left:2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:first-child{margin-top:.125rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list,dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) dd>:last-child{margin-bottom:.75rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list>dt{font-size:var(--font-size--small);text-transform:uppercase}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd:empty{margin-bottom:.5rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul{margin-left:-1.2rem}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p:nth-child(2){margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple) .field-list dd>ul>li>p+p:last-child:empty{margin-bottom:0;margin-top:0}dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt{color:var(--color-api-overall)}.sig:not(.sig-inline){background:var(--color-api-background);border-radius:.25rem;font-family:var(--font-stack--monospace);font-size:var(--api-font-size);font-weight:700;margin-left:-.25rem;margin-right:-.25rem;padding:.25rem .5rem .25rem 3em;text-indent:-2.5em;transition:background .1s ease-out}.sig:not(.sig-inline):hover{background:var(--color-api-background-hover)}.sig:not(.sig-inline) a.reference .viewcode-link{font-weight:400;width:4.25rem}em.property{font-style:normal}em.property:first-child{color:var(--color-api-keyword)}.sig-name{color:var(--color-api-name)}.sig-prename{color:var(--color-api-pre-name);font-weight:400}.sig-paren{color:var(--color-api-paren)}.sig-param{font-style:normal}div.deprecated,div.versionadded,div.versionchanged,div.versionremoved{border-left:.1875rem solid;border-radius:.125rem;padding-left:.75rem}div.deprecated p,div.versionadded p,div.versionchanged p,div.versionremoved p{margin-bottom:.125rem;margin-top:.125rem}div.versionadded{border-color:var(--color-api-added-border)}div.versionadded .versionmodified{color:var(--color-api-added)}div.versionchanged{border-color:var(--color-api-changed-border)}div.versionchanged .versionmodified{color:var(--color-api-changed)}div.deprecated{border-color:var(--color-api-deprecated-border)}div.deprecated .versionmodified{color:var(--color-api-deprecated)}div.versionremoved{border-color:var(--color-api-removed-border)}div.versionremoved .versionmodified{color:var(--color-api-removed)}.viewcode-back,.viewcode-link{float:right;text-align:right}.line-block{margin-bottom:.75rem;margin-top:.5rem}.line-block .line-block{margin-bottom:0;margin-top:0;padding-left:1rem}.code-block-caption,article p.caption,table>caption{font-size:var(--font-size--small);text-align:center}.toctree-wrapper.compound .caption,.toctree-wrapper.compound :not(.caption)>.caption-text{font-size:var(--font-size--small);margin-bottom:0;text-align:initial;text-transform:uppercase}.toctree-wrapper.compound>ul{margin-bottom:0;margin-top:0}.sig-inline,code.literal{background:var(--color-inline-code-background);border-radius:.2em;font-size:var(--font-size--small--2);padding:.1em .2em}pre.literal-block .sig-inline,pre.literal-block code.literal{font-size:inherit;padding:0}p .sig-inline,p code.literal{border:1px solid var(--color-background-border)}.sig-inline{font-family:var(--font-stack--monospace)}div[class*=" highlight-"],div[class^=highlight-]{display:flex;margin:1em 0}div[class*=" highlight-"] .table-wrapper,div[class^=highlight-] .table-wrapper,pre{margin:0;padding:0}pre{overflow:auto}article[role=main] .highlight pre{line-height:1.5}.highlight pre,pre.literal-block{font-size:var(--code-font-size);padding:.625rem .875rem}pre.literal-block{background-color:var(--color-code-background);border-radius:.2rem;color:var(--color-code-foreground);margin-bottom:1rem;margin-top:1rem}.highlight{border-radius:.2rem;width:100%}.highlight .gp,.highlight span.linenos{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.highlight .hll{display:block;margin-left:-.875rem;margin-right:-.875rem;padding-left:.875rem;padding-right:.875rem}.code-block-caption{background-color:var(--color-code-background);border-bottom:1px solid;border-radius:.25rem;border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:var(--color-background-border);color:var(--color-code-foreground);display:flex;font-weight:300;padding:.625rem .875rem}.code-block-caption+div[class]{margin-top:0}.code-block-caption+div[class] pre{border-top-left-radius:0;border-top-right-radius:0}.highlighttable{display:block;width:100%}.highlighttable tbody{display:block}.highlighttable tr{display:flex}.highlighttable td.linenos{background-color:var(--color-code-background);border-bottom-left-radius:.2rem;border-top-left-radius:.2rem;color:var(--color-code-foreground);padding:.625rem 0 .625rem .875rem}.highlighttable .linenodiv{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;font-size:var(--code-font-size);padding-right:.875rem}.highlighttable td.code{display:block;flex:1;overflow:hidden;padding:0}.highlighttable td.code .highlight{border-bottom-left-radius:0;border-top-left-radius:0}.highlight span.linenos{box-shadow:-.0625rem 0 var(--color-foreground-border) inset;display:inline-block;margin-right:.875rem;padding-left:0;padding-right:.875rem}.footnote-reference{font-size:var(--font-size--small--4);vertical-align:super}dl.footnote.brackets{color:var(--color-foreground-secondary);display:grid;font-size:var(--font-size--small);grid-template-columns:max-content auto}dl.footnote.brackets dt{margin:0}dl.footnote.brackets dt>.fn-backref{margin-left:.25rem}dl.footnote.brackets dt:after{content:":"}dl.footnote.brackets dt .brackets:before{content:"["}dl.footnote.brackets dt .brackets:after{content:"]"}dl.footnote.brackets dd{margin:0;padding:0 1rem}aside.footnote{color:var(--color-foreground-secondary);font-size:var(--font-size--small)}aside.footnote>span,div.citation>span{float:left;font-weight:500;padding-right:.25rem}aside.footnote>:not(span),div.citation>p{margin-left:2rem}img{box-sizing:border-box;height:auto;max-width:100%}article .figure,article figure{border-radius:.2rem;margin:0}article .figure :last-child,article figure :last-child{margin-bottom:0}article .align-left{clear:left;float:left;margin:0 1rem 1rem}article .align-right{clear:right;float:right;margin:0 1rem 1rem}article .align-center,article .align-default{display:block;margin-left:auto;margin-right:auto;text-align:center}article table.align-default{display:table;text-align:initial}.domainindex-jumpbox,.genindex-jumpbox{border-bottom:1px solid var(--color-background-border);border-top:1px solid var(--color-background-border);padding:.25rem}.domainindex-section h2,.genindex-section h2{margin-bottom:.5rem;margin-top:.75rem}.domainindex-section ul,.genindex-section ul{margin-bottom:0;margin-top:0}ol,ul{margin-bottom:1rem;margin-top:1rem;padding-left:1.2rem}ol li>p:first-child,ul li>p:first-child{margin-bottom:.25rem;margin-top:.25rem}ol li>p:last-child,ul li>p:last-child{margin-top:.25rem}ol li>ol,ol li>ul,ul li>ol,ul li>ul{margin-bottom:.5rem;margin-top:.5rem}ol.arabic{list-style:decimal}ol.loweralpha{list-style:lower-alpha}ol.upperalpha{list-style:upper-alpha}ol.lowerroman{list-style:lower-roman}ol.upperroman{list-style:upper-roman}.simple li>ol,.simple li>ul,.toctree-wrapper li>ol,.toctree-wrapper li>ul{margin-bottom:0;margin-top:0}.field-list dt,.option-list dt,dl.footnote dt,dl.glossary dt,dl.simple dt,dl:not([class]) dt{font-weight:500;margin-top:.25rem}.field-list dt+dt,.option-list dt+dt,dl.footnote dt+dt,dl.glossary dt+dt,dl.simple dt+dt,dl:not([class]) dt+dt{margin-top:0}.field-list dt .classifier:before,.option-list dt .classifier:before,dl.footnote dt .classifier:before,dl.glossary dt .classifier:before,dl.simple dt .classifier:before,dl:not([class]) dt .classifier:before{content:":";margin-left:.2rem;margin-right:.2rem}.field-list dd ul,.field-list dd>p:first-child,.option-list dd ul,.option-list dd>p:first-child,dl.footnote dd ul,dl.footnote dd>p:first-child,dl.glossary dd ul,dl.glossary dd>p:first-child,dl.simple dd ul,dl.simple dd>p:first-child,dl:not([class]) dd ul,dl:not([class]) dd>p:first-child{margin-top:.125rem}.field-list dd ul,.option-list dd ul,dl.footnote dd ul,dl.glossary dd ul,dl.simple dd ul,dl:not([class]) dd ul{margin-bottom:.125rem}.math-wrapper{overflow-x:auto;width:100%}div.math{position:relative;text-align:center}div.math .headerlink,div.math:focus .headerlink{display:none}div.math:hover .headerlink{display:inline-block}div.math span.eqno{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);z-index:1}abbr[title]{cursor:help}.problematic{color:var(--color-problematic)}kbd:not(.compound){background-color:var(--color-background-secondary);border:1px solid var(--color-foreground-border);border-radius:.2rem;box-shadow:0 .0625rem 0 rgba(0,0,0,.2),inset 0 0 0 .125rem var(--color-background-primary);color:var(--color-foreground-primary);display:inline-block;font-size:var(--font-size--small--3);margin:0 .2rem;padding:0 .2rem;vertical-align:text-bottom}blockquote{background:var(--color-background-secondary);border-left:4px solid var(--color-background-border);margin-left:0;margin-right:0;padding:.5rem 1rem}blockquote .attribution{font-weight:600;text-align:right}blockquote.highlights,blockquote.pull-quote{font-size:1.25em}blockquote.epigraph,blockquote.pull-quote{border-left-width:0;border-radius:.5rem}blockquote.highlights{background:transparent;border-left-width:0}p .reference img{vertical-align:middle}p.rubric{font-size:1.125em;font-weight:700;line-height:1.25}dd p.rubric{font-size:var(--font-size--small);font-weight:inherit;line-height:inherit;text-transform:uppercase}article .sidebar{background-color:var(--color-background-secondary);border:1px solid var(--color-background-border);border-radius:.2rem;clear:right;float:right;margin-left:1rem;margin-right:0;width:30%}article .sidebar>*{padding-left:1rem;padding-right:1rem}article .sidebar>ol,article .sidebar>ul{padding-left:2.2rem}article .sidebar .sidebar-title{border-bottom:1px solid var(--color-background-border);font-weight:500;margin:0;padding:.5rem 1rem}[role=main] .table-wrapper.container{margin-bottom:.5rem;margin-top:1rem;overflow-x:auto;padding:.2rem .2rem .75rem;width:100%}table.docutils{border-collapse:collapse;border-radius:.2rem;border-spacing:0;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1)}table.docutils th{background:var(--color-table-header-background)}table.docutils td,table.docutils th{border-bottom:1px solid var(--color-table-border);border-left:1px solid var(--color-table-border);border-right:1px solid var(--color-table-border);padding:0 .25rem}table.docutils td p,table.docutils th p{margin:.25rem}table.docutils td:first-child,table.docutils th:first-child{border-left:none}table.docutils td:last-child,table.docutils th:last-child{border-right:none}table.docutils td.text-left,table.docutils th.text-left{text-align:left}table.docutils td.text-right,table.docutils th.text-right{text-align:right}table.docutils td.text-center,table.docutils th.text-center{text-align:center}:target{scroll-margin-top:2.5rem}@media(max-width:67em){:target{scroll-margin-top:calc(2.5rem + var(--header-height))}section>span:target{scroll-margin-top:calc(2.8rem + var(--header-height))}}.headerlink{font-weight:100;-webkit-user-select:none;-moz-user-select:none;user-select:none}.code-block-caption>.headerlink,dl dt>.headerlink,figcaption p>.headerlink,h1>.headerlink,h2>.headerlink,h3>.headerlink,h4>.headerlink,h5>.headerlink,h6>.headerlink,p.caption>.headerlink,table>caption>.headerlink{margin-left:.5rem;visibility:hidden}.code-block-caption:hover>.headerlink,dl dt:hover>.headerlink,figcaption p:hover>.headerlink,h1:hover>.headerlink,h2:hover>.headerlink,h3:hover>.headerlink,h4:hover>.headerlink,h5:hover>.headerlink,h6:hover>.headerlink,p.caption:hover>.headerlink,table>caption:hover>.headerlink{visibility:visible}.code-block-caption>.toc-backref,dl dt>.toc-backref,figcaption p>.toc-backref,h1>.toc-backref,h2>.toc-backref,h3>.toc-backref,h4>.toc-backref,h5>.toc-backref,h6>.toc-backref,p.caption>.toc-backref,table>caption>.toc-backref{color:inherit;text-decoration-line:none}figure:hover>figcaption>p>.headerlink,table:hover>caption>.headerlink{visibility:visible}:target>h1:first-of-type,:target>h2:first-of-type,:target>h3:first-of-type,:target>h4:first-of-type,:target>h5:first-of-type,:target>h6:first-of-type,span:target~h1:first-of-type,span:target~h2:first-of-type,span:target~h3:first-of-type,span:target~h4:first-of-type,span:target~h5:first-of-type,span:target~h6:first-of-type{background-color:var(--color-highlight-on-target)}:target>h1:first-of-type code.literal,:target>h2:first-of-type code.literal,:target>h3:first-of-type code.literal,:target>h4:first-of-type code.literal,:target>h5:first-of-type code.literal,:target>h6:first-of-type code.literal,span:target~h1:first-of-type code.literal,span:target~h2:first-of-type code.literal,span:target~h3:first-of-type code.literal,span:target~h4:first-of-type code.literal,span:target~h5:first-of-type code.literal,span:target~h6:first-of-type code.literal{background-color:transparent}.literal-block-wrapper:target .code-block-caption,.this-will-duplicate-information-and-it-is-still-useful-here li :target,figure:target,table:target>caption{background-color:var(--color-highlight-on-target)}dt:target{background-color:var(--color-highlight-on-target)!important}.footnote-reference:target,.footnote>dt:target+dd{background-color:var(--color-highlight-on-target)}.guilabel{background-color:var(--color-guilabel-background);border:1px solid var(--color-guilabel-border);border-radius:.5em;color:var(--color-guilabel-text);font-size:.9em;padding:0 .3em}footer{display:flex;flex-direction:column;font-size:var(--font-size--small);margin-top:2rem}.bottom-of-page{align-items:center;border-top:1px solid var(--color-background-border);color:var(--color-foreground-secondary);display:flex;justify-content:space-between;line-height:1.5;margin-top:1rem;padding-bottom:1rem;padding-top:1rem}@media(max-width:46em){.bottom-of-page{flex-direction:column-reverse;gap:.25rem;text-align:center}}.bottom-of-page .left-details{font-size:var(--font-size--small)}.bottom-of-page .right-details{display:flex;flex-direction:column;gap:.25rem;text-align:right}.bottom-of-page .icons{display:flex;font-size:1rem;gap:.25rem;justify-content:flex-end}.bottom-of-page .icons a{text-decoration:none}.bottom-of-page .icons img,.bottom-of-page .icons svg{font-size:1.125rem;height:1em;width:1em}.related-pages a{align-items:center;display:flex;text-decoration:none}.related-pages a:hover .page-info .title{color:var(--color-link);text-decoration:underline;text-decoration-color:var(--color-link-underline)}.related-pages a svg.furo-related-icon,.related-pages a svg.furo-related-icon>use{color:var(--color-foreground-border);flex-shrink:0;height:.75rem;margin:0 .5rem;width:.75rem}.related-pages a.next-page{clear:right;float:right;max-width:50%;text-align:right}.related-pages a.prev-page{clear:left;float:left;max-width:50%}.related-pages a.prev-page svg{transform:rotate(180deg)}.page-info{display:flex;flex-direction:column;overflow-wrap:anywhere}.next-page .page-info{align-items:flex-end}.page-info .context{align-items:center;color:var(--color-foreground-muted);display:flex;font-size:var(--font-size--small);padding-bottom:.1rem;text-decoration:none}ul.search{list-style:none;padding-left:0}ul.search li{border-bottom:1px solid var(--color-background-border);padding:1rem 0}[role=main] .highlighted{background-color:var(--color-highlighted-background);color:var(--color-highlighted-text)}.sidebar-brand{display:flex;flex-direction:column;flex-shrink:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none}.sidebar-brand-text{color:var(--color-sidebar-brand-text);font-size:1.5rem;overflow-wrap:break-word}.sidebar-brand-text,.sidebar-logo-container{margin:var(--sidebar-item-spacing-vertical) 0}.sidebar-logo{display:block;margin:0 auto;max-width:100%}.sidebar-search-container{align-items:center;background:var(--color-sidebar-search-background);display:flex;margin-top:var(--sidebar-search-space-above);position:relative}.sidebar-search-container:focus-within,.sidebar-search-container:hover{background:var(--color-sidebar-search-background--focus)}.sidebar-search-container:before{background-color:var(--color-sidebar-search-icon);content:"";height:var(--sidebar-search-icon-size);left:var(--sidebar-item-spacing-horizontal);-webkit-mask-image:var(--icon-search);mask-image:var(--icon-search);position:absolute;width:var(--sidebar-search-icon-size)}.sidebar-search{background:transparent;border:none;border-bottom:1px solid var(--color-sidebar-search-border);border-top:1px solid var(--color-sidebar-search-border);box-sizing:border-box;color:var(--color-sidebar-search-foreground);padding:var(--sidebar-search-input-spacing-vertical) var(--sidebar-search-input-spacing-horizontal) var(--sidebar-search-input-spacing-vertical) calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size));width:100%;z-index:10}.sidebar-search:focus{outline:none}.sidebar-search::-moz-placeholder{font-size:var(--sidebar-search-input-font-size)}.sidebar-search::placeholder{font-size:var(--sidebar-search-input-font-size)}#searchbox .highlight-link{margin:0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0;text-align:center}#searchbox .highlight-link a{color:var(--color-sidebar-search-icon);font-size:var(--font-size--small--2)}.sidebar-tree{font-size:var(--sidebar-item-font-size);margin-bottom:var(--sidebar-item-spacing-vertical);margin-top:var(--sidebar-tree-space-above)}.sidebar-tree ul{display:flex;flex-direction:column;list-style:none;margin-bottom:0;margin-top:0;padding:0}.sidebar-tree li{margin:0;position:relative}.sidebar-tree li>ul{margin-left:var(--sidebar-item-spacing-horizontal)}.sidebar-tree .icon,.sidebar-tree .reference{color:var(--color-sidebar-link-text)}.sidebar-tree .reference{box-sizing:border-box;display:inline-block;height:100%;line-height:var(--sidebar-item-line-height);overflow-wrap:anywhere;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-decoration:none;width:100%}.sidebar-tree .reference:hover{background:var(--color-sidebar-item-background--hover);color:var(--color-sidebar-link-text)}.sidebar-tree .reference.external:after{color:var(--color-sidebar-link-text);content:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23607D8B' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' viewBox='0 0 24 24'%3E%3Cpath stroke='none' d='M0 0h24v24H0z'/%3E%3Cpath d='M11 7H6a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2-2v-5M10 14 20 4M15 4h5v5'/%3E%3C/svg%3E");margin:0 .25rem;vertical-align:middle}.sidebar-tree .current-page>.reference{font-weight:700}.sidebar-tree label{align-items:center;cursor:pointer;display:flex;height:var(--sidebar-item-height);justify-content:center;position:absolute;right:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--sidebar-expander-width)}.sidebar-tree .caption,.sidebar-tree :not(.caption)>.caption-text{color:var(--color-sidebar-caption-text);font-size:var(--sidebar-caption-font-size);font-weight:700;margin:var(--sidebar-caption-space-above) 0 0 0;padding:var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal);text-transform:uppercase}.sidebar-tree li.has-children>.reference{padding-right:var(--sidebar-expander-width)}.sidebar-tree .toctree-l1>.reference,.sidebar-tree .toctree-l1>label .icon{color:var(--color-sidebar-link-text--top-level)}.sidebar-tree label{background:var(--color-sidebar-item-expander-background)}.sidebar-tree label:hover{background:var(--color-sidebar-item-expander-background--hover)}.sidebar-tree .current>.reference{background:var(--color-sidebar-item-background--current)}.sidebar-tree .current>.reference:hover{background:var(--color-sidebar-item-background--hover)}.toctree-checkbox{display:none;position:absolute}.toctree-checkbox~ul{display:none}.toctree-checkbox~label .icon svg{transform:rotate(90deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label .icon svg{transform:rotate(-90deg)}.toc-title-container{padding:var(--toc-title-padding);padding-top:var(--toc-spacing-vertical)}.toc-title{color:var(--color-toc-title-text);font-size:var(--toc-title-font-size);padding-left:var(--toc-spacing-horizontal);text-transform:uppercase}.no-toc{display:none}.toc-tree-container{padding-bottom:var(--toc-spacing-vertical)}.toc-tree{border-left:1px solid var(--color-background-border);font-size:var(--toc-font-size);line-height:1.3;padding-left:calc(var(--toc-spacing-horizontal) - var(--toc-item-spacing-horizontal))}.toc-tree>ul>li:first-child{padding-top:0}.toc-tree>ul>li:first-child>ul{padding-left:0}.toc-tree>ul>li:first-child>a{display:none}.toc-tree ul{list-style-type:none;margin-bottom:0;margin-top:0;padding-left:var(--toc-item-spacing-horizontal)}.toc-tree li{padding-top:var(--toc-item-spacing-vertical)}.toc-tree li.scroll-current>.reference{color:var(--color-toc-item-text--active);font-weight:700}.toc-tree a.reference{color:var(--color-toc-item-text);overflow-wrap:anywhere;text-decoration:none}.toc-scroll{max-height:100vh;overflow-y:scroll}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here){background:rgba(255,0,0,.25);color:var(--color-problematic)}.contents:not(.this-will-duplicate-information-and-it-is-still-useful-here):before{content:"ERROR: Adding a table of contents in Furo-based documentation is unnecessary, and does not work well with existing styling. Add a 'this-will-duplicate-information-and-it-is-still-useful-here' class, if you want an escape hatch."}.text-align\:left>p{text-align:left}.text-align\:center>p{text-align:center}.text-align\:right>p{text-align:right} -/*# sourceMappingURL=furo.css.map*/ \ No newline at end of file diff --git a/docs/html/_static/styles/furo.css.map b/docs/html/_static/styles/furo.css.map deleted file mode 100644 index 3ecc3715..00000000 --- a/docs/html/_static/styles/furo.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"styles/furo.css","mappings":"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sCAIA,aADF,WACE,CAKF,SACE,CAHJ,kBAEE,CAJE,gBAEJ,CAHI,iBAMA,yFAKA,aACA,eACA,cElbJ,iBAEE,aADA,iBACA,6BAEA,kCAEA,SACA,UAIA,gCACA,CALA,SAEA,SAEA,CAJA,0EAEA,CAFA,OAKA,CAGA,mDACE,iBAGF,gCACE,CADF,UACE,aAEJ,iCAEE,CAFF,UAEE,wCAEA,WACA,WADA,UACA,CACA,4CAGA,MACA,CADA,KACA,wCACA,UAGA,CAJA,UAIA,6DAUA,0CACE,CAFF,mBAEE,wEACA,CAVA,YACA,CAMF,mBAJE,OAOA,gBAJJ,gCACE,CANE,cACA,CAHA,oBACA,CAGA,QAGJ,CAII,0BACA,CADA,UACA,wCAEJ,kBACE,0DACA,gCACE,kBACA,CADA,YACA,oEACA,2CAMF,mDAII,CALN,YACE,CANE,cAKJ,CACE,iBAII,kEACA,yCACE,kDACA,yDACE,+CACA,uBANN,CAMM,+BANN,uCACE,qDACA,4BAEE,mBADA,0CACA,CADA,qBACA,0DACE,wCACA,sGALJ,oCACA,sBACE,kBAFF,UAEE,2CACA,wFACE,cACA,kEANN,uBACE,iDACA,CADA,UACA,0DACE,wDAEE,iEACA,qEANN,sCACE,CAGE,iBAHF,gBAGE,qBACE,CAJJ,uBACA,gDACE,wDACA,6DAHF,2CACA,CADA,gBACA,eACE,CAGE,sBANN,8BACE,CAII,iBAFF,4DACA,WACE,YADF,uCACE,6EACA,2BANN,8CACE,kDACA,0CACE,8BACA,yFACE,sBACA,sFALJ,mEACA,sBACE,kEACA,6EACE,uCACA,kEALJ,qGAEE,kEACA,6EACE,uCACA,kEALJ,8CACA,uDACE,sEACA,2EACE,sCACA,iEALJ,mGACA,qCACE,oDACA,0DACE,6GACA,gDAGR,yDCrEA,sEACE,CACA,6GACE,gEACF,iGAIF,wFACE,qDAGA,mGAEE,2CAEF,4FACE,gCACF,wGACE,8DAEE,6FAIA,iJAKN,6GACE,gDAKF,yDACA,qCAGA,6BACA,kBACA,qDAKA,oCAEA,+DAGA,2CAGE,oDAIA,oEAEE,qBAGJ,wDAEE,uCAEF,kE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","sources":["webpack:///./node_modules/normalize.css/normalize.css","webpack:///./src/furo/assets/styles/base/_print.sass","webpack:///./src/furo/assets/styles/base/_screen-readers.sass","webpack:///./src/furo/assets/styles/base/_theme.sass","webpack:///./src/furo/assets/styles/variables/_fonts.scss","webpack:///./src/furo/assets/styles/variables/_spacing.scss","webpack:///./src/furo/assets/styles/variables/_icons.scss","webpack:///./src/furo/assets/styles/variables/_admonitions.scss","webpack:///./src/furo/assets/styles/variables/_colors.scss","webpack:///./src/furo/assets/styles/base/_typography.sass","webpack:///./src/furo/assets/styles/_scaffold.sass","webpack:///./src/furo/assets/styles/variables/_layout.scss","webpack:///./src/furo/assets/styles/content/_admonitions.sass","webpack:///./src/furo/assets/styles/content/_api.sass","webpack:///./src/furo/assets/styles/content/_blocks.sass","webpack:///./src/furo/assets/styles/content/_captions.sass","webpack:///./src/furo/assets/styles/content/_code.sass","webpack:///./src/furo/assets/styles/content/_footnotes.sass","webpack:///./src/furo/assets/styles/content/_images.sass","webpack:///./src/furo/assets/styles/content/_indexes.sass","webpack:///./src/furo/assets/styles/content/_lists.sass","webpack:///./src/furo/assets/styles/content/_math.sass","webpack:///./src/furo/assets/styles/content/_misc.sass","webpack:///./src/furo/assets/styles/content/_rubrics.sass","webpack:///./src/furo/assets/styles/content/_sidebar.sass","webpack:///./src/furo/assets/styles/content/_tables.sass","webpack:///./src/furo/assets/styles/content/_target.sass","webpack:///./src/furo/assets/styles/content/_gui-labels.sass","webpack:///./src/furo/assets/styles/components/_footer.sass","webpack:///./src/furo/assets/styles/components/_sidebar.sass","webpack:///./src/furo/assets/styles/components/_table_of_contents.sass","webpack:///./src/furo/assets/styles/_shame.sass"],"sourcesContent":["/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// This file contains styles for managing print media.\n\n////////////////////////////////////////////////////////////////////////////////\n// Hide elements not relevant to print media.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Hide icon container.\n .content-icon-container\n display: none !important\n\n // Hide showing header links if hovering over when printing.\n .headerlink\n display: none !important\n\n // Hide mobile header.\n .mobile-header\n display: none !important\n\n // Hide navigation links.\n .related-pages\n display: none !important\n\n////////////////////////////////////////////////////////////////////////////////\n// Tweaks related to decolorization.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n // Apply a border around code which no longer have a color background.\n .highlight\n border: 0.1pt solid var(--color-foreground-border)\n\n////////////////////////////////////////////////////////////////////////////////\n// Avoid page break in some relevant cases.\n////////////////////////////////////////////////////////////////////////////////\n@media print\n ul, ol, dl, a, table, pre, blockquote, p\n page-break-inside: avoid\n\n h1, h2, h3, h4, h5, h6, img, figure, caption\n page-break-inside: avoid\n page-break-after: avoid\n\n ul, ol, dl\n page-break-before: avoid\n",".visually-hidden\n position: absolute !important\n width: 1px !important\n height: 1px !important\n padding: 0 !important\n margin: -1px !important\n overflow: hidden !important\n clip: rect(0,0,0,0) !important\n white-space: nowrap !important\n border: 0 !important\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\n:-moz-focusring\n outline: auto\n","// This file serves as the \"skeleton\" of the theming logic.\n//\n// This contains the bulk of the logic for handling dark mode, color scheme\n// toggling and the handling of color-scheme-specific hiding of elements.\n\nbody\n @include fonts\n @include spacing\n @include icons\n @include admonitions\n @include default-admonition(#651fff, \"abstract\")\n @include default-topic(#14B8A6, \"pencil\")\n\n @include colors\n\n.only-light\n display: block !important\nhtml body .only-dark\n display: none !important\n\n// Ignore dark-mode hints if print media.\n@media not print\n // Enable dark-mode, if requested.\n body[data-theme=\"dark\"]\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n // Enable dark mode, unless explicitly told to avoid.\n @media (prefers-color-scheme: dark)\n body:not([data-theme=\"light\"])\n @include colors-dark\n\n html & .only-light\n display: none !important\n .only-dark\n display: block !important\n\n//\n// Theme toggle presentation\n//\nbody[data-theme=\"auto\"]\n .theme-toggle svg.theme-icon-when-auto-light\n display: block\n\n @media (prefers-color-scheme: dark)\n .theme-toggle svg.theme-icon-when-auto-dark\n display: block\n .theme-toggle svg.theme-icon-when-auto-light\n display: none\n\nbody[data-theme=\"dark\"]\n .theme-toggle svg.theme-icon-when-dark\n display: block\n\nbody[data-theme=\"light\"]\n .theme-toggle svg.theme-icon-when-light\n display: block\n","// Fonts used by this theme.\n//\n// There are basically two things here -- using the system font stack and\n// defining sizes for various elements in %ages. We could have also used `em`\n// but %age is easier to reason about for me.\n\n@mixin fonts {\n // These are adapted from https://systemfontstack.com/\n --font-stack: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n sans-serif, Apple Color Emoji, Segoe UI Emoji;\n --font-stack--monospace: \"SFMono-Regular\", Menlo, Consolas, Monaco,\n Liberation Mono, Lucida Console, monospace;\n --font-stack--headings: var(--font-stack);\n\n --font-size--normal: 100%;\n --font-size--small: 87.5%;\n --font-size--small--2: 81.25%;\n --font-size--small--3: 75%;\n --font-size--small--4: 62.5%;\n\n // Sidebar\n --sidebar-caption-font-size: var(--font-size--small--2);\n --sidebar-item-font-size: var(--font-size--small);\n --sidebar-search-input-font-size: var(--font-size--small);\n\n // Table of Contents\n --toc-font-size: var(--font-size--small--3);\n --toc-font-size--mobile: var(--font-size--normal);\n --toc-title-font-size: var(--font-size--small--4);\n\n // Admonitions\n //\n // These aren't defined in terms of %ages, since nesting these is permitted.\n --admonition-font-size: 0.8125rem;\n --admonition-title-font-size: 0.8125rem;\n\n // Code\n --code-font-size: var(--font-size--small--2);\n\n // API\n --api-font-size: var(--font-size--small);\n}\n","// Spacing for various elements on the page\n//\n// If the user wants to tweak things in a certain way, they are permitted to.\n// They also have to deal with the consequences though!\n\n@mixin spacing {\n // Header!\n --header-height: calc(\n var(--sidebar-item-line-height) + 4 * #{var(--sidebar-item-spacing-vertical)}\n );\n --header-padding: 0.5rem;\n\n // Sidebar\n --sidebar-tree-space-above: 1.5rem;\n --sidebar-caption-space-above: 1rem;\n\n --sidebar-item-line-height: 1rem;\n --sidebar-item-spacing-vertical: 0.5rem;\n --sidebar-item-spacing-horizontal: 1rem;\n --sidebar-item-height: calc(\n var(--sidebar-item-line-height) + 2 *#{var(--sidebar-item-spacing-vertical)}\n );\n\n --sidebar-expander-width: var(--sidebar-item-height); // be square\n\n --sidebar-search-space-above: 0.5rem;\n --sidebar-search-input-spacing-vertical: 0.5rem;\n --sidebar-search-input-spacing-horizontal: 0.5rem;\n --sidebar-search-input-height: 1rem;\n --sidebar-search-icon-size: var(--sidebar-search-input-height);\n\n // Table of Contents\n --toc-title-padding: 0.25rem 0;\n --toc-spacing-vertical: 1.5rem;\n --toc-spacing-horizontal: 1.5rem;\n --toc-item-spacing-vertical: 0.4rem;\n --toc-item-spacing-horizontal: 1rem;\n}\n","// Expose theme icons as CSS variables.\n\n$icons: (\n // Adapted from tabler-icons\n // url: https://tablericons.com/\n \"search\":\n url('data:image/svg+xml;charset=utf-8,'),\n // Factored out from mkdocs-material on 24-Aug-2020.\n // url: https://squidfunk.github.io/mkdocs-material/reference/admonitions/\n \"pencil\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"abstract\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"info\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"flame\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"question\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"warning\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"failure\":\n url('data:image/svg+xml;charset=utf-8,'),\n \"spark\":\n url('data:image/svg+xml;charset=utf-8,')\n);\n\n@mixin icons {\n @each $name, $glyph in $icons {\n --icon-#{$name}: #{$glyph};\n }\n}\n","// Admonitions\n\n// Structure of these is:\n// admonition-class: color \"icon-name\";\n//\n// The colors are translated into CSS variables below. The icons are\n// used directly in the main declarations to set the `mask-image` in\n// the title.\n\n// prettier-ignore\n$admonitions: (\n // Each of these has an reST directives for it.\n \"caution\": #ff9100 \"spark\",\n \"warning\": #ff9100 \"warning\",\n \"danger\": #ff5252 \"spark\",\n \"attention\": #ff5252 \"warning\",\n \"error\": #ff5252 \"failure\",\n \"hint\": #00c852 \"question\",\n \"tip\": #00c852 \"info\",\n \"important\": #00bfa5 \"flame\",\n \"note\": #00b0ff \"pencil\",\n \"seealso\": #448aff \"info\",\n \"admonition-todo\": #808080 \"pencil\"\n);\n\n@mixin default-admonition($color, $icon-name) {\n --color-admonition-title: #{$color};\n --color-admonition-title-background: #{rgba($color, 0.2)};\n\n --icon-admonition-default: var(--icon-#{$icon-name});\n}\n\n@mixin default-topic($color, $icon-name) {\n --color-topic-title: #{$color};\n --color-topic-title-background: #{rgba($color, 0.2)};\n\n --icon-topic-default: var(--icon-#{$icon-name});\n}\n\n@mixin admonitions {\n @each $name, $values in $admonitions {\n --color-admonition-title--#{$name}: #{nth($values, 1)};\n --color-admonition-title-background--#{$name}: #{rgba(\n nth($values, 1),\n 0.2\n )};\n }\n}\n","// Colors used throughout this theme.\n//\n// The aim is to give the user more control. Thus, instead of hard-coding colors\n// in various parts of the stylesheet, the approach taken is to define all\n// colors as CSS variables and reusing them in all the places.\n//\n// `colors-dark` depends on `colors` being included at a lower specificity.\n\n@mixin colors {\n --color-problematic: #b30000;\n\n // Base Colors\n --color-foreground-primary: black; // for main text and headings\n --color-foreground-secondary: #5a5c63; // for secondary text\n --color-foreground-muted: #6b6f76; // for muted text\n --color-foreground-border: #878787; // for content borders\n\n --color-background-primary: white; // for content\n --color-background-secondary: #f8f9fb; // for navigation + ToC\n --color-background-hover: #efeff4ff; // for navigation-item hover\n --color-background-hover--transparent: #efeff400;\n --color-background-border: #eeebee; // for UI borders\n --color-background-item: #ccc; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #0a4bff;\n --color-brand-content: #2757dd;\n --color-brand-visited: #872ee0;\n\n // API documentation\n --color-api-background: var(--color-background-hover--transparent);\n --color-api-background-hover: var(--color-background-hover);\n --color-api-overall: var(--color-foreground-secondary);\n --color-api-name: var(--color-problematic);\n --color-api-pre-name: var(--color-problematic);\n --color-api-paren: var(--color-foreground-secondary);\n --color-api-keyword: var(--color-foreground-primary);\n\n --color-api-added: #21632c;\n --color-api-added-border: #38a84d;\n --color-api-changed: #046172;\n --color-api-changed-border: #06a1bc;\n --color-api-deprecated: #605706;\n --color-api-deprecated-border: #f0d90f;\n --color-api-removed: #b30000;\n --color-api-removed-border: #ff5c5c;\n\n --color-highlight-on-target: #ffffcc;\n\n // Inline code background\n --color-inline-code-background: var(--color-background-secondary);\n\n // Highlighted text (search)\n --color-highlighted-background: #ddeeff;\n --color-highlighted-text: var(--color-foreground-primary);\n\n // GUI Labels\n --color-guilabel-background: #ddeeff80;\n --color-guilabel-border: #bedaf580;\n --color-guilabel-text: var(--color-foreground-primary);\n\n // Admonitions!\n --color-admonition-background: transparent;\n\n //////////////////////////////////////////////////////////////////////////////\n // Everything below this should be one of:\n // - var(...)\n // - *-gradient(...)\n // - special literal values (eg: transparent, none)\n //////////////////////////////////////////////////////////////////////////////\n\n // Tables\n --color-table-header-background: var(--color-background-secondary);\n --color-table-border: var(--color-background-border);\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: transparent;\n --color-card-marginals-background: var(--color-background-secondary);\n\n // Header\n --color-header-background: var(--color-background-primary);\n --color-header-border: var(--color-background-border);\n --color-header-text: var(--color-foreground-primary);\n\n // Sidebar (left)\n --color-sidebar-background: var(--color-background-secondary);\n --color-sidebar-background-border: var(--color-background-border);\n\n --color-sidebar-brand-text: var(--color-foreground-primary);\n --color-sidebar-caption-text: var(--color-foreground-muted);\n --color-sidebar-link-text: var(--color-foreground-secondary);\n --color-sidebar-link-text--top-level: var(--color-brand-primary);\n\n --color-sidebar-item-background: var(--color-sidebar-background);\n --color-sidebar-item-background--current: var(\n --color-sidebar-item-background\n );\n --color-sidebar-item-background--hover: linear-gradient(\n 90deg,\n var(--color-background-hover--transparent) 0%,\n var(--color-background-hover) var(--sidebar-item-spacing-horizontal),\n var(--color-background-hover) 100%\n );\n\n --color-sidebar-item-expander-background: transparent;\n --color-sidebar-item-expander-background--hover: var(\n --color-background-hover\n );\n\n --color-sidebar-search-text: var(--color-foreground-primary);\n --color-sidebar-search-background: var(--color-background-secondary);\n --color-sidebar-search-background--focus: var(--color-background-primary);\n --color-sidebar-search-border: var(--color-background-border);\n --color-sidebar-search-icon: var(--color-foreground-muted);\n\n // Table of Contents (right)\n --color-toc-background: var(--color-background-primary);\n --color-toc-title-text: var(--color-foreground-muted);\n --color-toc-item-text: var(--color-foreground-secondary);\n --color-toc-item-text--hover: var(--color-foreground-primary);\n --color-toc-item-text--active: var(--color-brand-primary);\n\n // Actual page contents\n --color-content-foreground: var(--color-foreground-primary);\n --color-content-background: transparent;\n\n // Links\n --color-link: var(--color-brand-content);\n --color-link-underline: var(--color-background-border);\n --color-link--hover: var(--color-brand-content);\n --color-link-underline--hover: var(--color-foreground-border);\n\n --color-link--visited: var(--color-brand-visited);\n --color-link-underline--visited: var(--color-background-border);\n --color-link--visited--hover: var(--color-brand-visited);\n --color-link-underline--visited--hover: var(--color-foreground-border);\n}\n\n@mixin colors-dark {\n --color-problematic: #ee5151;\n\n // Base Colors\n --color-foreground-primary: #cfd0d0; // for main text and headings\n --color-foreground-secondary: #9ca0a5; // for secondary text\n --color-foreground-muted: #81868d; // for muted text\n --color-foreground-border: #666666; // for content borders\n\n --color-background-primary: #131416; // for content\n --color-background-secondary: #1a1c1e; // for navigation + ToC\n --color-background-hover: #1e2124ff; // for navigation-item hover\n --color-background-hover--transparent: #1e212400;\n --color-background-border: #303335; // for UI borders\n --color-background-item: #444; // for \"background\" items (eg: copybutton)\n\n // Announcements\n --color-announcement-background: #000000dd;\n --color-announcement-text: #eeebee;\n\n // Brand colors\n --color-brand-primary: #3d94ff;\n --color-brand-content: #5ca5ff;\n --color-brand-visited: #b27aeb;\n\n // Highlighted text (search)\n --color-highlighted-background: #083563;\n\n // GUI Labels\n --color-guilabel-background: #08356380;\n --color-guilabel-border: #13395f80;\n\n // API documentation\n --color-api-keyword: var(--color-foreground-secondary);\n --color-highlight-on-target: #333300;\n\n --color-api-added: #3db854;\n --color-api-added-border: #267334;\n --color-api-changed: #09b0ce;\n --color-api-changed-border: #056d80;\n --color-api-deprecated: #b1a10b;\n --color-api-deprecated-border: #6e6407;\n --color-api-removed: #ff7575;\n --color-api-removed-border: #b03b3b;\n\n // Admonitions\n --color-admonition-background: #18181a;\n\n // Cards\n --color-card-border: var(--color-background-secondary);\n --color-card-background: #18181a;\n --color-card-marginals-background: var(--color-background-hover);\n}\n","// This file contains the styling for making the content throughout the page,\n// including fonts, paragraphs, headings and spacing among these elements.\n\nbody\n font-family: var(--font-stack)\npre,\ncode,\nkbd,\nsamp\n font-family: var(--font-stack--monospace)\n\n// Make fonts look slightly nicer.\nbody\n -webkit-font-smoothing: antialiased\n -moz-osx-font-smoothing: grayscale\n\n// Line height from Bootstrap 4.1\narticle\n line-height: 1.5\n\n//\n// Headings\n//\nh1,\nh2,\nh3,\nh4,\nh5,\nh6\n line-height: 1.25\n font-family: var(--font-stack--headings)\n font-weight: bold\n\n border-radius: 0.5rem\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n margin-left: -0.5rem\n margin-right: -0.5rem\n padding-left: 0.5rem\n padding-right: 0.5rem\n\n + p\n margin-top: 0\n\nh1\n font-size: 2.5em\n margin-top: 1.75rem\n margin-bottom: 1rem\nh2\n font-size: 2em\n margin-top: 1.75rem\nh3\n font-size: 1.5em\nh4\n font-size: 1.25em\nh5\n font-size: 1.125em\nh6\n font-size: 1em\n\nsmall\n opacity: 75%\n font-size: 80%\n\n// Paragraph\np\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n\n// Horizontal rules\nhr.docutils\n height: 1px\n padding: 0\n margin: 2rem 0\n background-color: var(--color-background-border)\n border: 0\n\n.centered\n text-align: center\n\n// Links\na\n text-decoration: underline\n\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n &:visited\n color: var(--color-link--visited)\n text-decoration-color: var(--color-link-underline--visited)\n &:hover\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\n\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &.muted-link\n color: inherit\n &:hover\n color: var(--color-link--hover)\n text-decoration-color: var(--color-link-underline--hover)\n &:visited\n color: var(--color-link--visited--hover)\n text-decoration-color: var(--color-link-underline--visited--hover)\n","// This file contains the styles for the overall layouting of the documentation\n// skeleton, including the responsive changes as well as sidebar toggles.\n//\n// This is implemented as a mobile-last design, which isn't ideal, but it is\n// reasonably good-enough and I got pretty tired by the time I'd finished this\n// to move the rules around to fix this. Shouldn't take more than 3-4 hours,\n// if you know what you're doing tho.\n\n// HACK: Not all browsers account for the scrollbar width in media queries.\n// This results in horizontal scrollbars in the breakpoint where we go\n// from displaying everything to hiding the ToC. We accomodate for this by\n// adding a bit of padding to the TOC drawer, disabling the horizontal\n// scrollbar and allowing the scrollbars to cover the padding.\n// https://www.456bereastreet.com/archive/201301/media_query_width_and_vertical_scrollbars/\n\n// HACK: Always having the scrollbar visible, prevents certain browsers from\n// causing the content to stutter horizontally between taller-than-viewport and\n// not-taller-than-viewport pages.\n\nhtml\n overflow-x: hidden\n overflow-y: scroll\n scroll-behavior: smooth\n\n.sidebar-scroll, .toc-scroll, article[role=main] *\n // Override Firefox scrollbar style\n scrollbar-width: thin\n scrollbar-color: var(--color-foreground-border) transparent\n\n // Override Chrome scrollbar styles\n &::-webkit-scrollbar\n width: 0.25rem\n height: 0.25rem\n &::-webkit-scrollbar-thumb\n background-color: var(--color-foreground-border)\n border-radius: 0.125rem\n\n//\n// Overalls\n//\nhtml,\nbody\n height: 100%\n color: var(--color-foreground-primary)\n background: var(--color-background-primary)\n\n.skip-to-content\n position: fixed\n padding: 1rem\n border-radius: 1rem\n left: 0.25rem\n top: 0.25rem\n z-index: 40\n background: var(--color-background-primary)\n color: var(--color-foreground-primary)\n\n transform: translateY(-200%)\n transition: transform 300ms ease-in-out\n\n &:focus-within\n transform: translateY(0%)\n\narticle\n color: var(--color-content-foreground)\n background: var(--color-content-background)\n overflow-wrap: break-word\n\n.page\n display: flex\n // fill the viewport for pages with little content.\n min-height: 100%\n\n.mobile-header\n width: 100%\n height: var(--header-height)\n background-color: var(--color-header-background)\n color: var(--color-header-text)\n border-bottom: 1px solid var(--color-header-border)\n\n // Looks like sub-script/super-script have this, and we need this to\n // be \"on top\" of those.\n z-index: 10\n\n // We don't show the header on large screens.\n display: none\n\n // Add shadow when scrolled\n &.scrolled\n border-bottom: none\n box-shadow: 0 0 0.2rem rgba(0, 0, 0, 0.1), 0 0.2rem 0.4rem rgba(0, 0, 0, 0.2)\n\n .header-center\n a\n color: var(--color-header-text)\n text-decoration: none\n\n.main\n display: flex\n flex: 1\n\n// Sidebar (left) also covers the entire left portion of screen.\n.sidebar-drawer\n box-sizing: border-box\n\n border-right: 1px solid var(--color-sidebar-background-border)\n background: var(--color-sidebar-background)\n\n display: flex\n justify-content: flex-end\n // These next two lines took me two days to figure out.\n width: calc((100% - #{$full-width}) / 2 + #{$sidebar-width})\n min-width: $sidebar-width\n\n// Scroll-along sidebars\n.sidebar-container,\n.toc-drawer\n box-sizing: border-box\n width: $sidebar-width\n\n.toc-drawer\n background: var(--color-toc-background)\n // See HACK described on top of this document\n padding-right: 1rem\n\n.sidebar-sticky,\n.toc-sticky\n position: sticky\n top: 0\n height: min(100%, 100vh)\n height: 100vh\n\n display: flex\n flex-direction: column\n\n.sidebar-scroll,\n.toc-scroll\n flex-grow: 1\n flex-shrink: 1\n\n overflow: auto\n scroll-behavior: smooth\n\n// Central items.\n.content\n padding: 0 $content-padding\n width: $content-width\n\n display: flex\n flex-direction: column\n justify-content: space-between\n\n.icon\n display: inline-block\n height: 1rem\n width: 1rem\n svg\n width: 100%\n height: 100%\n\n//\n// Accommodate announcement banner\n//\n.announcement\n background-color: var(--color-announcement-background)\n color: var(--color-announcement-text)\n\n height: var(--header-height)\n display: flex\n align-items: center\n overflow-x: auto\n & + .page\n min-height: calc(100% - var(--header-height))\n\n.announcement-content\n box-sizing: border-box\n padding: 0.5rem\n min-width: 100%\n white-space: nowrap\n text-align: center\n\n a\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-announcement-text)\n\n &:hover\n color: var(--color-announcement-text)\n text-decoration-color: var(--color-link--hover)\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for theme\n////////////////////////////////////////////////////////////////////////////////\n.no-js .theme-toggle-container // don't show theme toggle if there's no JS\n display: none\n\n.theme-toggle-container\n display: flex\n\n.theme-toggle\n display: flex\n cursor: pointer\n border: none\n padding: 0\n background: transparent\n\n.theme-toggle svg\n height: 1.25rem\n width: 1.25rem\n color: var(--color-foreground-primary)\n display: none\n\n.theme-toggle-header\n display: flex\n align-items: center\n justify-content: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Toggles for elements\n////////////////////////////////////////////////////////////////////////////////\n.toc-overlay-icon, .nav-overlay-icon\n display: none\n cursor: pointer\n\n .icon\n color: var(--color-foreground-secondary)\n height: 1.5rem\n width: 1.5rem\n\n.toc-header-icon, .nav-overlay-icon\n // for when we set display: flex\n justify-content: center\n align-items: center\n\n.toc-content-icon\n height: 1.5rem\n width: 1.5rem\n\n.content-icon-container\n float: right\n display: flex\n margin-top: 1.5rem\n margin-left: 1rem\n margin-bottom: 1rem\n gap: 0.5rem\n\n .edit-this-page, .view-this-page\n svg\n color: inherit\n height: 1.25rem\n width: 1.25rem\n\n.sidebar-toggle\n position: absolute\n display: none\n// \n.sidebar-toggle[name=\"__toc\"]\n left: 20px\n.sidebar-toggle:checked\n left: 40px\n// \n\n.overlay\n position: fixed\n top: 0\n width: 0\n height: 0\n\n transition: width 0ms, height 0ms, opacity 250ms ease-out\n\n opacity: 0\n background-color: rgba(0, 0, 0, 0.54)\n.sidebar-overlay\n z-index: 20\n.toc-overlay\n z-index: 40\n\n// Keep things on top and smooth.\n.sidebar-drawer\n z-index: 30\n transition: left 250ms ease-in-out\n.toc-drawer\n z-index: 50\n transition: right 250ms ease-in-out\n\n// Show the Sidebar\n#__navigation:checked\n & ~ .sidebar-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .sidebar-drawer\n top: 0\n left: 0\n // Show the toc sidebar\n#__toc:checked\n & ~ .toc-overlay\n width: 100%\n height: 100%\n opacity: 1\n & ~ .page\n .toc-drawer\n top: 0\n right: 0\n\n////////////////////////////////////////////////////////////////////////////////\n// Back to top\n////////////////////////////////////////////////////////////////////////////////\n.back-to-top\n text-decoration: none\n\n display: none\n position: fixed\n left: 0\n top: 1rem\n padding: 0.5rem\n padding-right: 0.75rem\n border-radius: 1rem\n font-size: 0.8125rem\n\n background: var(--color-background-primary)\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), #6b728080 0px 0px 1px 0px\n\n z-index: 10\n\n margin-left: 50%\n transform: translateX(-50%)\n svg\n height: 1rem\n width: 1rem\n fill: currentColor\n display: inline-block\n\n span\n margin-left: 0.25rem\n\n .show-back-to-top &\n display: flex\n align-items: center\n\n////////////////////////////////////////////////////////////////////////////////\n// Responsive layouting\n////////////////////////////////////////////////////////////////////////////////\n// Make things a bit bigger on bigger screens.\n@media (min-width: $full-width + $sidebar-width)\n html\n font-size: 110%\n\n@media (max-width: $full-width)\n // Collapse \"toc\" into the icon.\n .toc-content-icon\n display: flex\n .toc-drawer\n position: fixed\n height: 100vh\n top: 0\n right: -$sidebar-width\n border-left: 1px solid var(--color-background-muted)\n .toc-tree\n border-left: none\n font-size: var(--toc-font-size--mobile)\n\n // Accomodate for a changed content width.\n .sidebar-drawer\n width: calc((100% - #{$full-width - $sidebar-width}) / 2 + #{$sidebar-width})\n\n@media (max-width: $content-padded-width + $sidebar-width)\n // Center the page\n .content\n margin-left: auto\n margin-right: auto\n padding: 0 $content-padding--small\n\n@media (max-width: $content-padded-width--small + $sidebar-width)\n // Collapse \"navigation\".\n .nav-overlay-icon\n display: flex\n .sidebar-drawer\n position: fixed\n height: 100vh\n width: $sidebar-width\n\n top: 0\n left: -$sidebar-width\n\n // Swap which icon is visible.\n .toc-header-icon, .theme-toggle-header\n display: flex\n .toc-content-icon, .theme-toggle-content\n display: none\n\n // Show the header.\n .mobile-header\n position: sticky\n top: 0\n display: flex\n justify-content: space-between\n align-items: center\n\n .header-left,\n .header-right\n display: flex\n height: var(--header-height)\n padding: 0 var(--header-padding)\n label\n height: 100%\n width: 100%\n user-select: none\n\n .nav-overlay-icon .icon,\n .theme-toggle svg\n height: 1.5rem\n width: 1.5rem\n\n // Add a scroll margin for the content\n :target\n scroll-margin-top: calc(var(--header-height) + 2.5rem)\n\n // Show back-to-top below the header\n .back-to-top\n top: calc(var(--header-height) + 0.5rem)\n\n // Accommodate for the header.\n .page\n flex-direction: column\n justify-content: center\n\n@media (max-width: $content-width + 2* $content-padding--small)\n // Content should respect window limits.\n .content\n width: 100%\n overflow-x: auto\n\n@media (max-width: $content-width)\n article[role=main] aside.sidebar\n float: none\n width: 100%\n margin: 1rem 0\n","// Overall Layout Variables\n//\n// Because CSS variables can't be used in media queries. The fact that this\n// makes the layout non-user-configurable is a good thing.\n$content-padding: 3em;\n$content-padding--small: 1em;\n$content-width: 46em;\n$sidebar-width: 15em;\n$content-padded-width: $content-width + 2 * $content-padding;\n$content-padded-width--small: $content-width + 2 * $content-padding--small;\n$full-width: $content-padded-width + 2 * $sidebar-width;\n","//\n// The design here is strongly inspired by mkdocs-material.\n.admonition, .topic\n margin: 1rem auto\n padding: 0 0.5rem 0.5rem 0.5rem\n\n background: var(--color-admonition-background)\n\n border-radius: 0.2rem\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n font-size: var(--admonition-font-size)\n\n overflow: hidden\n page-break-inside: avoid\n\n // First element should have no margin, since the title has it.\n > :nth-child(2)\n margin-top: 0\n\n // Last item should have no margin, since we'll control that w/ padding\n > :last-child\n margin-bottom: 0\n\n.admonition p.admonition-title,\np.topic-title\n position: relative\n margin: 0 -0.5rem 0.5rem\n padding-left: 2rem\n padding-right: .5rem\n padding-top: .4rem\n padding-bottom: .4rem\n\n font-weight: 500\n font-size: var(--admonition-title-font-size)\n line-height: 1.3\n\n // Our fancy icon\n &::before\n content: \"\"\n position: absolute\n left: 0.5rem\n width: 1rem\n height: 1rem\n\n// Default styles\np.admonition-title\n background-color: var(--color-admonition-title-background)\n &::before\n background-color: var(--color-admonition-title)\n mask-image: var(--icon-admonition-default)\n mask-repeat: no-repeat\n\np.topic-title\n background-color: var(--color-topic-title-background)\n &::before\n background-color: var(--color-topic-title)\n mask-image: var(--icon-topic-default)\n mask-repeat: no-repeat\n\n//\n// Variants\n//\n.admonition\n border-left: 0.2rem solid var(--color-admonition-title)\n\n @each $type, $value in $admonitions\n &.#{$type}\n border-left-color: var(--color-admonition-title--#{$type})\n > .admonition-title\n background-color: var(--color-admonition-title-background--#{$type})\n &::before\n background-color: var(--color-admonition-title--#{$type})\n mask-image: var(--icon-#{nth($value, 2)})\n\n.admonition-todo > .admonition-title\n text-transform: uppercase\n","// This file stylizes the API documentation (stuff generated by autodoc). It's\n// deeply nested due to how autodoc structures the HTML without enough classes\n// to select the relevant items.\n\n// API docs!\ndl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)\n // Tweak the spacing of all the things!\n dd\n margin-left: 2rem\n > :first-child\n margin-top: 0.125rem\n > :last-child\n margin-bottom: 0.75rem\n\n // This is used for the arguments\n .field-list\n margin-bottom: 0.75rem\n\n // \"Headings\" (like \"Parameters\" and \"Return\")\n > dt\n text-transform: uppercase\n font-size: var(--font-size--small)\n\n dd:empty\n margin-bottom: 0.5rem\n dd > ul\n margin-left: -1.2rem\n > li\n > p:nth-child(2)\n margin-top: 0\n // When the last-empty-paragraph follows a paragraph, it doesn't need\n // to augument the existing spacing.\n > p + p:last-child:empty\n margin-top: 0\n margin-bottom: 0\n\n // Colorize the elements\n > dt\n color: var(--color-api-overall)\n\n.sig:not(.sig-inline)\n font-weight: bold\n\n font-size: var(--api-font-size)\n font-family: var(--font-stack--monospace)\n\n margin-left: -0.25rem\n margin-right: -0.25rem\n padding-top: 0.25rem\n padding-bottom: 0.25rem\n padding-right: 0.5rem\n\n // These are intentionally em, to properly match the font size.\n padding-left: 3em\n text-indent: -2.5em\n\n border-radius: 0.25rem\n\n background: var(--color-api-background)\n transition: background 100ms ease-out\n\n &:hover\n background: var(--color-api-background-hover)\n\n // adjust the size of the [source] link on the right.\n a.reference\n .viewcode-link\n font-weight: normal\n width: 4.25rem\n\nem.property\n font-style: normal\n &:first-child\n color: var(--color-api-keyword)\n.sig-name\n color: var(--color-api-name)\n.sig-prename\n font-weight: normal\n color: var(--color-api-pre-name)\n.sig-paren\n color: var(--color-api-paren)\n.sig-param\n font-style: normal\n\ndiv.versionadded,\ndiv.versionchanged,\ndiv.deprecated,\ndiv.versionremoved\n border-left: 0.1875rem solid\n border-radius: 0.125rem\n\n padding-left: 0.75rem\n\n p\n margin-top: 0.125rem\n margin-bottom: 0.125rem\n\ndiv.versionadded\n border-color: var(--color-api-added-border)\n .versionmodified\n color: var(--color-api-added)\n\ndiv.versionchanged\n border-color: var(--color-api-changed-border)\n .versionmodified\n color: var(--color-api-changed)\n\ndiv.deprecated\n border-color: var(--color-api-deprecated-border)\n .versionmodified\n color: var(--color-api-deprecated)\n\ndiv.versionremoved\n border-color: var(--color-api-removed-border)\n .versionmodified\n color: var(--color-api-removed)\n\n// Align the [docs] and [source] to the right.\n.viewcode-link, .viewcode-back\n float: right\n text-align: right\n",".line-block\n margin-top: 0.5rem\n margin-bottom: 0.75rem\n .line-block\n margin-top: 0rem\n margin-bottom: 0rem\n padding-left: 1rem\n","// Captions\narticle p.caption,\ntable > caption,\n.code-block-caption\n font-size: var(--font-size--small)\n text-align: center\n\n// Caption above a TOCTree\n.toctree-wrapper.compound\n .caption, :not(.caption) > .caption-text\n font-size: var(--font-size--small)\n text-transform: uppercase\n\n text-align: initial\n margin-bottom: 0\n\n > ul\n margin-top: 0\n margin-bottom: 0\n","// Inline code\ncode.literal, .sig-inline\n background: var(--color-inline-code-background)\n border-radius: 0.2em\n // Make the font smaller, and use padding to recover.\n font-size: var(--font-size--small--2)\n padding: 0.1em 0.2em\n\n pre.literal-block &\n font-size: inherit\n padding: 0\n\n p &\n border: 1px solid var(--color-background-border)\n\n.sig-inline\n font-family: var(--font-stack--monospace)\n\n// Code and Literal Blocks\n$code-spacing-vertical: 0.625rem\n$code-spacing-horizontal: 0.875rem\n\n// Wraps every literal block + line numbers.\ndiv[class*=\" highlight-\"],\ndiv[class^=\"highlight-\"]\n margin: 1em 0\n display: flex\n\n .table-wrapper\n margin: 0\n padding: 0\n\npre\n margin: 0\n padding: 0\n overflow: auto\n\n // Needed to have more specificity than pygments' \"pre\" selector. :(\n article[role=\"main\"] .highlight &\n line-height: 1.5\n\n &.literal-block,\n .highlight &\n font-size: var(--code-font-size)\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n // Make it look like all the other blocks.\n &.literal-block\n margin-top: 1rem\n margin-bottom: 1rem\n\n border-radius: 0.2rem\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n\n// All code is always contained in this.\n.highlight\n width: 100%\n border-radius: 0.2rem\n\n // Make line numbers and prompts un-selectable.\n .gp, span.linenos\n user-select: none\n pointer-events: none\n\n // Expand the line-highlighting.\n .hll\n display: block\n margin-left: -$code-spacing-horizontal\n margin-right: -$code-spacing-horizontal\n padding-left: $code-spacing-horizontal\n padding-right: $code-spacing-horizontal\n\n/* Make code block captions be nicely integrated */\n.code-block-caption\n display: flex\n padding: $code-spacing-vertical $code-spacing-horizontal\n\n border-radius: 0.25rem\n border-bottom-left-radius: 0\n border-bottom-right-radius: 0\n font-weight: 300\n border-bottom: 1px solid\n\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n border-color: var(--color-background-border)\n\n + div[class]\n margin-top: 0\n pre\n border-top-left-radius: 0\n border-top-right-radius: 0\n\n// When `html_codeblock_linenos_style` is table.\n.highlighttable\n width: 100%\n display: block\n tbody\n display: block\n\n tr\n display: flex\n\n // Line numbers\n td.linenos\n background-color: var(--color-code-background)\n color: var(--color-code-foreground)\n padding: $code-spacing-vertical $code-spacing-horizontal\n padding-right: 0\n border-top-left-radius: 0.2rem\n border-bottom-left-radius: 0.2rem\n\n .linenodiv\n padding-right: $code-spacing-horizontal\n font-size: var(--code-font-size)\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n\n // Actual code\n td.code\n padding: 0\n display: block\n flex: 1\n overflow: hidden\n\n .highlight\n border-top-left-radius: 0\n border-bottom-left-radius: 0\n\n// When `html_codeblock_linenos_style` is inline.\n.highlight\n span.linenos\n display: inline-block\n padding-left: 0\n padding-right: $code-spacing-horizontal\n margin-right: $code-spacing-horizontal\n box-shadow: -0.0625rem 0 var(--color-foreground-border) inset\n","// Inline Footnote Reference\n.footnote-reference\n font-size: var(--font-size--small--4)\n vertical-align: super\n\n// Definition list, listing the content of each note.\n// docutils <= 0.17\ndl.footnote.brackets\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\n display: grid\n grid-template-columns: max-content auto\n dt\n margin: 0\n > .fn-backref\n margin-left: 0.25rem\n\n &:after\n content: \":\"\n\n .brackets\n &:before\n content: \"[\"\n &:after\n content: \"]\"\n\n dd\n margin: 0\n padding: 0 1rem\n\n// docutils >= 0.18\naside.footnote\n font-size: var(--font-size--small)\n color: var(--color-foreground-secondary)\n\naside.footnote > span,\ndiv.citation > span\n float: left\n font-weight: 500\n padding-right: 0.25rem\n\naside.footnote > *:not(span),\ndiv.citation > p\n margin-left: 2rem\n","//\n// Figures\n//\nimg\n box-sizing: border-box\n max-width: 100%\n height: auto\n\narticle\n figure, .figure\n border-radius: 0.2rem\n\n margin: 0\n :last-child\n margin-bottom: 0\n\n .align-left\n float: left\n clear: left\n margin: 0 1rem 1rem\n\n .align-right\n float: right\n clear: right\n margin: 0 1rem 1rem\n\n .align-default,\n .align-center\n display: block\n text-align: center\n margin-left: auto\n margin-right: auto\n\n // WELL, table needs to be stylised like a table.\n table.align-default\n display: table\n text-align: initial\n",".genindex-jumpbox, .domainindex-jumpbox\n border-top: 1px solid var(--color-background-border)\n border-bottom: 1px solid var(--color-background-border)\n padding: 0.25rem\n\n.genindex-section, .domainindex-section\n h2\n margin-top: 0.75rem\n margin-bottom: 0.5rem\n ul\n margin-top: 0\n margin-bottom: 0\n","ul,\nol\n padding-left: 1.2rem\n\n // Space lists out like paragraphs\n margin-top: 1rem\n margin-bottom: 1rem\n // reduce margins within li.\n li\n > p:first-child\n margin-top: 0.25rem\n margin-bottom: 0.25rem\n\n > p:last-child\n margin-top: 0.25rem\n\n > ul,\n > ol\n margin-top: 0.5rem\n margin-bottom: 0.5rem\n\nol\n &.arabic\n list-style: decimal\n &.loweralpha\n list-style: lower-alpha\n &.upperalpha\n list-style: upper-alpha\n &.lowerroman\n list-style: lower-roman\n &.upperroman\n list-style: upper-roman\n\n// Don't space lists out when they're \"simple\" or in a `.. toctree::`\n.simple,\n.toctree-wrapper\n li\n > ul,\n > ol\n margin-top: 0\n margin-bottom: 0\n\n// Definition Lists\n.field-list,\n.option-list,\ndl:not([class]),\ndl.simple,\ndl.footnote,\ndl.glossary\n dt\n font-weight: 500\n margin-top: 0.25rem\n + dt\n margin-top: 0\n\n .classifier::before\n content: \":\"\n margin-left: 0.2rem\n margin-right: 0.2rem\n\n dd\n > p:first-child,\n ul\n margin-top: 0.125rem\n\n ul\n margin-bottom: 0.125rem\n",".math-wrapper\n width: 100%\n overflow-x: auto\n\ndiv.math\n position: relative\n text-align: center\n\n .headerlink,\n &:focus .headerlink\n display: none\n\n &:hover .headerlink\n display: inline-block\n\n span.eqno\n position: absolute\n right: 0.5rem\n top: 50%\n transform: translate(0, -50%)\n z-index: 1\n","// Abbreviations\nabbr[title]\n cursor: help\n\n// \"Problematic\" content, as identified by Sphinx\n.problematic\n color: var(--color-problematic)\n\n// Keyboard / Mouse \"instructions\"\nkbd:not(.compound)\n margin: 0 0.2rem\n padding: 0 0.2rem\n border-radius: 0.2rem\n border: 1px solid var(--color-foreground-border)\n color: var(--color-foreground-primary)\n vertical-align: text-bottom\n\n font-size: var(--font-size--small--3)\n display: inline-block\n\n box-shadow: 0 0.0625rem 0 rgba(0, 0, 0, 0.2), inset 0 0 0 0.125rem var(--color-background-primary)\n\n background-color: var(--color-background-secondary)\n\n// Blockquote\nblockquote\n border-left: 4px solid var(--color-background-border)\n background: var(--color-background-secondary)\n\n margin-left: 0\n margin-right: 0\n padding: 0.5rem 1rem\n\n .attribution\n font-weight: 600\n text-align: right\n\n &.pull-quote,\n &.highlights\n font-size: 1.25em\n\n &.epigraph,\n &.pull-quote\n border-left-width: 0\n border-radius: 0.5rem\n\n &.highlights\n border-left-width: 0\n background: transparent\n\n// Center align embedded-in-text images\np .reference img\n vertical-align: middle\n","p.rubric\n line-height: 1.25\n font-weight: bold\n font-size: 1.125em\n\n // For Numpy-style documentation that's got rubrics within it.\n // https://github.com/pradyunsg/furo/discussions/505\n dd &\n line-height: inherit\n font-weight: inherit\n\n font-size: var(--font-size--small)\n text-transform: uppercase\n","article .sidebar\n float: right\n clear: right\n width: 30%\n\n margin-left: 1rem\n margin-right: 0\n\n border-radius: 0.2rem\n background-color: var(--color-background-secondary)\n border: var(--color-background-border) 1px solid\n\n > *\n padding-left: 1rem\n padding-right: 1rem\n\n > ul, > ol // lists need additional padding, because bullets.\n padding-left: 2.2rem\n\n .sidebar-title\n margin: 0\n padding: 0.5rem 1rem\n border-bottom: var(--color-background-border) 1px solid\n\n font-weight: 500\n\n// TODO: subtitle\n// TODO: dedicated variables?\n","[role=main] .table-wrapper.container\n width: 100%\n overflow-x: auto\n margin-top: 1rem\n margin-bottom: 0.5rem\n padding: 0.2rem 0.2rem 0.75rem\n\ntable.docutils\n border-radius: 0.2rem\n border-spacing: 0\n border-collapse: collapse\n\n box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.0625rem rgba(0, 0, 0, 0.1)\n\n th\n background: var(--color-table-header-background)\n\n td,\n th\n // Space things out properly\n padding: 0 0.25rem\n\n // Get the borders looking just-right.\n border-left: 1px solid var(--color-table-border)\n border-right: 1px solid var(--color-table-border)\n border-bottom: 1px solid var(--color-table-border)\n\n p\n margin: 0.25rem\n\n &:first-child\n border-left: none\n &:last-child\n border-right: none\n\n // MyST-parser tables set these classes for control of column alignment\n &.text-left\n text-align: left\n &.text-right\n text-align: right\n &.text-center\n text-align: center\n",":target\n scroll-margin-top: 2.5rem\n\n@media (max-width: $full-width - $sidebar-width)\n :target\n scroll-margin-top: calc(2.5rem + var(--header-height))\n\n // When a heading is selected\n section > span:target\n scroll-margin-top: calc(2.8rem + var(--header-height))\n\n// Permalinks\n.headerlink\n font-weight: 100\n user-select: none\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\ndl dt,\np.caption,\nfigcaption p,\ntable > caption,\n.code-block-caption\n > .headerlink\n margin-left: 0.5rem\n visibility: hidden\n &:hover > .headerlink\n visibility: visible\n\n // Don't change to link-like, if someone adds the contents directive.\n > .toc-backref\n color: inherit\n text-decoration-line: none\n\n// Figure and table captions are special.\nfigure:hover > figcaption > p > .headerlink,\ntable:hover > caption > .headerlink\n visibility: visible\n\n:target >, // Regular section[id] style anchors\nspan:target ~ // Non-regular span[id] style \"extra\" anchors\n h1,\n h2,\n h3,\n h4,\n h5,\n h6\n &:nth-of-type(1)\n background-color: var(--color-highlight-on-target)\n // .headerlink\n // visibility: visible\n code.literal\n background-color: transparent\n\ntable:target > caption,\nfigure:target\n background-color: var(--color-highlight-on-target)\n\n// Inline page contents\n.this-will-duplicate-information-and-it-is-still-useful-here li :target\n background-color: var(--color-highlight-on-target)\n\n// Code block permalinks\n.literal-block-wrapper:target .code-block-caption\n background-color: var(--color-highlight-on-target)\n\n// When a definition list item is selected\n//\n// There isn't really an alternative to !important here, due to the\n// high-specificity of API documentation's selector.\ndt:target\n background-color: var(--color-highlight-on-target) !important\n\n// When a footnote reference is selected\n.footnote > dt:target + dd,\n.footnote-reference:target\n background-color: var(--color-highlight-on-target)\n",".guilabel\n background-color: var(--color-guilabel-background)\n border: 1px solid var(--color-guilabel-border)\n color: var(--color-guilabel-text)\n\n padding: 0 0.3em\n border-radius: 0.5em\n font-size: 0.9em\n","// This file contains the styles used for stylizing the footer that's shown\n// below the content.\n\nfooter\n font-size: var(--font-size--small)\n display: flex\n flex-direction: column\n\n margin-top: 2rem\n\n// Bottom of page information\n.bottom-of-page\n display: flex\n align-items: center\n justify-content: space-between\n\n margin-top: 1rem\n padding-top: 1rem\n padding-bottom: 1rem\n\n color: var(--color-foreground-secondary)\n border-top: 1px solid var(--color-background-border)\n\n line-height: 1.5\n\n @media (max-width: $content-width)\n text-align: center\n flex-direction: column-reverse\n gap: 0.25rem\n\n .left-details\n font-size: var(--font-size--small)\n\n .right-details\n display: flex\n flex-direction: column\n gap: 0.25rem\n text-align: right\n\n .icons\n display: flex\n justify-content: flex-end\n gap: 0.25rem\n font-size: 1rem\n\n a\n text-decoration: none\n\n svg,\n img\n font-size: 1.125rem\n height: 1em\n width: 1em\n\n// Next/Prev page information\n.related-pages\n a\n display: flex\n align-items: center\n\n text-decoration: none\n &:hover .page-info .title\n text-decoration: underline\n color: var(--color-link)\n text-decoration-color: var(--color-link-underline)\n\n svg.furo-related-icon,\n svg.furo-related-icon > use\n flex-shrink: 0\n\n color: var(--color-foreground-border)\n\n width: 0.75rem\n height: 0.75rem\n margin: 0 0.5rem\n\n &.next-page\n max-width: 50%\n\n float: right\n clear: right\n text-align: right\n\n &.prev-page\n max-width: 50%\n\n float: left\n clear: left\n\n svg\n transform: rotate(180deg)\n\n.page-info\n display: flex\n flex-direction: column\n overflow-wrap: anywhere\n\n .next-page &\n align-items: flex-end\n\n .context\n display: flex\n align-items: center\n\n padding-bottom: 0.1rem\n\n color: var(--color-foreground-muted)\n font-size: var(--font-size--small)\n text-decoration: none\n","// This file contains the styles for the contents of the left sidebar, which\n// contains the navigation tree, logo, search etc.\n\n////////////////////////////////////////////////////////////////////////////////\n// Brand on top of the scrollable tree.\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-brand\n display: flex\n flex-direction: column\n flex-shrink: 0\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n text-decoration: none\n\n.sidebar-brand-text\n color: var(--color-sidebar-brand-text)\n overflow-wrap: break-word\n margin: var(--sidebar-item-spacing-vertical) 0\n font-size: 1.5rem\n\n.sidebar-logo-container\n margin: var(--sidebar-item-spacing-vertical) 0\n\n.sidebar-logo\n margin: 0 auto\n display: block\n max-width: 100%\n\n////////////////////////////////////////////////////////////////////////////////\n// Search\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-search-container\n display: flex\n align-items: center\n margin-top: var(--sidebar-search-space-above)\n\n position: relative\n\n background: var(--color-sidebar-search-background)\n &:hover,\n &:focus-within\n background: var(--color-sidebar-search-background--focus)\n\n &::before\n content: \"\"\n position: absolute\n left: var(--sidebar-item-spacing-horizontal)\n width: var(--sidebar-search-icon-size)\n height: var(--sidebar-search-icon-size)\n\n background-color: var(--color-sidebar-search-icon)\n mask-image: var(--icon-search)\n\n.sidebar-search\n box-sizing: border-box\n\n border: none\n border-top: 1px solid var(--color-sidebar-search-border)\n border-bottom: 1px solid var(--color-sidebar-search-border)\n\n padding-top: var(--sidebar-search-input-spacing-vertical)\n padding-bottom: var(--sidebar-search-input-spacing-vertical)\n padding-right: var(--sidebar-search-input-spacing-horizontal)\n padding-left: calc(var(--sidebar-item-spacing-horizontal) + var(--sidebar-search-input-spacing-horizontal) + var(--sidebar-search-icon-size))\n\n width: 100%\n\n color: var(--color-sidebar-search-foreground)\n background: transparent\n z-index: 10\n\n &:focus\n outline: none\n\n &::placeholder\n font-size: var(--sidebar-search-input-font-size)\n\n//\n// Hide Search Matches link\n//\n#searchbox .highlight-link\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal) 0\n margin: 0\n text-align: center\n\n a\n color: var(--color-sidebar-search-icon)\n font-size: var(--font-size--small--2)\n\n////////////////////////////////////////////////////////////////////////////////\n// Structure/Skeleton of the navigation tree (left)\n////////////////////////////////////////////////////////////////////////////////\n.sidebar-tree\n font-size: var(--sidebar-item-font-size)\n margin-top: var(--sidebar-tree-space-above)\n margin-bottom: var(--sidebar-item-spacing-vertical)\n\n ul\n padding: 0\n margin-top: 0\n margin-bottom: 0\n\n display: flex\n flex-direction: column\n\n list-style: none\n\n li\n position: relative\n margin: 0\n\n > ul\n margin-left: var(--sidebar-item-spacing-horizontal)\n\n .icon\n color: var(--color-sidebar-link-text)\n\n .reference\n box-sizing: border-box\n color: var(--color-sidebar-link-text)\n\n // Fill the parent.\n display: inline-block\n line-height: var(--sidebar-item-line-height)\n text-decoration: none\n\n // Don't allow long words to cause wrapping.\n overflow-wrap: anywhere\n\n height: 100%\n width: 100%\n\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n &:hover\n color: var(--color-sidebar-link-text)\n background: var(--color-sidebar-item-background--hover)\n\n // Add a nice little \"external-link\" arrow here.\n &.external::after\n content: url('data:image/svg+xml,')\n margin: 0 0.25rem\n vertical-align: middle\n color: var(--color-sidebar-link-text)\n\n // Make the current page reference bold.\n .current-page > .reference\n font-weight: bold\n\n label\n position: absolute\n top: 0\n right: 0\n height: var(--sidebar-item-height)\n width: var(--sidebar-expander-width)\n\n cursor: pointer\n user-select: none\n\n display: flex\n justify-content: center\n align-items: center\n\n .caption, :not(.caption) > .caption-text\n font-size: var(--sidebar-caption-font-size)\n color: var(--color-sidebar-caption-text)\n\n font-weight: bold\n text-transform: uppercase\n\n margin: var(--sidebar-caption-space-above) 0 0 0\n padding: var(--sidebar-item-spacing-vertical) var(--sidebar-item-spacing-horizontal)\n\n // If it has children, add a bit more padding to wrap the content to avoid\n // overlapping with the

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 LTRr3Wr5pbX!1aeN diff --git a/docs/html/_images/migrate-from-lma-to-cos-lite-3.png b/docs/html/_images/migrate-from-lma-to-cos-lite-3.png deleted file mode 100644 index 55a68320689980782c190d0adee1a71c0af34660..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326402 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ΞA)tQ(iS%C;CD0wv_Cf;l3 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/html/_images/without-scrape-config.svg b/docs/html/_images/without-scrape-config.svg deleted file mode 100644 index 2542494a..00000000 --- a/docs/html/_images/without-scrape-config.svg +++ /dev/null @@ -1,289 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/html/_sphinx_design_static/design-tabs.js b/docs/html/_sphinx_design_static/design-tabs.js deleted file mode 100644 index b25bd6a4..00000000 --- a/docs/html/_sphinx_design_static/design-tabs.js +++ /dev/null @@ -1,101 +0,0 @@ -// @ts-check - -// Extra JS capability for selected tabs to be synced -// The selection is stored in local storage so that it persists across page loads. - -/** - * @type {Record} - */ -let sd_id_to_elements = {}; -const storageKeyPrefix = "sphinx-design-tab-id-"; - -/** - * Create a key for a tab element. - * @param {HTMLElement} el - The tab element. - * @returns {[string, string, string] | null} - The key. - * - */ -function create_key(el) { - let syncId = el.getAttribute("data-sync-id"); - let syncGroup = el.getAttribute("data-sync-group"); - if (!syncId || !syncGroup) return null; - return [syncGroup, syncId, syncGroup + "--" + syncId]; -} - -/** - * Initialize the tab selection. - * - */ -function ready() { - // Find all tabs with sync data - - /** @type {string[]} */ - let groups = []; - - document.querySelectorAll(".sd-tab-label").forEach((label) => { - if (label instanceof HTMLElement) { - let data = create_key(label); - if (data) { - let [group, id, key] = data; - - // add click event listener - // @ts-ignore - label.onclick = onSDLabelClick; - - // store map of key to elements - if (!sd_id_to_elements[key]) { - sd_id_to_elements[key] = []; - } - sd_id_to_elements[key].push(label); - - if (groups.indexOf(group) === -1) { - groups.push(group); - // Check if a specific tab has been selected via URL parameter - const tabParam = new URLSearchParams(window.location.search).get( - group - ); - if (tabParam) { - console.log( - "sphinx-design: Selecting tab id for group '" + - group + - "' from URL parameter: " + - tabParam - ); - window.sessionStorage.setItem(storageKeyPrefix + group, tabParam); - } - } - - // Check is a specific tab has been selected previously - let previousId = window.sessionStorage.getItem( - storageKeyPrefix + group - ); - if (previousId === id) { - // console.log( - // "sphinx-design: Selecting tab from session storage: " + id - // ); - // @ts-ignore - label.previousElementSibling.checked = true; - } - } - } - }); -} - -/** - * Activate other tabs with the same sync id. - * - * @this {HTMLElement} - The element that was clicked. - */ -function onSDLabelClick() { - let data = create_key(this); - if (!data) return; - let [group, id, key] = data; - for (const label of sd_id_to_elements[key]) { - if (label === this) continue; - // @ts-ignore - label.previousElementSibling.checked = true; - } - window.sessionStorage.setItem(storageKeyPrefix + group, id); -} - -document.addEventListener("DOMContentLoaded", ready, false); diff --git a/docs/html/_sphinx_design_static/sphinx-design.min.css b/docs/html/_sphinx_design_static/sphinx-design.min.css deleted file mode 100644 index 860c36da..00000000 --- a/docs/html/_sphinx_design_static/sphinx-design.min.css +++ /dev/null @@ -1 +0,0 @@ -.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-hide-link-text{font-size:0}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative;font-size:var(--sd-fontsize-dropdown)}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary.sd-summary-title{padding:.5em .6em .5em 1em;font-size:var(--sd-fontsize-dropdown-title);font-weight:var(--sd-fontweight-dropdown-title);user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;list-style:none;display:inline-flex;justify-content:space-between}details.sd-dropdown summary.sd-summary-title::-webkit-details-marker{display:none}details.sd-dropdown summary.sd-summary-title:focus{outline:none}details.sd-dropdown summary.sd-summary-title .sd-summary-icon{margin-right:.6em;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary.sd-summary-title .sd-summary-text{flex-grow:1;line-height:1.5;padding-right:.5rem}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker{pointer-events:none;display:inline-flex;align-items:center}details.sd-dropdown summary.sd-summary-title .sd-summary-state-marker svg{opacity:.6}details.sd-dropdown summary.sd-summary-title:hover .sd-summary-state-marker svg{opacity:1;transform:scale(1.1)}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown .sd-summary-chevron-right{transition:.25s}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-right{transform:rotate(90deg)}details.sd-dropdown[open]>.sd-summary-title .sd-summary-chevron-down{transform:rotate(180deg)}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #0071bc;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0060a0;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-bg: rgba(0, 113, 188, 0.2);--sd-color-secondary-bg: rgba(108, 117, 125, 0.2);--sd-color-success-bg: rgba(40, 167, 69, 0.2);--sd-color-info-bg: rgba(23, 162, 184, 0.2);--sd-color-warning-bg: rgba(240, 179, 126, 0.2);--sd-color-danger-bg: rgba(220, 53, 69, 0.2);--sd-color-light-bg: rgba(248, 249, 250, 0.2);--sd-color-muted-bg: rgba(108, 117, 125, 0.2);--sd-color-dark-bg: rgba(33, 37, 41, 0.2);--sd-color-black-bg: rgba(0, 0, 0, 0.2);--sd-color-white-bg: rgba(255, 255, 255, 0.2);--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem;--sd-fontsize-dropdown: inherit;--sd-fontsize-dropdown-title: 1rem;--sd-fontweight-dropdown-title: 700} diff --git a/docs/html/_static/404.svg b/docs/html/_static/404.svg deleted file mode 100644 index b353cd33..00000000 --- a/docs/html/_static/404.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - diff --git a/docs/html/_static/_sphinx_javascript_frameworks_compat.js b/docs/html/_static/_sphinx_javascript_frameworks_compat.js deleted file mode 100644 index 81415803..00000000 --- a/docs/html/_static/_sphinx_javascript_frameworks_compat.js +++ /dev/null @@ -1,123 +0,0 @@ -/* Compatability shim for jQuery and underscores.js. - * - * Copyright Sphinx contributors - * Released under the two clause BSD licence - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} diff --git a/docs/html/_static/basic.css b/docs/html/_static/basic.css deleted file mode 100644 index f316efcb..00000000 --- a/docs/html/_static/basic.css +++ /dev/null @@ -1,925 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -a:visited { - color: #551A8B; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -nav.contents, -aside.topic, -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -nav.contents, -aside.topic, -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -nav.contents > :last-child, -aside.topic > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -nav.contents::after, -aside.topic::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -aside.footnote > span, -div.citation > span { - float: left; -} -aside.footnote > span:last-of-type, -div.citation > span:last-of-type { - padding-right: 0.5em; -} -aside.footnote > p { - margin-left: 2em; -} -div.citation > p { - margin-left: 4em; -} -aside.footnote > p:last-of-type, -div.citation > p:last-of-type { - margin-bottom: 0em; -} -aside.footnote > p:last-of-type:after, -div.citation > p:last-of-type:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -.sig dd { - margin-top: 0px; - margin-bottom: 0px; -} - -.sig dl { - margin-top: 0px; - margin-bottom: 0px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -.translated { - background-color: rgba(207, 255, 207, 0.2) -} - -.untranslated { - background-color: rgba(255, 207, 207, 0.2) -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/docs/html/_static/check-solid.svg b/docs/html/_static/check-solid.svg deleted file mode 100644 index 92fad4b5..00000000 --- a/docs/html/_static/check-solid.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/docs/html/_static/clipboard.min.js b/docs/html/_static/clipboard.min.js deleted file mode 100644 index 54b3c463..00000000 --- a/docs/html/_static/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.8 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 - - - - diff --git a/docs/html/_static/copybutton.css b/docs/html/_static/copybutton.css deleted file mode 100644 index f1916ec7..00000000 --- a/docs/html/_static/copybutton.css +++ /dev/null @@ -1,94 +0,0 @@ -/* Copy buttons */ -button.copybtn { - position: absolute; - display: flex; - top: .3em; - right: .3em; - width: 1.7em; - height: 1.7em; - opacity: 0; - transition: opacity 0.3s, border .3s, background-color .3s; - user-select: none; - padding: 0; - border: none; - outline: none; - border-radius: 0.4em; - /* The colors that GitHub uses */ - border: #1b1f2426 1px solid; - background-color: #f6f8fa; - color: #57606a; -} - -button.copybtn.success { - border-color: #22863a; - color: #22863a; -} - -button.copybtn svg { - stroke: currentColor; - width: 1.5em; - height: 1.5em; - padding: 0.1em; -} - -div.highlight { - position: relative; -} - -/* Show the copybutton */ -.highlight:hover button.copybtn, button.copybtn.success { - opacity: 1; -} - -.highlight button.copybtn:hover { - background-color: rgb(235, 235, 235); -} - -.highlight button.copybtn:active { - background-color: rgb(187, 187, 187); -} - -/** - * A minimal CSS-only tooltip copied from: - * https://codepen.io/mildrenben/pen/rVBrpK - * - * To use, write HTML like the following: - * - *